Flyounet : (Digital|Real)? life

Une sorte de journal quotidien, mais en vachement plus espacé dans le temps

Note pour plus tard : Comment configurer AUFS sur mon NAS

Rédigé le . Édité le .

Mon NAS principal dispose de 3 volumes : Le premier est un RAID 6 de 8 disques, le second un RAID 5 de 5 disques, idem pour le troisième. Mon NAS secondaire est un RAID 5 de 5 disques. Passons sur le troisième NAS. Le NAS secondaire, de même que les 2 premiers volumes du NAS principal sont pleins (ou avec seulement quelques GiB de libres). J'ai longtemps mal travaillé avec des points de montages dans tous les sens. Maintenant, je sens que ça va mieux aller avec AUFS (Another Union File System).

Quel matériel ?

  • Le NAS principal est un vieux Synology 1813+ (avec DSM 6), avec deux baies d'extension 513+. Aussi gère-t-il Docker, et donc AUFS.
  • Le NAS secondaire (encore plus vieux) est un Lacie 5Big. Il gère ses disques et c'est déjà pas mal...
  • Le NAS qui reste est un D-Link DNS-320 et depuis toutes ces années (au moins 8 ans) il fonctionne encore.

De où tu viens ?

Jusqu'à il y a peu, j'avais deux points de montages par NAS vers chacun de mes portables.
Vous l'aurez donc compris, vu votre niveau de math, que chacun des mes portables doit se farcir 6 montages (samba/NFS). Sans oublier, que je dois me souvenir dans quel répertoire partage1/a ou partage2/a je stocke mes données.

Où va-t-on ?

1 point de montage par portables vers le NAS principal. Et la fusion de mes répertoires (voir exemple).

Magie ?

Non. AUFS !

Comment faire ?

Le NAS principal va monter les filesystems des autres NAS, puis au moyen d'AUFS tout agréger pour ne proposer plus qu'un seul point de montage.
Admettons que j'ai trois filesystems à partager /volume1/test_partage1, /volume2/test_partage2, /volume3/test_partage3 et que je veux qu'ils soient disponibles sous un seul répertoire /volume1/test_partages/, voici le genre de ligne de commande qu'il serait nécessaire de taper :

mount -t aufs \
      -o br=/volume1/test_partage1=rw:/volume2/test_partage2=rw:/volume3/test_partage3=rw \
      -o create=mfs \
      -o udba=reval \
      -o sum \
      -o dio \
      -o dirperm1 \
      none \
      /volume1/test_partages/

Pour la petite explication :

  • br= indique la branche, et chaque branche est séparée par : (deux points). Une branche ne peut contenir le symbole = dans son nom.
  • =rw indique que la branche est en lecture/écriture. Cela signifie que si je modifie un fichier dans l'arborescence partagée, et que la branche (dans laquelle se trouve le fichier) est en rw alors il sera modifié.
  • create=mfs indique que si je créé un fichier dans l'arborescence partagée /volume1/test_partages/, alors le fichier sera créé dans la branche disposant du plus d'espace libre. Sans cela, le fichier serait créé dans la première branche en rw (dans l'example : /volume1/test_partage1).
  • udba=reval indique que si je créé/supprime/modifie un fichier dans une branche (directement), la branche partagée devrait pouvoir vous donner l'info du changement.
  • sum indique qu'un df sur la branche partagée se fera sur la somme de toutes les branches (et pas seulement de la première).

    Avec l'option sum :

    # df -h /volume1/test_partages/
    Filesystem      Size  Used Avail Use% Mounted on
    none             35T   28T  7.2T  80% /volume1/test_partages
    

    Sans l'option sum:

    # df -h /volume1/test_partages/
    Filesystem      Size  Used Avail Use% Mounted on
    none             17T   17T   37G 100% /volume1/test_partages
    
  • dio indique qu'on utilise un accès direct aux I/O.
  • dirperm1 indique qu'un changement de droits et/ou utilisateur n'impacte pas que la première branche.

Ça donnerait quoi alors ?

Ainsi admettons que nous ayons les fichiers suivants :

/volume1/test_partage1/a/test1
/volume1/test_partage1/b/test2
/volume1/test_partage1/c/test3

/volume2/test_partage2/a/test4
/volume2/test_partage2/c/test5

/volume3/test_partage3/b/test6

Voici ce que nous obtiendrons dans la branche partagée :

/volume1/test_partages/a/test1
/volume1/test_partages/a/test4
/volume1/test_partages/b/test2
/volume1/test_partages/b/test6
/volume1/test_partages/c/test3
/volume1/test_partages/c/test5

C'est cool, hein ?!

Autre chose ?

Bien sûr, il y a des subtilités sur la précédence des branches, des fichiers, sur les droits, l'écriture round robin or not, si vous mergez du NFS... La documentation vous fera le plus grand bien.