Sur le nouveau sweetBox j’ai installé le démon SMART pour surveiller la santé de mes disques dur, et là horreur et damnation une erreur remonte « Current pending sector ».

Bref ce n’est pas le sujet de ce post, mais j’ai aussitôt contecté matériel.net pour faire une demande de SAV afin de retourner le disque dur fautif qui est tout neuf.


Le problème est que ce disque dur de 1To à une partition de 15Go qui contient l’installation d’Ubuntu (le root), or je n’ai pas envie de ne plus avoir de de mediacenter tout le temps que durera le SAV.

2 solutions :

  • ré-installer Ubuntu sur le 2ème disque dur (320 Go) qui est pour l’instant vide (je devais l’utiliser pour faire un RAID, mais je n’ai pas pris le temps de le faire)
  • déplacer l’installation d’Ubuntu du disque de 1To vers ce même disque de 320Go


Évidemment la 2ème solution à ma préférence et fait donc l’objet de ce post.


Pour la suite voici les partitions que je vais mentionner et manipuler :

  • /dev/sda : disque de 320Go, non utilisé non partitionné
  • /dev/sdb : disque de 1To devant retourner en SAV et partionné comme suit :
    • /dev/sdb1 (1Go) : swap
    • /dev/sdb2 : racine (/), 3Go d’utilisés sur 15Go disponibles
    • /dev/sdb4 (~300Go) : inutilisé, prévu pour le RAID avec sda
    • /dev/sdb3 (~600Go) : partition LVM découpé ainsi :
    • /dev/mvg/lvhome : monté sur /home, 4.5Go d’utilisés sur 15Go disponibles
    • /dev/mvg/lvsauv : monté sur /data/sauvegarde, utilisé pour stocker les sauvegarde rsnapshot, 23Go d’utilisés sur 105Go disponibles
    • /dev/mvg/lvmulti : monté sur /data/mutlimedia, utilisé pour stocker les fichier multimedia (photo, video, musique), 180Go d’utilisés sur 480Go disponibles


Le but du jeu est donc de basculer la racine (/dev/sdb2) sur une partition de sda, le /home sur une autre et tout le reste dans une troisième.


Ce montage devant être temporaire en n’utilisera pas LVM sur sda.


Préparation du nouveau disque

Pour coller au besoin exprimé ci-dessus sda à été partitionné en 4 avec cfdisk :

  • /dev/sda1 : 500Mo : pour le swap
  • /dev/sda2 : 5Go : pour la racine
  • /dev/sda3 : 15Mo : pour le /home
  • /dev/sda4 : ~300Go : pour le reste (/dev/mvg/lvsauv et /dev/mvg/lvmulti)

Le flag Amorce sera positionné sur sda2


On indiquera à Ubuntu de prendre en compte le partionnement sans reboot avec partprobe, puis on formattera sda2/3/4 en ext3 et sda1 en swap :


sudo partprobe /dev/sda
sudo mkfs.ext3 /dev/sda2
sudo mkfs.ext3 /dev/sda3
sudo mkfs.ext3 /dev/sda4
sudo mkswap /dev/sda1


Déplacement des données

Ce n’est pas l’objet de ce post, mais grosso modo, voici les étapes :

  • créer 1 repertoire /mnt/new
  • monter la partition sda qui va accueillir les donnés (home –> sda3, data/sauvegarde + data/multimedia –> sda4)
  • copier les données avec -a
  • vérifier
  • démonter /mnt/new et passer à la partition suivante
  • démonter les partition copiés


Ce qui dans mon cas à donné :

sudo -s
mkdir /mnt/new
mount sda3 /mnt/new
cp -a /home/. /mnt/new
ls -la /mnt/new
umount /mnt/new
mount sda4 /mnt/new
cp -a /data/. /mnt/new
ls -la /mnt/new
umount /mnt/new
umount /home
umount /data/multimedia
umount /data/sauvegarde



Suppression des volumes LVM

le nouveau disque dur n’utilisera pas LVM, et même si il l’avait utilisé il vaut mieux détruire les différents volumes LVM afin de ne pas avoir d’erreur au reboot.

Pour cela 4 étapes :

  • démonter les devices LVM (fait lors de l’étape précédente)
  • supprimer chacun des volumes logique
  • supprimer le(s) groupe(s) de volumes
  • supprimer le volume physique


Ce qui a donné dans mon cas :

sudo -s
lvremove /dev/mvg/lvhome
lvremove /dev/mvg/lvmulti
lvremove /dev/mvg/lvsauv
vgremove mvg
pvremove /dev/sdb3



Déplacer la partition système (racine)

On arrive au cœur du problème, tout ce qui précédait n’était que de la préparation.

C’est ici qu’il convient de prendre le plus de précaution et pour commencer on bootera sur un live-CD, afin d’accéder pleinement à tout le système de fichier sans blocage.


On va ensuite créer 2 répertoires pour monter la partition racine à copier et la partition qui va l’accueillir. Ces répertoire sont créés en mémoire dans le contexte du live-CD, il n’existeront sur aucun des disques dur.


Pour on copiera l’installation simplement via cp et l’option -a

Voici ce que ça a donné chez moi :


sudo -s
mkdir /mnt/new
mkdir /mnt/old
cp -a /mnt/old/. /mnt/new



Modification des points de montage

La partition racine copiée il faut modifier le fichier de montage automatique des partitions pour utiliser les partitions sur le nouveau disque et non plus sur l’ancien.

3 étapes :

  • récupérer, copier les UIDs des nouvelle partitions
  • sauvegarder le fstab
  • modifier le fstab pour changer les points de montage


Ce qui donne :

sudo -s
blkid /dev/sda1
blkid /dev/sda2
blkid /dev/sda3
blkid /dev/sda4


Copier l’UUID pour chacune des partitions

cp /etc/fstab /etc/fstab_save
vi /etc/fstab


Dans mon fstab j’ai dû changer les points de montage suivants

  • /
  • /home
  • swap
  • /data/multimedia et /data/sauvegarde qui sont devenus /data


Modification du boot (Grub)

Vient la dernière étape, restaurer Grub pour que le boot ait lieu sur le nouveau disque dur et non plus l’ancien.

Cet étape se fait toujors en ayant booté sur le live-CD

4 étapes :

  • Sauvegarder le fichier menu.lst
  • Editer menu.lst pour changer toutes les occurences de l’UID de l’ancien disque dur avec l’UID du nouveau
  • Dans le context Grub, rechercher les partitions contenat un Grub
  • Réinstaller Grub dans la MBR en pointant la nouvelle partition


Ce qui donne (ma nouvelle partition racine est toujours monté dans /mnt/new, cf. étape précédente) :

sudo -s
cp /mnt/new/boot/grub/menu.lst /mnt/new/boot/grub/menu.lst_save
vi /mnt/new/boot/grub/menu.lst


Remplacer tous les anciens UID par le nouveau, 7 occurrences dans mon cas

Bien penser à remplacer toutes les occurrences, y compris celles en commentaires


grub

On entre dans le contexte grub

find /boot/grub/stage1


Devrait afficher un resultat du type :

(hd0,1)
(hd1,1)


qui indique que le fichier stage1 et donc Grub a été trouvé sur la deuxième partion (hd0,1) du premier disque dur (hd0, 1) et la deuxième partition du deuxième disque dur, ce qui corespond bien à sda2 et sdb2.


On veut booter sur sda2, donc (hd0,1), il faut donc réinstaller grub sur ce dernier par (toujours dans le contexte Grub) :


root (hd0,1)
setup (hd0)
quit


Tests

Rebooter en enlevant le live-CD, s’assurer que les points de montage sont bien là

Débrancher l’ancien disque dur et rebooter, tout devrait fonctionner….



PS :

Il semblerait qu’il existe un UID (donc a remplacer) dans etc/initramfs-tools/conf.d/resume utilisé lors de l’hibernation.

Je n’y ai personellement pas touché n’utilisant pas l’hibernation sur sweetBox…


Edit :

28/06/2010 : remplacement de la commande vol_id (supprimée à partir d’Ubuntu 9.10)  par blkid pour retrouver les UUID des disques durs


Sources :

Ma principal source : deplacer_root – Documentation Ubuntu Francophone

Et aussi :

Penguin Pete’s Blog

SolutionBase: Moving Linux from one disk to another

Move linux to another hard drive (dump, restore, backup) – Linux * Screw

Moving Your Linux Root Partition | programming

Moving A GNU/Linux Installation To A Different Partition

Moving Ubuntu installation to new hardware – Andre’s Blog

Les commentaires sont fermés.