LVM2 migration

Migration d'un système Debian GNU/linux vers LVM2

Introduction

Ce document a été rédigé dans l'espoir qu'il soit utile mais SANS AUCUNES GARANTIES.
Le lecteur engage sa propre responsabilité et ne pourra en aucun cas se retourner vers l'auteur ou MayLUG en cas de problèmes.
Il est rappelé au lecteur qu'il est le seul responsable de son système, de ses données ou de celle de son employeur.
Il est conseillé de faire des sauvegardes et de s'assurer qu'elles fonctionnent avant d'entreprendre des modifications profondes de son système.
Par ailleurs, le lecteur serait bien avisé de lire les pages de manuel des commandes qu'il exécutera sur son système pour être sûre de ce qu'elles impliquent.

Je vais décrire ici les opérations effectuées sur ma station pour migrer un système Debian GNU/Linux AMD64 vers LVM2. Cette page n'a pas pour but d'être généraliste, ni applicable à tous les cas de figure.

Le système actuel est réparti sur 2 disques dur ide :

  • le premier avec une partition primaire contenant / et un lecteur logique pour la swap
  • le second avec une unique partition primaire pour le /home.

Suite à l'ajout d'un disque sata2, l'idée est de “déplacer” le système vers celui-ci pour bénéficier des performances du sata2 et des possibilités offertes par LVM2, tout en s'évitant une ré-installation.

Pré-requis

  • un système Debian GNU/linux version 6 ou supérieure
  • grub-pc
  • n+1 disques dur
  • une sauvegarde de ses données dont on est certains qu'elle fonctionne
  • musique, café, m&m's

En bref

  1. mise en place de LVM2
  2. copier le système et les données
  3. modifier grub-pc
  4. mise à disposition des anciens disques

and voila ;)

Mise en place de LVM2

Le nouveau disque (/dev/sdc) en place, on lance GParted puis on initialise le MBR avant de découper le disque en deux partitions primaires :

  • /dev/sdc1, d'environ 500MB, formatée en ext2 qui accueillera le futur /boot.
  • /dev/sdc2, du reste du disque, non formatée, qui constituera notre base LVM2.

Après installation du paquet LVM2 :

  • on déclare la partition /dev/sdc2 comme volume physique avec pvcreate(8).
  • on créé un groupe de volumes avec vgcreate(8), deby_ng par exemple, puis on l'active avec vgchange(8).

Pour le détail des LV tout est possible ;)

J'ai choisis de garder un partitionnement simple, / swap et /home, je me retrouve donc avec :

  • /dev/deby_vg/root_lv d'environ 7GB.
  • /dev/deby_vg/swap_lv d'environ 2GB.
  • /dev/deby_vg/home_lv reste de l'espace disponible.

Les volumes root_lv et home_lv sont formatés en ext4.

Le reste des hostilités se déroule après un reboot liveCD.

Copie des données

Installation du paquet LVM2, détection et activation du VG puis montage des partitions dans des emplacements temporaires.

Pour info:

  • ancien /(/dev/sda1) monté sur /var/lvm/oldroot
  • ancien /home(/dev/sdb1) monté sur /var/lvm/oldhome
  • nouveau /(/dev/deby_vg/root_lv) monté sur /var/lvm/newroot
  • nouveau /boot(/dev/sdc1) monté sur /var/lvm/newroot/boot
  • nouveau /home(/dev/deby_vg/home_lv) monté sur /var/lvm/newhome

On copie les données des anciens répertoires vers les nouveaux:

  • cp -aR /var/lvm/oldroot/* /var/lvm/newroot

Il ne faut pas oublier de modifier /var/lvm/newroot/etc/fstab avec les nouveaux points de montage à moins d'aimer les surprises.

Exemple de modifications opérées:

- //uuid_de_/dev/sda1//  / ext4 errors=remount-ro 0
- //uuid_de_/dev/sdb1//  /home ext4 defaults 0 2
- //uuid_de_/dev/sda2//  swap
+ //uuid_de_/dev/sdc1//  /boot ext2 defaults
+ //uuid_de_/dev/deby_vg/root_lv//  / ext4 errors=remount-ro 0
+ //uuid_de_/dev/deby_vg/home_lv//  /home ext4 defaults 0 2
+ //uuid_de_/dev/deby_vg/swap_lv//  swap sw 0 0

On peut utiliser ls -l /dev/disk/by-uuid/ pour trouver l'UUID de partitions et de volumes logiques.

Grub-pc

  • J'ai du installer le paquet schroot (cela dépend de votre système live)

Les commandes suivantes mettent en place le chroot sur l'ancien système:

sudo mount -o bind /sys /var/lvm/newroot/sys
sudo mount -o bind /proc /var/lvm/newroot/proc
sudo mount -o bind /dev /var/lvm/newroot/dev
sudo chroot /var/lvm/newroot/

Une fois dans le chroot de “l'ancien-futur-nouveau système”, il suffit de mettre à jour grub-pc:

sudo grub-install /dev/sda

Je mets à jour Grub sur /dev/sda car j'ai choisi de ne pas modifier l'ordre de boot dans le BIOS de ma machine.

Un reboot plus tard nous voici avec un système migré sous LVM2, il reste à traiter la question des anciens disques dur.

Les anciens disques

Aillant gardé les anciens disques, je les intègre à mon “nouveau” système.

  • ré-écriture de la table des partitions, et création d'une partition primaire par disque avec GParted.
  • déclaration des partitions comme PV avec pvcreate(8).
  • extension du VG avec les nouveaux PV avec vgextend(8).
  • création d'un LV de la taille de l'espace offert par ces deux PV avec lvcreate(8).
  • création d'un système de fichier ext4 sur le nouveau LV avec mkfs.ext4.
  • modification du /etc/fstab et montage du nouveau volume sur /var/local/data.

Liens