Quickly done NAS with Webmin (DIY NAS)

Looking for a better NAS than the one my girlfriend own (Synology). Caveat : she don’t care about it, she understand nothing on it, I hate those slow graphical « web desktop » interfaces, I need a lot of free Ram, I want to install everything I need, I bet free/libre NAS are better.

There is three active NAS projects. They can be use on personal and small networks (but not limited to). Have a look : FreeNAS (FreeBSD), NAS4Free (derived from FreeNAS 7), and OpenMediaVault (Debian, from former FreeNAS leader). OpenFiler is for bigger needs and seems unmaintained.

FreedomBox or Yunohost (and others, look at Wikipedia) target end users. They are easy to set up and maintained. While they are not NAS project, they can, in some parts, do the job at home.

SME Server (Centos, also known as e-smith) and  Superb Mini Server (Slackware) provides something like ADSL boxes on steroids, coming with webmail and email server, virus protection, printer server, etc.

But what did I choose ? I find easier to install Debian with the Webmin control panel. I don’t really need Webmin, but as I tends to do a lot of daily work from the web browser, I keep it open in a tab. It let me do what I want, help to not forget something to configure, has a lot of modules, can report (by email) about problems and new packages, can burn CD/DVD, etc. All in all, it takes only a few minutes to install a Debian server and the webmin package — Debian is not mandatory, you can use your favorite distribution.

Installer Linux en copiant

On n’a pas toujours une distribution sous la main pour réinstaller Linux (ou tout autre Unix, comme la famille BSD) sur un nouveau disque dur. Or c’est très facile d’installer le système en se contentant de copier les fichiers d’une autre installation.

Branchons le nouveau disque et démarrons sur l’ancien!

Pour faire simple ici, je partitionne le nouveau disque en deux : une partition de swap et tout dans le même système de fichier. Je place la partition de swap à la fin du disque et j’active la partition du système de fichier (on la rend bootable).

Copier les fichiers

  • Créer le système de fichier et le swap sans oublier de vérifier l’état du disque (noter les UUID ou les obtenir plus tard avec lsblk -f ou blkid). Monter le système de fichiers dans /mnt.
  • Tout copier, sauf /proc /sys /dev /run et /mnt, avec ~# cp -a source /mnt/ ou bien ~# cp -a -t /mnt/ source qui est plus pratique.
  • Créer /proc /sys /dev /run et /mnt (vides)
  • Voir la doc Linux From Scratch pour le remplissage de /dev :
~# mknod -m 600 /mnt/dev/console c 5 1
~# mknod -m 666 /mnt/dev/null c 1 3
~# mount -v --bind /dev /mnt/dev
  • Refaire /mnt/etc/fstab avec les UUID, il vaut mieux éviter les /dev parce que l’ordre des périphérique pourrait changer quand on enlèvera l’ancien disque.

Installer le chargeur de démarrage (bootloader)

J’installe GRUB, la procédure est identique avec les autres. Il faut le faire depuis le nouveau système de fichier, en changeant la racine pour /mnt (chroot).

  • Monter les systèmes de fichiers virtuels :
~# mount -vt devpts devpts /mnt/dev/pts -o gid=5,mode=620
~# mount -vt proc proc /mnt/proc
~# mount -vt sysfs sysfs /mnt/sys
~# mount -vt tmpfs tmpfs /mnt/run
  • Changer la racine ~# chroot /mnt ; la racine / devient /mnt, toutes les opérations suivantes se font dans le chroot (/etc est en fait /mnt/etc, c’est transparent).
  • Modifier /etc/initramfs-tools/conf.d/resume (partition de swap pour l’hibernation) et refaire l’initramfs ~# mkinitramfs.
  • Modifier /boot/grub/grub.cfg ou utiliser grub-mkconfig (avec l’option -o et le nom du fichier de sortie, sinon ça n’en créera pas). Comme on a plusieurs disques, il vaut mieux utiliser des UUIDs plutôt que des noms de périphériques qui pourraient changer (de toute façon, GRUB ne nomme pas les périphériques comme sous Linux).
  • Installer GRUB ~# grub-install /dev/[nouveau disque]
  • Sortir du chroot, éteindre et redémarrer sur le nouveau disque.

Ou bien installer Grub une fois le système démarré

Pas facile d’avoir en tête le montage des systèmes de fichiers virtuels! On peut faire autrement, installer Grub sans chroot : il faut ajouter une entrée dans le fichier grub.cfg du disque source afin de pouvoir démarrer sur le nouveau disque (en gros, recopier l’entrée de l’ancien en changeant l’UUID). Redémarrer. Une fois démarré sur le nouveau disque, on lance ~# grub-mkconfig -o /boot/grub/grub.cfg puis ~# grub-install /dev/[nouveau disque], sans oublier de refaire l’initramfs.

 

Quelques usages du swap et leurs besoins

Le swap est lent par définition : c’est un espace de stockage utilisé comme de la mémoire, or le stockage est beaucoup beaucoup plus lent que la mémoire Ram. On peut quand même augmenter la vitesse du swap en faisant attention à son emplacement, sa fragmentation, sa répartition sur plusieurs disques, etc. Compliqué ? C’est pire que ça : en 2017 les ordinateurs sont équipés d’une quantité de Ram et d’espace disque qui suffisent largement aux besoins des programmes. Certains ne s’embarrassent donc plus du swap. Alors que faire ? et si on veut du swap, comment l’optimiser ?

Les prescriptions sur le swap sont anciennes. Il y a quelques années les disques durs étaient petits et lents, la mémoire se comptait en mégas, l’ordinateur mettait du temps à démarrer, les batteries des portables ne tenaient pas la route, … La situation a changé, voici donc un tableau résumant quelques usages du swap : hibernation, bouée de secours, déplacement en swap d’un programme inutilisé, besoin de libération de la mémoire Ram.

 Usage Pourquoi Pour qui Besoin
hibernation éteindre sans fermer les programmes ordi perso taille
bouée de secours ne pas planter serveur taille
programme inutilisé occupation mémoire inutile serveur
 libérer de la Ram mémoire insuffisante ordi perso vitesse

L’hibernation est un cas particulier : on enregistre l’état du système sur le disque avant l’extinction, ce qui permet au démarrage de restaurer programmes, fenêtres et documents comme si on n’avait pas éteint. Grosso-modo le processus d’hibernation transfère le contenu de la mémoire dans le swap. Il faut un swap au moins égal à la taille de la mémoire.
Dans le second cas, on veut éviter de bloquer le système si des processus consomment toute la Ram. Comme bouée de secours, la taille du swap importe plus que sa vitesse. Or les disques durs actuels ne nous limitent pas en espace. On peut donc choisir un swap égal à deux fois la taille de la Ram — ou plus ? ça dépend de ce qu’on fait tourner…
Le système peut déplacer en swap l’espace occuppé en mémoire par un programme ouvert mais qui n’est pas utilisé. Ça demande peu d’espace. L’évènement inverse étant occasionnel (réutilisation du programme), la vitesse n’est pas primordiale.
Enfin libérer de la Ram parce qu’un programme en a besoin est un usage qui diminue, mais se rencontre encore et se rencontrera probablement encore. Le système ralentit temporairement pendant que la Ram est déplacée en swap. La vitesse du swap est essentielle pour éviter les crispations devant l’écran.

Soyons clair, la vitesse du swap importe toujours et les usages énumérés se retrouvent sur toute sorte de bécane. Mais comme tout dépend de ce qu’on fait avec, on n’a pas toujours besoin de se compliquer la vie :

  • le swap sert peu sur un serveur, on peut réserver la rapidité aux données ;
  • les disques durs sont très très gros, on évite de se poser trop de question : plus de swap ne fait pas de mal, deux fois la Ram ça roule.

Recettes pour augmenter la vitesse du swap

  • Le placer entre les programmes et les données. C’est un bon compromis : la tête de lecture passera constament au-dessus. Mais attention, les données concernées ne sont pas toujours dans les dossiers personnels! en plus des images ouvertes dans Gimp et du cache du navigateur web, on peut penser aux fichiers journaux (logs), aux bases de données, aux dossiers temporaires, …
  • Le répartir sur plusieurs disques. Linux optimisera la gestion du swap (sans Linux on utilisera du Raid ou un gestionnaire de volumes logiques).

J’ai aussi lu cette idée : le placer à la périphérie du disque, au début donc, puisque la tête de lecture peut y aller très vite. Ça suppose que la tête de lecture est plus souvent parquée au bord du disque, c’est vrai. Mais quand on a besoin du swap, la tête est généralement déjà en train de faire le yoyo entre les programmes et les données ! Ne commettez pas non plus l’erreur de penser que ça écrit plus vite au bord du disque parce que « ça tourne » plus vite. N’oubliez pas que la densité d’écriture est plus faible, un secteur occuppe plus de place mais ne contient pas plus de données.