« Bind et VFS Shared subtrees | Home | Superblocs de secours ext3 »

mhddfs pour réunir des points de montage

posté par cep le 17 octobre 2008

Mhddfs ( Multi HDD Fuse Filesystem ) est un système permettant de regrouper virtuellement, et grâce à Fuse, plusieurs points de montages de systèmes de fichiers en un seul point, donnant ainsi l’impression que ce répertoire a la taille de l’ensemble des montages combinés.

La création de nouveaux fichiers ayant pour cible le point de regroupement se fera d’abord dans le premier point de montage, et ainsi de suite s’il y a manque de place. Par exemple si on regroupe /A /B /C en /D et on demande la création du fichier f en /D, f sera créé dans /A sous réserve que /A ait encore au minimum 4 Go de place disponible. Si ce n’est pas le cas, il sera créé en /B. La limite de 4 Go peut être modifié, mais ne peut descendre en dessous de 100 Mo.

- Exemple d’utilisation :

Avec mhddfs on va regrouper /mnt/commun/, /mnt/compil/, et /mnt/hdc4jfs, le tout dans /mnt/test/

:~#  mhddfs /mnt/commun/,/mnt/compil,/mnt/hdc4jfs  /mnt/test/
mhddfs: directory '/mnt/commun/' added to list
mhddfs: directory '/mnt/compil' added to list
mhddfs: directory '/mnt/hdc4jfs' added to list
mhddfs: mount to: /mnt/test/
mhddfs: move size limit 4294967296 bytes

Avec la commande mount on vérifie ce qui a été monté :

:~# mount -tfuse.mhddfs
/mnt/commun/;/mnt/compil;/mnt/hdc4jfs on /mnt/test type fuse.mhddfs (rw,nosuid,nodev)

Idem avec la commande df, qui révèle qu’un ensemble de 87 Go a été créé :

:~#  df -aTh -tfuse.mhddfs
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/mnt/commun/;/mnt/compil;/mnt/hdc4jfs
fuse.mhddfs     87G   20G   68G  23% /mnt/test

Détail du pool, toujours avec la commande df :

:~# df -aTh /mnt/commun /mnt/compil/ /mnt/hdc4jfs/ /mnt/test
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/hdc6      xfs     53G   17G   36G  32% /mnt/commun
/dev/hdc7     ext3    9,2G  3,0G  6,2G  33% /mnt/compil
/dev/hdc4      jfs     26G  3,4M   26G   1% /mnt/hdc4jfs
/mnt/commun/;/mnt/compil;/mnt/hdc4jfs
fuse.mhddfs     87G   20G   68G  23% /mnt/test

Pour tester le fonctionnement du système, nous allons créer un fichier.img d’une taille de 200Mo dans /mnt/test :

:~# head -c 200m < /dev/zero > /mnt/test/fichier.img

Comme /mnt/commun était placé en première position dans la commande de construction du pool, je vérifie que le nouveau fichier y est bien présent, de même que dans /mnt/test/. Bien sûr un seul fichier a été créé :

:~# ls -lh /mnt/commun/fichier.img
-rw-r--r-- 1 root root 200M oct 17 10:05 /mnt/commun/fichier.img
phusis:~# ls -lh /mnt/test/fichier.img
-rw-r--r-- 1 root root 200M oct 17 10:05 /mnt/test/fichier.img

Pour supprimer le regroupement, on va utiliser la commande fusermount avec l’option -u :

:~# fusermount -u /mnt/test

Mhddfs est toujours en développement. Il pourra aussi être avantageusement utilisé pour, par exemple, regrouper deux partitions logiques que l’on aurait voulu réunir mais qu’il est impossible de faire de par leur situation respéctive sans se lancer dans de grosses modifications. Pour autant il ne doit être comparé ni à une solution raid, ni à du lvm.

cep

Topics: Général, linux |

5 Responses to “mhddfs pour réunir des points de montage”

  1. Revan Says:
    18 octobre 2008 at 21:30

    Merci ! Un outils très intéressant. J’ai toujours pensé que ce niveau d’abstraction était nécessaire : pour moi, l’espace libre d’un disque dur devrait toujours pouvoir être utilisé à partir de n’importe quelle partition.
    Cette solution est quand même plus simple à mettre en oeuvre que LVM ou du RAID…La seule limitation est qu’on ne peut pas créer un fichier unique supérieur à l’espace libre le plus gros… (pas de chevauchement).
    Sinon, j’ai vu que tu as mis en grappe des fs différents…Ca marche aussi avec du NTFS ? Et avec les futurs Ext4 / Btrfs ? A priori, je dirai que oui, mais il y a peut être des précautions à prendre ;)

    @++

  2. cep Says:
    19 octobre 2008 at 14:45

    Je n’ai pas essayé avec ntfs et btrfs.
    Concernant ext4, je l’utilise depuis pas mal de temps en dev, mais l’ai testé très peu avec mhddfs pour avoir une opinion précise.

  3. birdwing Says:
    16 février 2010 at 14:39

    bonjour,
    très sympa comme doc.

    j’ai tenté l’aventure en mettant :

    ~ $ mhddfs /media/libre_101Go/,/media/stock/,/home /home
    mhddfs: directory ‘/media/libre_101Go/’ added to list
    mhddfs: directory ‘/media/stock/’ added to list
    mhddfs: directory ‘/home’ added to list
    mhddfs: mount to: /home
    mhddfs: move size limit 4294967296 bytes
    fuse: mountpoint is not empty
    fuse: if you are sure this is safe, use the ‘nonempty’ mount option

    1. est-ce possible
    2. n’étant pas expert, puis-je poursuivre en mettant l’option indiquée ?

  4. cep Says:
    16 février 2010 at 17:09

    >>~ $ mhddfs /media/libre_101Go/,/media/stock/,/home /home <<

    il y a une incohérence dans la commande. /home ne peut être mis en pool et en même temps servir de point de montage. La commande est même très dangereuse pour les données.
    Le montage doit se faire dans un point de montage dédié et vide, par exemple dans /mnt/pool après l’avoir créé.

  5. birdwing Says:
    17 février 2010 at 15:59

    comment puis-je alors faire pour l’associer à mon /home
    le but étant d’utiliser mon /home comme d’hab et que la répartition des sauvegarde se fasse par ce système ?!
    ou autrement comment puis-je dire que mon/home est désormais /pool ?
    ainsi je pourrai utiliser ‘Documents’/'Images’/'Musiques’/etc… “normalement”.

Comments

*
Pour prouver que vous n'êtes pas un bot, recopiez le code ci-dessous
Anti-Spam Image