Gentoo et Lvm

Portrait de ctxnop

Il m'est arrivé une mésaventure hier soir.
Sur mon ordinateur de bureau, j'ai une Gentoo et un Windows 7. Ce dernier, installé récemment, a comme tous les Windows, détruit mon boot. Ayant un peu la flemme ces derniers jours pour réparer celà, il s'est passé un peu près un mois avant que je ne me décide à réparer mon Grub.
Hier soir donc, je me suis décider à réparer tout ça. Je me suis emparé de mon dernier LiveCD de Gentoo, booté dessus, monté mes partitions, chrooté dedans puis lancé un petit grub-setup qui va bien. Impeccable, tout à fonctionné comme sur des roulettes. Je reboot donc sur ma Gentoo quelque peu délaissée et entreprend de la mettre à jour via un petit

  1. desktop ~ # emerge --sync && emerge -uDN world

Ouchhh, plus de 300 paquets à mettre à jour ...
Tout se déroule à peu près correctement, et au bout d'une 50aine de paquets un message d'erreur apparait : plus d'espace disque.

  1. desktop ~ # df -h
  2. Filesystem            Size  Used Avail Use% Mounted on
  3. rootfs                9.2G  9.2G  0.0G  100% /
  4. /dev/root             9.2G  9.2G  0.0G  100% /
  5. rc-svcdir             1.0M   60K  964K   6% /lib64/rc/init.d
  6. udev                   10M  200K  9.9M   2% /dev
  7. shm                   2.0G     0  2.0G   0% /dev/shm
  8. /dev/mapper/vg-home   9.9G  5.2G  4.2G  56% /home
  9. /dev/mapper/vg-var     99G   21G   73G  23% /var
  10. /dev/mapper/vg-tmp    9.9G  265M  9.1G   3% /tmp
  11. /dev/mapper/vg-games   99G   26G   68G  28% /usr/games

Effectivement, ma partition est pleine. Comme vous pouvez le voir, j'ai plein d'espace libre sur d'autre partition (et encore, j'en ai bien plus que ca, le reste n'étant tout simplement pas monté par défaut).
Gros problème, la partition plein est la racine. Elle n'est pas en LVM et je ne peux donc pas la re-tailler à chaud comme je veux. Résultat, je fouille un peux dans les répertoires histoire de trouver de l'espace à libérer. Pas une mince affaire tout ça, dans la mesure où es plus gros répertoires sont sur d'autres partitions (/home, /var, /tmp et /usr/games).
Et la, allez savoir pourquoi, la fatigue surement, alors que je me croyais dans un répertoire d'un ancien backup, j'ai fait un
  1. desktop usr # rm -rf local

Sauf que j'étais dans /usr, j'ai donc effacé /usr/local.
Avant de m'apercevoir de l'erreur, j'ai également supprimé /usr/portage (pensant la encore que c'était un backup).
Je relance ma mise à jour (emerge -uDN world) et la, naturellement, des messages d'avertissement et d'erreur débordent de l'écran et la mienne me monte au cerveau : "Ohhh merdeeeee".

Bon, alors comment réparer tout ca ?
D'abord, je boot avec un LiveCD pour avoir un système propre (notez que mon système est toujours bootable et utilisable, même KDE fonctionne apparemment parfaitement, mais certaines commandes et logiciels peuvent avoir un comportement totalement imprévu voir crasher).
Ensuite, je peux monter ma partition racine, et reprendre le manuel d'installation de Gentoo.

  1. mkdir /mnt/sda2 && mount /dev/sda2 /mnt/sda2

Au début d'une installation de Gentoo, on vous indique comment partitionner les disques durs et installer un système minimal à base de stage3. C'est donc ce que j'ai fais, enfin presque. J'ai téléchargé ces deux archives, puis je les ai décompressées dans un répertoire temporaire /tmp/repair. Enfin, j'ai copier les répertoires /tmp/repair/usr/local ainsi que /tmp/repair/portage dans /mnt/sda2/usr (celui de mon disque dur, pas de la LiveCD).

Voila, maintenant j'ai plus ou moins réparé ma bêtise. Ce n'est pas encore parfait car je repart avec un /usr/local de base et non celui issus de l'installation de nombreux logiciels. Mais c'est suffisant pour le moment. Attaquons nous à ce problème de taille de partition.

  1. desktop ~ # fdisk -l /dev/sda
  2.  
  3. Disk /dev/sda: 500.1 GB, 500106780160 bytes
  4. 255 heads, 63 sectors/track, 60801 cylinders
  5. Units = cylinders of 16065 * 512 = 8225280 bytes
  6. Disk identifier: 0x71527152
  7.  
  8.    Device Boot      Start         End      Blocks   Id  System
  9. /dev/sda1               1          13      104391   83  Linux
  10. /dev/sda2              14        1230     9775552+  83  Linux
  11. /dev/sda3            1231       59828   470688435   8e  Linux LVM
  12. /dev/sda4           59829       60801     7815622+  82  Linux swap / Solaris

Comme on peux le voir, ma partition /dev/sda2 ne peux être redimensionnée sans prendre de l'espace à une autre partition. En l'occurence je vais prendre de l'espace à /dev/sda3. C'est une partition LVM.

Avant de continuer, pour ceux qui ne connaissent pas, parlons de LVM :
LVM est un gestionnaire de volume logiques (Logical Volume Manager).
En fait, pour simplifier, on créer des partition de type 8e (Linux LVM), on indique ensuite à LVM d'utiliser ces partition en tant que volumes physique

  1. desktop ~ # pvcreate /dev/sda3

Ensuite, on créer un groupe de volume (Volume Group) en utilisant la partition (ici je l'appelle vg)
  1. desktop ~ # vgcreate vg /dev/sda3

Enfin, on créer autant de volumes logiques qu'on le souhaite (dans la limite de l'espace disponible évidemment, ici je créer un volume de 10Go nommé "usr" et placé dans le groupe de volume "vg") :
  1. desktop ~ # lvcreate -L10G -nusr  vg

une fois le volume créé, un device à son nom apparaît dans /dev//. Ici, le volume "usr" appartient au groupe "vg", il sera donc disponible ici : /dev/vg/usr.
On a plus qu'a le formater :
  1. desktop ~ # mkfs.etx4 /dev/vg/usr

Et voila, on peux maintenant l'utiliser comme n'importe quelle partition en la montant où on le souhaite :
  1. desktop ~ # mount /dev/vg/usr /usr

Quel intérêt ? Et bien LVM permet :
- regrouper des volumes physiques dans un groupe de volume (exemple, vous avez 3 disques de 10Go, vous pouvez les regrouper dans un seul VG afin de faire une seule et unique partition de 30Go)
- Ajouter à chaud un volume physique à un groupe de volume (ajout d'un disque dur)
- Retirer à chaud un volume physique d'un groupe de volume (enlever un disque dur)
- Ajouter/retirer un volume logique à chaud (Ajout/suppression de nouvelles partitions)
- Redimensionner à chaud un volume logique (partition) sans perte de donnée.
Pratique non ?

Revenons alors à mon cas. Je ne peux pas augmenter la taille de sda2. Cependant, j'ai d'autres disques dur et sda3 est une partition LVM. Donc, je créer un nouveaux volume physique sur un autre de mes disques dur, ca tombe bien, j'ai 500Go de libre sur mon disque dur de 1To acheté quelques jours avant l'installation de windows 7. J'ajoute mon volume physique au groupe "vg", puis j'indique à lvm qu'il faut libérer le volume physique sda3.

  1. # ici je créer la partition sdb3 de 500Go et de type 8e 
  2. desktop ~ # fdisk /dev/sdb
  3. # Ensuite je créer un volume physique avec cette partition
  4. desktop ~ # pvcreate /dev/sdb3
  5. # Puis je l'ajoute au groupe de volume "vg"
  6. desktop ~ # vgextend vg /dev/sdb3
  7. # Maintenant qu'il y a suffisemment de place dans vg, je retire le volume physique sda3, LVM va alors déplacer tout ce qui doit l'être pour ne perdre aucune données. Cette action peut prendre beaucoup de temps.
  8. desktop ~ # vgreduce vg /dev/sda3
  9. # Enfin, j'indique à LVM de ne plus utiliser sda3
  10. desktop ~ # pvremove /dev/sda3

Et voilà, grâce à parted, je n'ai plus qu'a supprimer /dev/sda3, agrandir /dev/sda2 et recréer sda3 sur ce qui reste. Puis on refait les manipulations pour que sda3 soit de nouveau dans le VG.

Maintenant que le problème d'espace est résolut, il ne reste plus qu'a réinstaller tous les paquets du système pour finir de le réparer. Je parle ici d'une réinstallation via le gestionnaire de paquets, c'est à dire que vous pouvez tout à fait utiliser votre ordinateur pendant ce temps, du moins, tout ce qui ne crash pas.

  1. desktop ~ # emerge -e world

Et voilà, c'est long, certes, mais cette aventure montre qu'il est possible de réparer un Linux tout brisé là où, sur Windows, on réinstalle tout. En plus ca permet de se rendre compte de l'utilité et de la puissance de LVM.

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <br> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <h2> <h3> <img> <pre> <p>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <asm>, <bash>, <c>, <cil>, <cmake>, <cpp>, <cppqt>, <csharp>, <diff>, <drupal5>, <drupal6>, <ini>, <java>, <javascript>, <latex>, <lisp>, <lua>, <make>, <mysql>, <perl>, <php>, <plsql>, <powershell>, <prolog>, <python>, <reg>, <ruby>, <sql>, <tcl>, <tsql>, <vb>, <vbnet>, <xml>. The supported tag styles are: <foo>, [foo], [[foo]].

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet de bloquer les robots et l'envoie automatisé de spam.