Org Blog de Sys4
06-06-2021

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 !

  1. 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
    
  2. 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 commande vgsplit 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.

Tags: minetest ssd lvm
Creative Commons License
https://sys4.fr by Sys4 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.