« bips machine | Home | mhddfs pour réunir des points de montage »
Bind et VFS Shared subtrees
posté par cep le 16 octobre 2008
Depuis les noyaux 2.4 la commande mount –bind permet de monter en parallèle un point de montage sur un autre point de montage. Mais ces points de montage restent statiques.
Avec les shared subtree il est maintenant possible d’étendre les possibilités de bind et rendre le tout dynamique. Ainsi un mount ou un umount dans un point “clone” sera répercuté dans les autres points de montage. On peut ainsi distinguer quatre types de montages :
-a. shared mount = montage partagé répercutant les nouveaux montages ou démontages vers les “clones” et le montage source.
-b. slave mount = montage esclave qui se différencie du shared par le fait que mounts et umounts dans le montage esclave ne se répercutent pas dans le montage source.
-c. private mount = mount classique
-d. unbindable mount = on ne peut pas répercuter le point de montage, le bind va échouer.
Pour plus de détails, se référer au fichier /Documentation/filesystems/sharedsubtree.txt fourni avec les sources du noyau. Pour ceux qui n’ont pas les sources, je mettrai en annexe ce fichier.
Exemples d’utilisation du shared mount subtree :
Après avoir monté /dev/hdc4 dans /mnt/hdc4jfs, on donne le caractère shared au point de montage source puis on fait le bind vers le point de montage /mnt/test/
:~# mount --make-shared /mnt/hdc4jfs
:~# mount --bind /mnt/hdc4jfs/ /mnt/test
On vérifie grace à la commande mount que le bind est bien présent :
:~# mount |grep hdc4 /dev/hdc4 on /mnt/hdc4jfs type jfs (rw) /mnt/hdc4jfs on /mnt/test type none (rw,bind)
Pour vérifier avec df il faut ajouter l’option -a qui permet d’afficher les systèmes de fichiers factices.
:~# df -aTh -tjfs -tnone Sys. de fich. Type Tail. Occ. Disp. %Occ. Monté sur /dev/hdc4 jfs 26G 3,4M 26G 1% /mnt/hdc4jfs /mnt/hdc4jfs none 26G 3,4M 26G 1% /mnt/test
Maintenant on va monter /dev/hdc8 dans /mnt/test/hdc8 pour vérifier que ce nouveau nom de montage se répercute aussi dans le point de montage source /mnt/hdc4jfs :
:~# mount /dev/hdc8 /mnt/test/hdc8/ :~# ls -lh /mnt/test/hdc8/ total 1,1G -rw-r--r-- 1 root root 997M jui 17 12:05 hda10_image drwxr-xr-x 23 cep cep 4,0K sep 6 18:30 linux-2.6-2.6.27~rc5 -rw-r--r-- 1 cep cep 552K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.diff.gz -rw-r--r-- 1 cep cep 4,9K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.dsc -rw-r--r-- 1 cep cep 61M sep 3 00:37 linux-2.6_2.6.27~rc5.orig.tar.gz drwx------ 2 root root 16K mai 6 09:21 lost+found drwxr-xr-x 2 cep cep 4,0K mai 9 08:47 ms_xp drwxr-xr-x 2 cep cep 4,0K sep 6 18:20 source_26
On vérifie qu’il est aussi présent dans /mnt/hdc4jfs/hdc8/ :
:~# ls -lh /mnt/hdc4jfs/ /mnt/hdc4jfs/hdc8/ /mnt/hdc4jfs/: total 80K drwxr-xr-x 6 cep cep 4,0K sep 15 16:10 hdc8 -rw-r--r-- 1 cep cep 39K oct 15 10:50 sharedsubtree.txt -rw-r--r-- 1 cep cep 32K oct 14 19:25 sharedsubtree.txt~ -rw-r--r-- 1 cep cep 64 oct 14 19:11 test_char.txt -rw-r--r-- 1 cep cep 0 oct 14 19:50 un /mnt/hdc4jfs/hdc8/: total 1,1G -rw-r--r-- 1 root root 997M jui 17 12:05 hda10_image drwxr-xr-x 23 cep cep 4,0K sep 6 18:30 linux-2.6-2.6.27~rc5 -rw-r--r-- 1 cep cep 552K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.diff.gz -rw-r--r-- 1 cep cep 4,9K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.dsc -rw-r--r-- 1 cep cep 61M sep 3 00:37 linux-2.6_2.6.27~rc5.orig.tar.gz drwx------ 2 root root 16K mai 6 09:21 lost+found drwxr-xr-x 2 cep cep 4,0K mai 9 08:47 ms_xp drwxr-xr-x 2 cep cep 4,0K sep 6 18:20 source_26
Comme j’ai monté de manière classique /dev/hdc8, c’est à dire sans bind, le df -a le signale seulement dans /mnt/test/hdc8.
De même la sortie de df montre qu’il est possible de mélanger les systèmes de fichiers :
:~# df -aT -tjfs -tnone -text4dev Sys. de fich. Type 1K-blocs Occupé Disponible Capacité Monté sur /dev/hdc4 jfs 26593952 3436 26590516 1% /mnt/hdc4jfs /mnt/hdc4jfs none 26593952 3436 26590516 1% /mnt/test /dev/hdc8 ext4dev 20295680 3770180 16319308 19% /mnt/test/hdc8
Par contre, si on donne le caractère unbindable à /mnt/hdc4jfs, le bind va échouer :
Depuis les noyaux 2.4 la commande mount –bind permet de monter en parallèle un point de montage sur un autre point de montage. Mais ces points de montage restent statiques.
Avec les shared subtree il est maintenant possible d’étendre les possibilités de bind et rendre le tout dynamique. Ainsi un mount ou un umount dans un point “clone” sera répercuté dans les autres points de montage. On peut ainsi distinguer quatre types de montages :
-a. shared mount = montage partagé répercutant les nouveaux montages ou démontages vers les “clones” et le montage source.
-b. slave mount = montage esclave qui se différencie du shared par le fait que mounts et umounts dans le montage esclave ne se répercutent pas dans le montage source.
-c. private mount = mount classique
-d. unbindable mount = on ne peut pas répercuter le point de montage, le bind va échouer.
Pour plus de détails, se référer au fichier /Documentation/filesystems/sharedsubtree.txt fourni avec les sources du noyau. Pour ceux qui n’ont pas les sources, je mettrai en annexe ce fichier.
Exemples d’utilisation du shared mount subtree :
Après avoir monté /dev/hdc4 dans /mnt/hdc4jfs, on donne le caractère shared au point de montage source puis on fait le bind vers le point de montage /mnt/test/
:~# mount --make-shared /mnt/hdc4jfs
:~# mount --bind /mnt/hdc4jfs/ /mnt/test
On vérifie grace à la commande mount que le bind est bien présent :
:~# mount |grep hdc4 /dev/hdc4 on /mnt/hdc4jfs type jfs (rw) /mnt/hdc4jfs on /mnt/test type none (rw,bind)
Pour vérifier avec df il faut ajouter l’option -a qui permet d’afficher les systèmes de fichiers factices.
:~# df -aTh -tjfs -tnone Sys. de fich. Type Tail. Occ. Disp. %Occ. Monté sur /dev/hdc4 jfs 26G 3,4M 26G 1% /mnt/hdc4jfs /mnt/hdc4jfs none 26G 3,4M 26G 1% /mnt/test
Maintenant on va monter /dev/hdc8 dans /mnt/test/hdc8 pour vérifier que ce nouveau nom de montage se répercute aussi dans le point de montage source /mnt/hdc4jfs :
:~# mount /dev/hdc8 /mnt/test/hdc8/ :~# ls -lh /mnt/test/hdc8/ total 1,1G -rw-r--r-- 1 root root 997M jui 17 12:05 hda10_image drwxr-xr-x 23 cep cep 4,0K sep 6 18:30 linux-2.6-2.6.27~rc5 -rw-r--r-- 1 cep cep 552K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.diff.gz -rw-r--r-- 1 cep cep 4,9K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.dsc -rw-r--r-- 1 cep cep 61M sep 3 00:37 linux-2.6_2.6.27~rc5.orig.tar.gz drwx------ 2 root root 16K mai 6 09:21 lost+found drwxr-xr-x 2 cep cep 4,0K mai 9 08:47 ms_xp drwxr-xr-x 2 cep cep 4,0K sep 6 18:20 source_26
On vérifie qu’il est aussi présent dans /mnt/hdc4jfs/hdc8/ :
:~# ls -lh /mnt/hdc4jfs/ /mnt/hdc4jfs/hdc8/ /mnt/hdc4jfs/: total 80K drwxr-xr-x 6 cep cep 4,0K sep 15 16:10 hdc8 -rw-r--r-- 1 cep cep 39K oct 15 10:50 sharedsubtree.txt -rw-r--r-- 1 cep cep 32K oct 14 19:25 sharedsubtree.txt~ -rw-r--r-- 1 cep cep 64 oct 14 19:11 test_char.txt -rw-r--r-- 1 cep cep 0 oct 14 19:50 un /mnt/hdc4jfs/hdc8/: total 1,1G -rw-r--r-- 1 root root 997M jui 17 12:05 hda10_image drwxr-xr-x 23 cep cep 4,0K sep 6 18:30 linux-2.6-2.6.27~rc5 -rw-r--r-- 1 cep cep 552K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.diff.gz -rw-r--r-- 1 cep cep 4,9K sep 5 00:37 linux-2.6_2.6.27~rc5-1~experimental.1~snapshot.12183.dsc -rw-r--r-- 1 cep cep 61M sep 3 00:37 linux-2.6_2.6.27~rc5.orig.tar.gz drwx------ 2 root root 16K mai 6 09:21 lost+found drwxr-xr-x 2 cep cep 4,0K mai 9 08:47 ms_xp drwxr-xr-x 2 cep cep 4,0K sep 6 18:20 source_26
Comme j’ai monté de manière classique /dev/hdc8, c’est à dire sans bind, le df -a le signale seulement dans /mnt/test/hdc8.
De même la sortie de df montre qu’il est possible de mélanger les systèmes de fichiers :
:~# df -aT -tjfs -tnone -text4dev Sys. de fich. Type 1K-blocs Occupé Disponible Capacité Monté sur /dev/hdc4 jfs 26593952 3436 26590516 1% /mnt/hdc4jfs /mnt/hdc4jfs none 26593952 3436 26590516 1% /mnt/test /dev/hdc8 ext4dev 20295680 3770180 16319308 19% /mnt/test/hdc8
Par contre, si on donne le caractère unbindable à /mnt/hdc4jfs, le bind va échouer :
:~# mount --make-unbindable /mnt/hdc4jfs
:~# mount --bind /mnt/hdc4jfs/ /mnt/test
mount: wrong fs type, bad option, bad superblock on /mnt/hdc4jfs, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so
Dans un prochain article je montrrai comment il est possible d’étendre simplement la taille d’un système de fichiers avec mhddfs.
cep
Annexe : /Documentation/filesystems/sharedsubtree.txt
Topics: Général |
