From 362dd9f4432417929614f86dcc670146e963a0c5 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 6 Jun 2023 08:02:33 -0400 Subject: detect rootfs path and mark it with /./ --- list-all-subvolumes | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/list-all-subvolumes b/list-all-subvolumes index 2acf772..ec042c7 100755 --- a/list-all-subvolumes +++ b/list-all-subvolumes @@ -7,15 +7,18 @@ list_all_subvolumes() for dev in $(list_btrfs) do [ -b "$dev" ] || return - d=btrfs/$$/$(systemd-escape "$dev") + d=btrfs/pid-$$/$(systemd-escape "$dev") ( cd /run mkdir -p "$d" || exit trap 'umount "$d"; rmdir -p "$d" 2>/dev/null' EXIT - set -x - mountpoint -q "$d" || mount -o ro,subvol=/ "$dev" "$d" || return - btrfs subvolume list "$@" "$d" - ) | extract_subvolume_path "${d##*/}" || return + root= + ( + set -x + mountpoint -q "$d" || mount -o ro,subvol=/ "$dev" "$d" || return + btrfs subvolume list "$@" "$d" + ) | extract_subvolume_path "/run/$d" || return + ) done } @@ -25,7 +28,19 @@ extract_subvolume_path() do path=${REPLY#* path } [ "$path" != "$REPLY" ] - printf '%s/%s\n' "$1" "${path#/}" + path=${path#/} + + abspath=$1/$path + [ -d "$abspath" ] || exit + + if [ ! "$root" -a "$abspath" -ef / ] + then + root=$path + fi + case "$path" in + "$root" | "$root"/*) path=$root/.${path#$root} ;; + esac + printf '%s//%s\n' "${1##*/}" "$path" done } -- cgit v1.2.3