¿Hay alguna manera conveniente de obtener información sobre todos los subvolúmenes de sistemas de archivos btrfs sin recurrir a C, es decir, en el shell POSIX ?
/sys/fs/btrfs
contiene información solo sobre sistemas de archivos, nada sobre subvolúmenes, por lo que actualmente termino montando todos los sistemas de archivos en una carpeta temporal, escaneándolos btrfs subvol list
y luego analizando la salida resultante. No hace falta decir que eso es bastante feo.
Esto es con un kernel 3.16.x y btrfs-progs v3.14.1 (del stock Ubuntu 14.10).
A continuación se muestra el script (feo) que estoy usando actualmente. Sé que podría obtener la información que necesito usando C puro, y eso es probablemente lo que terminaré haciendo, pero me preguntaba si había una manera más simple y 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
Respuestas:
/sys/fs/btrfs
no enumera todos los sistemas de archivos btrfs (por ejemplo, uno no montado), probado en Debian / Ubuntu (4.14.0-1 / 4.10.0-42).Usaría btrfs progs para buscarlos:
Y dado que los programas btrfs pueden enumerar subvolúmenes solo de fs montados, su script no está lejos de lo que usaría:
No probado contra el sistema de archivos de múltiples dispositivos (raid-0/1/10/5/6)
fuente