Gibt es eine bequeme Möglichkeit, Informationen zu allen Subvolumes von btrfs- Dateisystemen abzurufen, ohne auf C zurückzugreifen, dh in der POSIX-Shell ?
/sys/fs/btrfs
Enthält nur Informationen zu Dateisystemen, nichts zu Subvolumes. Daher mounte ich derzeit alle Dateisysteme in einem temporären Ordner, scanne sie mit btrfs subvol list
und analysiere dann die resultierende Ausgabe. Das ist natürlich ziemlich hässlich.
Dies ist mit einem 3.16.x Kernel und btrfs-progs v3.14.1 (ab Lager Ubuntu 14.10).
Unten ist das (hässliche) Skript, das ich gerade benutze. Ich weiß, dass ich die Informationen, die ich brauche, mit reinem C erhalten könnte, und das werde ich wahrscheinlich am Ende tun, aber ich habe mich gefragt, ob es einen einfacheren und eleganteren Weg gibt.
#!/bin/bash
for i in /sys/fs/btrfs/*[!features]; do
device="/dev/$(basename $i/devices/*)"
mountpoint=/var/lib/btrfs/tmp/mnt/$(basename "$i")
[ -d "$mountpoint" ] || mkdir "$mountpoint"
grep -qs $mountpoint /proc/mounts
[ $? -ne 0 ] && mount -v "$device" "$mountpoint"
while read -r subvol; do
# whatever you want
done < <(btrfs subvolume list "$mountpoint")
umount $mountpoint
rmdir $mountpoint
done
Antworten:
/sys/fs/btrfs
listet nicht alle btrfs-Dateisysteme auf (z. B. keine gemounteten), die unter Debian / Ubuntu (4.14.0-1 / 4.10.0-42) getestet wurden.Ich würde btrfs progs verwenden, um sie zu durchsuchen:
Und da btrfs progs nur Subvolumes von gemounteten fs auflisten können, ist Ihr Skript nicht weit von dem entfernt, was ich verwenden würde:
Nicht gegen Dateisystem mit mehreren Geräten getestet (RAID-0 / 1/10/5/6)
quelle