Есть ли удобный способ получить информацию обо всех подсистемах файловых систем btrfs, не прибегая к C, то есть в оболочке POSIX ?
/sys/fs/btrfs
содержит информацию только о файловых системах, ничего о подобъемах, поэтому в настоящее время я монтирую все файловые системы во временную папку, сканирую их btrfs subvol list
и затем анализирую полученный результат. Излишне говорить, что это довольно некрасиво.
Это с ядром 3.16.x и btrfs-progs v3.14.1 (из стандартной Ubuntu 14.10).
Ниже приведен (уродливый) скрипт, который я сейчас использую. Я знаю, что могу получить информацию, которая мне нужна, используя чистый C, и это, вероятно, то, чем я в конечном итоге буду заниматься, но мне было интересно, есть ли более простой и элегантный способ.
#!/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
Ответы:
/sys/fs/btrfs
не перечисляет все файловые системы btrfs (например, не смонтированные), протестированные в Debian / Ubuntu (4.14.0-1 / 4.10.0-42).Я бы использовал проги btrfs для их поиска:
А поскольку проги btrfs могут перечислять подобъемы только смонтированного fs, ваш сценарий находится недалеко от того, что я бы использовал:
Не тестируется на файловой системе с несколькими устройствами (raid-0/1/10/5/6)
источник