Existe uma maneira conveniente de obter informações sobre todos os subvolumes do sistema de arquivos btrfs sem recorrer ao C, ou seja, no shell POSIX ?
/sys/fs/btrfs
contém informações apenas em sistemas de arquivos, nada em subvolumes, então, atualmente, acabo montando todos os sistemas de arquivos em uma pasta temporária, digitalizando-os btrfs subvol list
e analisando a saída resultante. Escusado será dizer que isso é bastante feio.
Isso ocorre com o kernel 3.16.x e o btrfs-progs v3.14.1 (do Ubuntu 14.10).
Abaixo está o script (feio) que estou usando atualmente. Sei que poderia obter as informações necessárias usando C puro, e provavelmente é isso que acabarei fazendo, mas estava pensando se havia uma maneira mais simples e elegante.
#!/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
Respostas:
/sys/fs/btrfs
não lista todos os sistemas de arquivos btrfs (por exemplo, não montados), testados no Debian / Ubuntu (4.14.0-1 / 4.10.0-42).Eu usaria btrfs progs para procurá-los:
E como o btrfs progs pode listar subvolumes apenas do fs montado, seu script não está longe do que eu usaria:
Não testado no sistema de arquivos para vários dispositivos (raid-0/1/10/5/6)
fonte