Dernière mise à jour : 23/01/2010 redimensionner la partition swap

Bien souvent pour mettre ses données à l'abri, on grave de temps en temps des CD ou des DVD des données importantes (photos, vidéos, documents, etc.). Éventuellement, les plus consciencieux ou les plus inquiets feront aussi une image complète de leur système sur CD/DVD avec des outils spécifiques comme Clonezilla ou SystemRescueCd. Cependant d'une part la durée de vie de ces supports n'est pas aussi longue qu'on le pense (de l'ordre de 5 ans officiellement), et d'autre part nos fichiers ne cessant d'augmenter de taille, faire des sauvegardes sur CD/DVD est de plus en plus contraignant. Aussi une autre possibilité consiste à utiliser un disque dur supplémentaire, soit à l'intérieur de la machine, soit à l'extérieur.

Ici nous allons nous intéresser au RAID miroir qui permet d'avoir deux disques a priori identiques dans la machine contenant exactement la même chose à tout moment. En cas de défaillance de l'un des deux, il sera possible de le remplacer tranquillement tout en continuant à utiliser la machine comme si de rien n'était. Après son remplacement, la recopie des données se fera elle aussi automatiquement par un processus de synchronisation. Par ailleurs nous combineront le RAID à LVM afin de nous affranchir des problèmes d'espace disque et de pouvoir effectuer des snapshots du système ou des données pour les sauvegarder dans un état figé[1]. Signalons pour finir qu'il est aussi possible de sortir un des disques miroir pour le mettre à l'abri et de le ré-insérer dans la machine de temps en temps afin de le remettre à jour. Et pourquoi pas ne pas utiliser 3 disques durs tournant régulièrement et dont un est toujours à l'extérieur ? Bref les possibilités sont nombreuses…

RAID, LVM, petites explications

Il existe différentes variantes du système RAID qu'on retrouve décrites dans l'article correspondant de Wikipedia. Le nom technique du RAID miroir qui nous intéresse est RAID 1. Si le RAID 1 est le système de duplication RAID qui consomme le plus d'espace disque à volume de données égal, c'est aussi celui qui permet de fonctionner avec le moins de disques durs : deux au minimum. Il est donc logique, à la maison, de privilégier cette solution. Ce ne serait pas le cas en entreprise où il y aurait vraisemblablement des volumes importants de données à stocker sur des disques très rapides et donc chers.

Il faut savoir aussi qu'il y a différentes façon de réaliser un même RAID, suivant que c'est le matériel ou que c'est le logiciel qui délivre la fonctionnalité RAID. Bien que le RAID matériel soit en théorie un peu plus performant que le RAID logiciel, nous avons choisi pour la mise en œuvre d'utiliser le RAID logiciel fourni par Linux depuis de nombreuses années déjà. La raison principale tient au fait que le RAID logiciel est indépendant de la machine alors que le RAID matériel aura tendance à en dépendre. Ainsi vous n'êtes pas certains avec le RAID matériel de pouvoir installer vos disques dans une nouvelle machine, alors qu'il n'y a aucun problème sur ce point avec le RAID logiciel de Linux. À nouveau en entreprise on ne ferait certainement pas le même choix.

Concernant LVM, il s'agit d'un système de gestion par volumes logiques. Ceci est sensé signifier qu'au lieu d'utiliser les partitions physiquement définies sur votre disque dur, le système va utiliser des partitions virtuelles s'appuyant sur les partitions physiques. Un des gros avantages est que vous pouvez facilement augmenter la taille d'une partition LVM, sans outil lourd de repartitionnement type GParted Live, et même à chaud pour certains systèmes de fichiers[2]. L'ajout de nouveaux disques durs permet aussi d'agrandir des partitions LVM de façon transparente et leur agencement étant virtuel, on n'est plus gêné par la partition d'à côté lors de l'agrandissement. Bref, fini les limites des disques durs !

Toutefois il existe actuellement une limite liée au programme de démarrage du système Grub. Sous Debian Lenny, celui-ci ne sait pas encore démarrer Linux si son répertoire /boot est géré par LVM. Il faut donc soit mettre /boot sur une partition standard séparée, soit utiliser Grub2 via la version développement de Debian, la version Squeeze, voire via les backports Debian.

Remarque : d'après certaines informations, les snapshot LVM ne seraient pas persistants dans le sens où, après un redémarrage de la machine, la photographie faite ne serait plus valable. Cependant les différents essais effectués montrent que non seulement ils sont toujours là, mais en plus ils contiennent toujours les données photographiées. Informations périmées ?

RAID 1 + LVM sous Debian Lenny

Nous supposons que vous avez dans votre machine deux nouveaux disques durs identiques prêts à être utilisés en RAID + LVM. Sachez qu'il est possible de migrer un système standard en RAID + LVM en n'achetant qu'un seul disque complémentaire à celui déjà en place. L'opération consiste alors à passer le nouveau disque en RAID 1 mais sans le miroir, copier dedans les données de l'ancien disque, puis passer l'ancien dans le RAID, ce qui remplace tout son contenu. Cependant en cas d'erreur vous perdez toutes vos données, il vous faut donc les sauvegarder avant : autant acheter un deuxième disque tout de suite !

Les instructions pour installer RAID et LVM lors du processus classique d'installation de Debian Lenny avec le CD ou le DVD sont décrites sur la page Installation du root sur LVM + RAID avec debian-installer. Celle-ci explique étape par étape les choix que vous devez faire lors du processus standard d'installation de Linux et les entrées de menu à choisir en conséquence. L'ordre des actions est le suivant au moment de définir les partitions sur lesquelles installer Linux :

  1. créer la partition /boot en format ext2 ou ext3, 100 Mo devraient largement suffire
  2. créer des partitions physiques pour activer le RAID dessus
  3. mettre en place le RAID
  4. mettre en place LVM sur les partitions RAID
  5. créer les partitions LVM
  6. associer les partitions LVM au système de fichiers

Remarques :

  • la synchronisation d'un disque RAID peut prendre beaucoup de temps, il peut donc être judicieux de distribuer le RAID sur plusieurs partitions dans l'hypothèse où une seule serait à reconstruire (suite à une erreur disque)
  • il n'est pas nécessaire que les partitions LVM occupent tout l'espace RAID puisque vous pouvez étendre n'importe quelle partition LVM à tout moment, notamment si vous prévoyez d'utiliser les snapshots
  • du coup LVM prend tout son sens si vous distribuez votre système de fichiers sur plusieurs partitions, séparez au moins la racine / de vos données personnelles /home[3], je recommande de séparer aussi le répertoire d'installation des logiciels /usr, le plus susceptible d'augmenter après /home à la maison
  • vous pouvez aussi utiliser le LVM chiffré si vous souhaitez éviter que quelqu'un puisse récupérer les données de votre ordinateur portable (non testé dans cet article), une phrase de passe vous sera alors demandée à chaque démarrage de la machine

À l'issue de cette installation, le programme de démarrage du système, Grub, aura été configuré pour démarrer le système du premier disque mais pas celui du second. Il n'aura pas non plus été installé sur le second de sorte qu'en cas de défaillance du premier disque, vous ne pouvez plus démarrer la machine ! Pour pallier à ces problèmes, il faut éditer le fichier /boot/grub/menu.lst puis installer Grub sur le second disque.

Tout d'abord dans le fichier /boot/grub/menu.lst on va recopier les deux blocs qui concernent le système du premier disque en changeant les références au disque hd(0,0) en hd(1,0) et les titres de menu afin de pouvoir démarrer le système du second. Par exemple ce bloc :

title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/system-root ro quiet
initrd          /boot/initrd.img-2.6.26-2-686

title           Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/system-root ro single
initrd          /boot/initrd.img-2.6.26-2-686

sera recopié en ce bloc-là :

### END DEBIAN AUTOMAGIC KERNELS LIST

title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd1,0)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/system-root ro quiet
initrd          /boot/initrd.img-2.6.26-2-686

title           Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root            (hd1,0)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/system-root ro single
initrd          /boot/initrd.img-2.6.26-2-686

Comme indiqué la version copiée doit être placée hors de la section Automagic Kernels List si vous ne voulez pas qu'elle soit écrasée par une mise à jour automatique de ce fichier. Ensuite pour pouvoir démarrer sur n'importe quel disque, il faut ajouter ou modifier au début du fichier /boot/grub/menu.lst les paramètres suivants :

default 0
fallback 2

Ceci indique à Grub d'utiliser par défaut la première entrée de menu puis la troisième en cas de problème. On suppose donc que les deux premières entrées démarrent en utilisant le premier disque, et les deux suivantes démarrent en utilisant le deuxième disque (ce sont donc celles qu'on vient de copier).

Pour finir il faut installer Grub aussi sur le deuxième disque car l'installeur de Debian Lenny ne l'installe que sur un disque. C'est plus compliqué qu'il n'y paraît comme indiqué dans la page Setting up GRUB to boot from both disks of mirrored RAID, d'autant plus qu'il faut le faire en ligne de commande Grub. Le problème est que quand on installe Grub sur le deuxième disque, il le compte forcément comme n°2 dans ses tables. Or en cas de défaillance du premier, le second deviendra le premier… Notez aussi qu'en cas de remplacement d'un disque, il faudra aussi ré-installer Grub dessus.

RAID 1 + LVM sous Debian Squeeze

La mise à jour du système de Lenny à Squeeze ne pose pas de problème même avec Grub2, enfin dans la mesure où le paquet grub2 n'a pas récemment été mis à jour avec une version moins testée que celle que j'ai ;-) (1.97+20091115-1). Cette nouvelle version apporte des améliorations non négligeables pour le sujet qui nous concerne :

  • grub2 propose spontanément de s'installer sur les deux disques RAID
  • grub2 supporte nativement à la fois RAID et LVM

Du coup installer grub2 est la seule chose à faire. Dans le cas d'une installation fraîche de Squeeze avec le CD, il ne sera par ailleurs plus nécessaire de garder une partition à part pour le répertoire /boot, le reste des opérations de partitionnement étant identique au cas de Lenny. Si vous mettez à jour une Lenny vers Squeeze, le système vous proposera de tester grub2 avant de l'adopter définitivement grâce à une entrée de menu supplémentaire au démarrage de la machine. Une fois le test passé, la mise à jour de grub se fait alors avec cette commande :

$ sudo upgrade-from-grub-legacy

Pour finir signalons qu'il vaut mieux pour le moment ne pas manipuler les snapshots ni renommer les volumes logiques dans la version Squeeze. Sur ma machine, ces opérations conduisent à un plantage de grub2 au démarrage. En cas de problème de ce genre, la solution consiste à éliminer tous les snapshots, en démarrant un autre système, par exemple le CD d'installation de Debian en mode récupération.

Les commandes d'administration à connaître

LVM et RAID s'administrent en ligne de commande. Nous allons donc voir rapidement quelles sont les commandes principales à connaître. On les retrouve mise en œuvre dans l'article Gestion des disques avancée : LVM et RAID Soft.

Lister les volumes LVM

Pour lister en format compact les partitions physiques sur lesquelles LVM s'appuie, la commande est :

$ sudo pvdisplay -C
 PV         VG     Fmt  Attr PSize  PFree 
 /dev/md0   system lvm2 a-   93,23g 53,05g
 /dev/md1   data   lvm2 a-   93,13g 29,51g

Ici les partitions physiques dans la colonne PV sont dénotées /dev/md… au lieu du traditionnel /dev/hd… ou /dev/sd… car il s'agit de partitions RAID. Leur nom LVM est indiqué dans la colonne VG (volume group) et les tailles sont indiquée en Go. Il est possible d'associer plusieurs partitions PV à un même groupe LVM VG, notamment quand on ajoute des disques. Pour lister en format compact les partitions virtuelles définies dans les volumes physiques, la commande est :

$ sudo lvdisplay -C
 LV              VG     Attr   LSize   Origin     Snap%  Move Log Copy%  Convert
 livecd          data   -wi-a-   5,00g                                          
 vm              data   -wi-ao  40,00g                                          
 home            data   owi-ao  37,25g                                          
 home-20091128   data   swi-a-   2,00g home       19,81                        
 boot            system owi-ao 200,00m                                          
 boot-snap       system swi-a- 200,00m boot       34,03                        
 root            system owi-ao   1,46g                                          
 root-snap       system swi-a-   2,00g root       46,58                        
 swap            system -wi-ao   1,86g                                          
 usr             system owi-ao   8,00g                                          
 usr-snap        system swi-a-   2,00g usr1       49,86

On voit qu'il y a ici 4 volumes snapshot (colonnes Origin et Snap% renseignées). Le nom de chaque volume LVM est dans la première colonne LV alors que le groupe de volume dans lequel il est se trouve dans la deuxième VG.

Ajouter des volumes logiques

Pour créer un volume logique, la commande est :

$ sudo lvcreate -n nom_du_volume -L 10G system

L'option -n indique le nom du volume logique (LV), -L la taille est ici exprimée en Go, et le dernier argument indique dans quel groupe de volume (VG) créer le volume logique. Le formatage du nouveau volume se fait avec la commande mkfs affublée du type de système de fichiers. Pour une partition ext3 on tapera donc :

$ mkfs.ext3 /dev/system/nom_du_volume

Attention à bien vérifier le chemin de la partition pour ne pas reformater vos données personnelles par exemple ! Vous noterez bien que le chemin de la partition utilise ici le nom du VG puis le nom du LV.

Agrandissement d'une partition LVM

Normalement l'opération peut se faire à chaud, sans démonter la partition, au moins pour les partitions ext3 et ext4. Dans le cas contraire, il faut d'abord démonter la partition avec umount puis la vérifier à l'aide de la commande fsck. Ensuite il faut commencer par agrandir la partition LVM :

$ sudo lvresize -L 3G /dev/system/nom_du_volume

On peut alors agrandir le système de fichiers :

$ sudo resize2fs /dev/system/nom_du_volume

Il est aussi possible de réduire la taille d'une partition mais ceci nécessite alors de démonter et vérifier la partition au préalable. Les opérations se font alors dans l'ordre inverse : réduction du système de fichiers puis de la partition LVM. Veuillez noter qu'il faut absolument que la taille LVM déclarée ne soit pas inférieure à celle du système de fichiers sans quoi il peut y avoir perte de données. Par mesure de sécurité, vous pouvez rétrécir un peu moins le volume LVM puis ré-agrandir le système de fichiers afin qu'il récupère la marge de sécurité que vous aviez mise.

Redimensionnement d'une partition swap

Le cas de la partition swap est un peu différent dans la mesure où celle-ci n'est pas montée avec la classique commande mount mais à l'aide des commandes swapon et swapoff (cf. Adding Swap Space). Exemple :

# swapoff /dev/lvm0/swap
# free | grep Swap
Swap:            0          0          0
# lvresize -L 1G /dev/lvm0/swap
  Extending logical volume swap to 1,00 GB
  Logical volume swap successfully resized
# mkswap /dev/lvm0/swap
# swapon /dev/lvm0/swap
# free | grep Swap
Swap:      1048568          0    1048568
Agrandissement d'un groupe de volume

Si vous avez de nouvelles partitions physiques disponibles pour agrandir l'espace alloué à vos partitions LVM, il faut d'abord préparer les partitions avec la commande suivante à adapter à votre situation :

$ pvcreate /dev/md2

Puis la commande pour intégrer une nouvelle partition à un VG est :

$ vgextend data /dev/md2

Ici nous étendons le VG nommé data avec la nouvelle partition RAID /dev/md2.

Faire un snapshot

La commande de création d'un snapshot est celle de création d'une partition LVM avec l'option -s ajoutée :

$ sudo lvcreate -L 1G -s -n home-snap /dev/data/home

Ici nous faisons un snapshot de la partition LVM home nommée home-snap. Ce snapshot tolérera des modifications du volume d'origine à hauteur de 1 Go. Au-delà, le snapshot ne sera plus valide et il faudra le remplacer. La suppression d'un volume LVM, en l'occurrence le snapshot, se fait de cette manière :

$ sudo lvremove /dev/data/home-snap

Il y a une demande de confirmation ! ;-)

Remplacement d'un disque RAID

En cas de défaillance d'un disque on rebranche le nouveau à la place mais il n'est évidemment pas pris en compte au démarrage. Par ailleurs si vous aviez créé plusieurs partitions physiques ou si votre nouveau disque est plus grand, il faudra d'abord recréer la(les) partition(s) équivalente(s) à l'ancien disque sur le nouveau disque. Le billet Copier la table des partitions d’un disque vers un autre disque nous indique qu'il y a une commande très simple pour le faire :

$ sudo sfdisk -d /dev/sda | sfdisk /dev/sdb

Vérifiez bien les noms de vos disques d'origine et de destination car une erreur serait vraiment fatale… Par mesure de sécurité, vous pouvez commencer par enregistrer la table des partitions du bon disque sur une clef USB par exemple. La restauration se ferait alors avec un CD de récupération de système. Afin d'être sûr de votre coup, vous pouvez aussi lister les partitions de vos disques au préalable avec la commande suivante :

$ sudo sfdisk -l

Une fois le disque prêt, il faut l'ajouter à la main dans le RAID, ce qui déclenchera la synchronisation. Pour un système avec deux partitions RAID, on aurait à taper :

$ sudo mdadm --add /dev/md0 /dev/sdb1
$ sudo mdadm --add /dev/md1 /dev/sdb2

On retrouve quel /dev/md… associer à quel /dev/sdb… avec la commande suivante :

$ sudo cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sda6[0] sdb6[1]
     97659008 blocks [2/2] [UU]
      
md0 : active raid1 sda5[0] sdb5[1]
     97755392 blocks [2/2] [UU]
      
unused devices: <none>

Elle donne la liste des partitions actives dans chaque RAID. C'est aussi cette commande qui permet de suivre la synchronisation du RAID lorsqu'une partition RAID a été perdue.

Notes

[1] les snapshots LVM garantissent la consistance des fichiers, ce qui permet de sauvegarder un système en étant sûr qu'il ne contient pas de fichiers à moitié enregistré tout en opérant à partir du dit système en plein fonctionnement

[2] c'est-à-dire sans même arrêter de travailler sur votre machine !

[3] pratique pour installer le dernier Linux sans écraser vos données ;-), prenez au moins 1Go pour la racine, 1.5Go étant bien pour accueillir de gros fichiers temporaires