Migration avec LVM de mon serveur Minetest « NALC » vers un disque SSD
Je viens de rajouter un disque SSD en SATA 3 dans mon PC qui héberge le serveur Minetest « Notre Ami Le Cube » ou NALC pour les intîmes. Cette machine héberge également la machine virtuelle qui contient tous mes services internet auto-hebergés du domaine sys4.fr.
Le but était d'améliorer les performances du serveur en y déplaçant toutes ses partitions système et home sur ce SSD d'une capacité de 480Go.
Cette migration me semblait indispensable car la cohabitation du serveur NALC avec la VM sys4.fr sur des disques mécanique n'était pas idéale. Les accès disque générés par la VM ou même simplement de faire quelques opérations de maintenance faisaient lagguer le serveur de jeux Minetest au point que ça en devenait insupportable. Et à côté de ça le processeur se roulait joyeusement les pouces !
Et bien cette migration c'est super bien déroulée et beaucoup plus facilement et rapidement que ce que j'avais imaginé au départ. Tout cela grâce à la gestion de mes disques au travers de la couche LVM. Et en prime j'ai quasiment éliminé tous les lags en jeux. Il en reste tout de même encore quelques uns que j'éxaminerai plus tard en détail mais en attendant le serveur a bien retrouvé une seconde jeunesse !
Du coup cela m'a donné envie de vous relâter cette expérience.
Composition matérielle du serveur
Tout d'abord voici les caractéristiques principales de cette machine qui il est vrai commence un peu à dater mais qui je l'espère, a encore de beaux jours devant elle :
- Processeur AMD FX (8370) 8 cœurs/threads cadencés à 4Ghz et boost à 4.3Ghz.
- 8Go de mémoire DDR 3 en dual channel.
- 2×4To de disques durs Seagate sur interface SATA3.
- Système d'exploitation : Gentoo Linux
Je ne m'étendrai pas sur le reste des composants de cette machine car cela n'aurait aucun interêt.
Schéma de partitions
Nous voici donc au cœur du sujet où tout va se jouer.
Avant l'ajout du disque SSD, toutes les données étaient contenues sur un disque dur de 4To contenant six partitions. Ces partitions étaient dupliquées sur un second disque identique dont quatres d'entre elles formaient des grappes en RAID 1 :
Disque 1 | Disque 2 | Utilisation |
---|---|---|
/dev/sda1 | /dev/sdb1 | Partitions EFI |
/dev/sda2 | /dev/sdb2 | swap |
/dev/sda3 | /dev/sdb3 | raid1 en /dev/md127 |
/dev/sda4 | /dev/sdb4 | raid1 en /dev/md126 |
/dev/sda5 | /dev/sdb5 | raid1 en /dev/md124 |
/dev/sda6 | /dev/sdb6 | raid1 en /dev/md125 |
Je vous avais parlé de LVM au début de cet article. Voici donc la représentation de la couche LVM qui utilisait les grappes raid comme volumes physiques :
Volumes Physiques (PV) | Groupes de Volumes (VG) | Volumes Logiques (LV) |
---|---|---|
/dev/md124 | vg-backup | backup, holding |
/dev/md125 | vg-partage | partage |
/dev/md126 | vg-home | home |
/dev/md127 | vg-system | root, boot, opt, tmp, var, vartmp, usr, portage, distfiles |
Je souhaite aboutir au schéma suivant avec l'ajout du disque SSD :
Volumes Physiques (PV) | Groupes de Volumes (VG) | Volumes Logiques (LV) |
---|---|---|
/dev/md124 | vg-backup | backup, holding |
/dev/md125 | vg-partage | partage |
/dev/sde3 | vg-system | root, boot, opt, tmp, var, vartmp, usr, portage, distfiles, home |
Je vais donc devoir déplacer entièrement le groupe de volumes « vg-system » vers /dev/sde3 puis déplacer le volume logique « home » vers « vg-system » et enfin supprimer « vg-home ».
Le disque SSD aura le schéma de partitionnement suivant :
Partitions | Usage |
---|---|
/dev/sde1 | EFI |
/dev/sde2 | swap |
/dev/sde3 | LVM (contiendra le VG vg-system) |
Comme vous pouvez le deviner, ce disque deviendra également le disque de démarrage du système. C'est pour cela que j'y ai inclut la partition EFI. En option j'ai également rajouté une partition de swap juste par acquis de conscience car il est peu probable qu'elle soit utilisée (oui j'utilise zram aussi… Bref c'est un autre sujet).
Ajout du disque SSD
Me voilà parti pour mettre les mains dans le camboui.
Je ne l'ai pas essayé mais je pense qu'il aurait été tout à fait possible de brancher le disque SSD à chaud et qu'il soit détecté par le système sans devoir redémarrer. Je n'ai pas choisis cette option car le branchement du disque dans ma tour était assez périlleux et risqué à faire sous tension.
Le disque est maintenant branché et reconnu par le système. Un petit coup de fdisk
et j'obtiens le schéma de partitions déjà montré juste au-dessus :
Partitions | Type |
---|---|
/dev/sde1 | EFI |
/dev/sde2 | swap |
/dev/sde3 | LVM |
Maintenant j'indique à LVM que la partition /dev/sde3 est un volume physique :
pvcreate /dev/sde3
Déplacer les données
Le moment fatidique approche et je dois avouer que je ne suis pas serein à ce moment là mais je me rassure en lisant le man des commandes LVM et quelques docs sur le web.
La première chose à faire est de sauvegarder ce qui est important. De ce côté là je suis plutôt tranquille car mes sauvegardes sont automatisées.
Ça y est je me sens prêt à démarrer, c'est parti mon kiki !
Déplacer les volumes logiques contenues dans vg-system de /dev/md127 vers /dev/sde3 :
Pour réaliser cette opération il faut d'abord étendre le groupe de volumes vg-system sur le volume physique /dev/sde3 avec la commande suivante :vgextend vg-system /dev/sde3
Le groupe de volumes vg-system repose ainsi sur deux volumes physiques que sont /dev/md127 et /dev/sde3.
Ensuite je peux déplacer tous les volumes logiques pour qu'ils occupent physiquement le volume /dev/sde3. La commande suivante permet de le faire :pvmove /dev/md127 /dev/sde3
Cela prend quelques minutes et un compteur de progression m'indique l'avancement de l'opération.
Ce que je trouve génial avec ça, c'est que le système est toujours utilisable pendant ce temps là ! Je peux me faire une petite partie de Minetest pour patienter ;-)
Cinq minutes plus tard, l'opération a réussie et je sens déjà une meilleure réactivité du système \O/ !
Il ne me reste plus qu'a détacher du groupe le volume physique /dev/md127 devenu inutile :vgreduce -a vg-system
Déplacer le volume logique home vers le groupe de volumes vg-system :
L'opération va être différente car le déplacement ne se fait pas au sein du même groupe de volumes mais entre deux groupes distincts. En vrai l'opération consiste à déplacer le volume physique contenant le volume logique home vers le groupe de volume vg-system. La commandevgsplit
sera notre amie :vgsplit -n home vg-home vg-system
Mais ça ne marche pas car j'obtiens le message suivant à l'exécution de la commande :
Logical volumes in "vg-home" must be inactive
.
Pas de problèmes ! Pour désactiver le volume logique je dois stopper le serveur NALC et la VM sys4.fr qui résident dans la partition /home, démonter tous les points de montage situés sous /home puis la partition /home elle-même, désactiver le volume logique home, relancer la commande vgsplit, réactiver le volume logique home, remonter la partition /home et enfin relancer le serveur NALC et la VM sys4.fr. Voici les commandes correspondantes :# Arrêt du serveur NALC su -c "/home/minetest/nalc-stable/shutdown.sh" - minetest # Arrêt de la VM sys4.fr virsh shutdown yunohost # Démonter /home et tout ce qui se trouve dessous umount /home/partage umount /home/amanda/backup umount /home/ananda/holding umount /home # Désactiver les volumes logiques de vg-home vgchange -an vg-home # Commande vgsplit vgsplit -n home vg-home vg-system # Activer les volumes inactifs de vg-system (home est maintenant dans vg-system) vgchange -ay vg-system # Remonter /home mount /home mount /home/partage mount /home/amanda/backup mount /home/ananda/holding # Relancer la VM sys4.fr virsh start yunohost # Relancer le serveur NALC su -c "/home/minetest/nalc-stable/shutdown.sh -r" - minetest
Cette opération a rendu innaccessibles le serveur NALC et le domaine sys4.fr pour à peine 5 minutes ! Le plus long a été d'écrire les commandes sur la console du serveur :-))
Pour autant l'opération n'est pas tout à fait terminée car les données du volume logique home se trouvent encore dans leur volume physique d'origine /dev/md126 et je souhaite les déplacer vers le volume physique /dev/sde3 du SSD :# pvs PV VG Fmt Attr PSize PFree /dev/md124 vg-backup lvm2 a-- <1,50t 1,21t /dev/md125 vg-partage lvm2 a-- 1,86t 0 /dev/md126 vg-system lvm2 a-- 199,87g 89,87g /dev/md127 lvm2 --- <79,94g <79,94g /dev/sde3 vg-system lvm2 a-- <442,88g <385,48g
Facile ! Il s'agit d'adapter la même commande qui m'a servie dans l'étape 1 :
pvmove /dev/md126 /dev/sde3
Vingt minutes plus tard l'opération se termine sans accrocs. Soulagement !
Ne reste plus qu'à détacher le volume physique devenu inutile :# vgreduce -a vg-system Physical volume "/dev/sde3" still in use Removed "/dev/md126" from volume group "vg-system" # pvs PV VG Fmt Attr PSize PFree /dev/md124 vg-backup lvm2 a-- <1,50t 1,21t /dev/md125 vg-partage lvm2 a-- 1,86t 0 /dev/md126 lvm2 --- <199,88g <199,88g /dev/md127 lvm2 --- <79,94g <79,94g /dev/sde3 vg-system lvm2 a-- <442,88g <275,48g
À noter que le groupe de volume vg-home n'existe plus depuis la commande
vgsplit
car plus aucun volume physique n'y était rattaché.
La migration vers le SSD est terminé et ce fut un succès total. J'aime LVM :-)
Étapes résiduelles
Je n'évoquerai ici que les grandes lignes des dernières étapes à réaliser sans entrer dans le détail car ce n'est pas le cœur de cet article.
Comme dit plus haut ce disque SSD sera le disque de démarrage du système. Pour cela je dois formater la partition EFI en vfat et la peupler avec le gestionnaire de démarrage grub. Je dois également modifier le fichier /etc/fstab pour le montage de cette partition au démarrage. J'en profite pour ajouter la partition swap du SSD.
Enfin, ne pas oublier de placer le disque SSD comme premier périphérique de démarrage depuis le BIOS de la carte mère.
En option il me reste à configurer le système pour optimiser l'utilisation du SSD et augmenter la taille de mes partitions de sauvegarde et de partage de données qui occuperont l'espace libéré sur les disques durs. Ce sera peut-être le sujet d'un prochain article.