Existe-t-il un moyen pratique d'obtenir des informations sur tous les sous-volumes des systèmes de fichiers btrfs sans recourir au C, c'est-à-dire dans le shell POSIX ?
/sys/fs/btrfs
contient des informations uniquement sur les systèmes de fichiers, rien sur les sous-volumes, donc actuellement je finis par monter tous les systèmes de fichiers dans un dossier temporaire, en les analysant avec btrfs subvol list
, puis en analysant la sortie résultante. Inutile de dire que c'est assez moche.
C'est avec un noyau 3.16.x et btrfs-progs v3.14.1 (du stock Ubuntu 14.10).
Voici le script (moche) que j'utilise actuellement. Je sais que je pourrais obtenir les informations dont j'ai besoin en utilisant du C pur, et c'est probablement ce que je finirai par faire, mais je me demandais s'il y avait une manière plus simple et plus élégante.
#!/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
Réponses:
/sys/fs/btrfs
ne répertorie pas tous les systèmes de fichiers btrfs (par exemple non montés), testés sur Debian / Ubuntu (4.14.0-1 / 4.10.0-42).J'utiliserais les progs btrfs pour les rechercher:
Et comme les progs btrfs ne peuvent lister que les sous-volumes de fs montés, votre script n'est pas loin de ce que j'utiliserais:
Non testé contre le système de fichiers multi-périphérique (raid-0/1/10/5/6)
la source