sauvegarde et restauration de système
Par traaf le dimanche 11 mars 2007, 18:32 - Ubuntu - Lien permanent
Quoi ?
Adepte des testages de distros en tous genre, mon disque dur principal était, jusqu'à récemment, partitionné comme suit :
- hda1 : ext3 12 GO (racine ubuntu)
- hda2 : swap 1 GO (swap)
- hda3 : ext3 65 GO (/home ubuntu)
- hda4 : reiserfs 6 GO (test)
Mon système ubuntu (dapper) étant installé en dur sur hda1 & hda3, la partition hda4 me servant à installer des distros que je voulais tester (edgy, puis feisty, récemment une debian, et depuis quelques jours, une gentoo...
Cette dernière m'ayant pour le moins enthousiasmé, je l'utilise assez intensivement et j'y rajoute toutes mes applications préférées, ça compile sévère ! En plus, vu que je n'arrête pas de jouer avec mes USE flags, j'enchaine les recompilations (principalement à cause du multimédia !), j'ai donc activé le ccache pour gagner un peu de temps, au détriment de l'espace disque.
Je me suis donc rapidement trouvé à court d'espace disque (600MO restant libres), et j'ai donc décidé de rogner ma partition hda3 pour augmenter hda4, et par la même occasion, transférer le /home gentoo, jusque là inclus dans la racine, sur la partition dédiée à /home
Pour trafiquer les partitions système, le plus simple était de travailler depuis mon système embarqué sur liveUSB, réalisé sur un DD Western-Digital de 80GO, ce qui me permet de bénéficier de pas mal de place pour sauvegarder mes données avant manipulation.
J'avoue ne pas être un accro de la sauvegarde, mais là, vu le temps passé sur l'installation de la Gentoo, j'avais pas envie de risquer une réinstall, ca se torche pas en 1/4 d'heure comme ubuntu !
Me voilà donc booté sur USB, avec mes partitions systèmes non montées
$fdisk -l
Disque /dev/hda: 81.9 Go, 81964302336 octets
255 têtes, 63 secteurs/piste, 9964 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Périphérique Amorce Début Fin Blocs Id Système
/dev/hda1 1 1275 10241406 83 Linux
/dev/hda2 1276 1414 1116517+ 82 Linux swap / Solaris
/dev/hda3 1415 9027 53295637+ 83 Linux
/dev/hda4 9028 9964 15382237+ 83 Linux
Disque /dev/sda: 80.0 Go, 80026361856 octets
255 têtes, 63 secteurs/piste, 9729 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 1 127 1020096 b W95 FAT32
/dev/sda2 128 1433 10490445 83 Linux
/dev/sda3 1434 1498 522112+ 82 Linux swap / Solaris
/dev/sda4 1499 9729 66115507+ 5 Extended
/dev/sda5 7178 9729 20498908+ 83 Linux
/dev/sda6 1499 7177 45616504+ 83 Linux
Les entrées de la table de partitions ne sont pas dans l'ordre du disque
Disque /dev/hde: 164.6 Go, 164696555520 octets
255 têtes, 63 secteurs/piste, 20023 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Périphérique Amorce Début Fin Blocs Id Système
/dev/hde1 * 1 2554 20514973+ 7 HPFS/NTFS
/dev/hde2 2555 19386 135203040 b W95 FAT32
/dev/hde3 19387 20023 5116702+ c W95 FAT32 (LBA)
Le disque sda est mon système usbuntu, avec 40GO d'espace de sauvegarde sur sda6
Le disque hde contient une vieille install windows et plein de musique et films
Le disque hda est celui qui m'intéresse...
Sauvegarde des données :
je monte ma partition /home (hda3) pour déplacer les quelques fichiers encombrants qui y trainent vers hdb2 (ma partition de stockage)
$mkdir /mnt/stock
$mount /dev/hde2 /mnt/stock
$mkdir /mnt/hda3
$mount /dev/hda3/mnt/hda3
Je réalise le transfert en mode graphique avec nautilus, tout simplement, on va pas se compliquer la vie !
Quand hdb2 est bien pleine, je sacrifie quelques films déjà vus pour descendre le volume de /home à environ 20 GO, qui rajoutés aux 6 GO de mon install Gentoo + les 8 GO de ma partition racine, vont bien remplir mon espace de sauvegarde
Passons maintenant à la sauvegarde des systèmes :
Je duplique les partitions les unes après les autres dans un fichier sur sda6 (partition en ext3)
La partition hde2 n'est pas utilisée ici pour procéder à cette manip car elle est encore en FAT32, qui n'accepte pas les fichiers de taille supérieure a 4 GO, or, je vais créer 3 fichiers de respectivement 20GO, 6GO et 8GO
je commence donc par monter cette partition de sauvegarde, et démonter mon disque hda
$mkdir /mnt/data
$mount /dev/sda6 /mnt/data
$umount /dev/hda3
Je duplique les partitions démontées, un dernier coup d'oeil pour s'assurer que tout est en ordre :
$mount
unionfs on / type unionfs (rw)
proc on /proc type proc (rw)
/sys on /sys type sysfs (rw)
varrun on /var/run type tmpfs (rw)
varlock on /var/lock type tmpfs (rw)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
devshm on /dev/shm type tmpfs (rw)
lrm on /lib/modules/2.6.15-23-386/volatile type tmpfs (rw)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
/dev/sda5 on /media/repo type ext3 (rw)
/dev/hde2 on /mnt/stock type vfat (rw)
/dev/sda6 on /mnt/data type ext3 (rw)
Et c'est parti :
$dd if=/dev/hda1 of=/mnt/data/dump.hda1
$dd if=/dev/hda3 of=/mnt/data/dump.hda3
$dd if=/dev/hda4 of=/mnt/data/dump.hda4
C'est le moment d'aller faire couler un café et promener le chien... pas loin de 40GO à transférer sur USB, ça prend un peu de temps...
Repartitionnement
Quand la sauvegarde est terminée, je peux enfin attaquer les choses sérieuses. Avec Gparted, j'essaie de rétrécir hda3, je le laisse mouliner un moment, le système freeze...
Je suis bon pour un reboot sauvage (heureusement que j'ai fait mes sauvegardes !). Et hop, je réouvre Gparted, et je retrouve tout en l'état, il n'a rien fait du tout, le bougre.
Un rapide fsck /dev/hda3 pour m'assurer que tout va bien, pas de problème ! Je respire.
c'est pas grave, on va utiliser parted...
Pas besoin de connaitre par coeur son fonctionnement, il est très intuitif à l'usage, et nous propose les choix quand les instructions ne sont pas assez précises, il n'y a qu'a se laisser guider :
$parted /dev/hda
On utilise /dev/hda
(parted) print
Géométrie du disque pour /dev/hda : 0kB - 82GB
Type d'étiquette de disque : msdos
Numéro Début Fin Taille Type Système de fichiers Drapeaux
1 32kB 10GB 10GB primaire ext3
2 10GB 12GB 1143MB primaire linux-swap
3 12GB 76GB 65GB primaire ext3
4 76GB 82GB 6GB primaire ext3
(parted) help
check NOMBRE entraîne une simple vérification du système de fichiers
cp [PÉRIPHÉRIQUE-SOURCE] NOMBRE-SOURCE NOMBRE-DESTINATION copie le système de fichiers vers une autre partition
help [COMMANDE] affiche l'aide générale ou, le cas échéant, l'aide sur la COMMANDE
mklabel TYPE-LABEL crée une nouvelle étiquette de disque (table de partition)
mkfs NOMBRE TYPE-SF crée un système de fichiers de type TYPE-SF sur la partition NOMBRE
mkpart TYPE-PART [TYPE-SF] DÉBUT FIN crée une partition
mkpartfs TYPE-PART TYPE-SF DÉBUT FIN crée une partition avec un système de fichiers
move NOMBRE DÉBUT FIN déplace la partition NOMBRE
name NOMBRE NOM nomme la partition NOMBRE avec NOM
print [NOMBRE] affiche la table des partitions ou une partition
quit sortir du programme
rescue DÉBUT FIN restaure une partition perdue située approximativement entre DÉBUT et FIN
rezise NOMBRE DÉBUT FIN redimensionne la partition NOMBRE et son système de fichiers
rm NOMBRE supprime la partition NOMBRE
select PÉRIPHÉRIQUE sélectionne le périphérique à modifier
set NOMBRE DRAPEAU ÉTAT met le drapeau à l'état ÉTAT sur la partition NOMBRE
unit UNITÉ met l'unité par défaut à UNITÉ
(parted) resize
Numéro de partition ? 3
Début ? [12GB]?
Fin ? [76GB]? 66GB
Et là, c'est le drame !
parted m'informe qu'il a rencontré un problème et me recommande d'envoyer un rapport de bug !
qu'est ce que c'est que ce bazar ?
Je le relance, tout apparait comme avant ! Je remonte ma partiton pour vérifier le contenu, mon repertoire utilisateur a disparu !
Je démonte la partition et lance un
$fsck /dev/hda3
qui commence immédiatement à m'insulter. Je le coupe et relance un
$fsck -y /dev/hda3
qui dure un bon quart d'heure, et je récolte un dossier lost+found avec plein de bazar, des images, des fichiers en vrac, bref, si j'avais des données à récupérer, c'est la dedans que je les trouverais, mais du coup, pas envie de me lancer dans un recyclage des déchets, je décide de tout reprendre à zéro. De toute façon, ma partiton hda4 n'est pas extensible vers l'avant (c'est une restriction des systèmes de fichiers ext3 et reiserfs, on ne peut pas déplacer le début de la partition, on ne peut les agrandir que par la fin) et j'allais la supprimer, autant virer aussi hda3 !
Tant qu'a y être, je reformate tout mon disque et passe tout en reiserfs, retour sous Gparted où je supprime toutes mes partitions, et je repars à blanc
(parted) print
Géométrie du disque pour /dev/hda : 0kB - 82GB
Type d'étiquette de disque : msdos
Numéro Début Fin Taille Type Système de fichiers Drapeaux
1 32kB 10GB 10GB primaire reiserfs
2 10GB 12GB 1143MB primaire linux-swap
3 12GB 66GB 55GB primaire reiserfs
4 66GB 82GB 16GB primaire reiserfs
Et voilà, comme ça on n'en parle plus !
Restauration des sauvegardes
Du coup, mes fichiers de dump vont s'avérer utiles, si la manip fonctionne. Vu comment les choses se déroulent pour l'instant, je crains tout de même de devoir réinstaller le tout !
Il n'y a qu'à refaire la copie dans l'autre sens, je commence par le plus petit fichier, pour tester la manip :
$dd if=/mnt/data/dump.hda4 of=/dev/hda4
puis je remonte la partition hda4 pour en inspecter le contenu.
Bon ! C'est pas encore ça ! je viens de copier 6GO de données sur une partition de 16GO, et il ne m'en reste que 600MO de dispo (même quota de libre qu'avant le redimensionnement). Ya un problème quelque part. Je suspecte le système de fichier de ne pas être au courant du changement de support, du coup, c'est reparti pour un tour de
$umount /dev/hda4
$fsck /dev/hda4
dont il ne ressort rien .
Je le pressentais que ça allait mal se passer !
Je tente une autre approche : je reformate la partition :
$mkfs.reiserfs /dev/hda4
Et je vais simplement recopier les données depuis les fichiers de sauvegarde.
Je dois préalablement monter les fichiers dump (comme une partition) en utilisant l'option loop :
$mkdir /mnt/gentoo
$mount -o loop /mnt/data/dump.hda4 /mnt/gentoo
$cd /mnt/gentoo
$ls -l
total 146068
drwxr-xr-x 2 root root 3864 2007-03-07 20:10 bin
drwxr-xr-x 3 root root 616 2007-03-11 03:46 boot
drwxr-xr-x 10 root root 35384 2006-08-03 14:24 dev
drwxr-xr-x 65 root root 4248 2007-03-11 13:04 etc
drwxr-xr-x 3 root root 96 2007-03-07 02:07 home
drwxr-xr-x 10 root root 4296 2007-03-11 02:13 lib
drwxr-xr-x 3 root root 112 2007-03-10 23:28 media
drwxr-xr-x 7 root root 200 2007-03-08 18:43 mnt
drwxr-xr-x 5 root root 176 2007-03-11 00:10 opt
-rw-r--r-- 1 root root 36763110 2007-03-05 15:51 portage-20070303.tar.bz2
drwxr-xr-x 2 root root 48 2006-08-03 14:22 proc
drwx------ 27 root root 1512 2007-03-11 11:56 root
drwxr-xr-x 2 root root 4280 2007-03-11 02:13 sbin
-rw-r--r-- 1 root root 112603344 2007-03-05 15:44 stage3-i686-2006.1.tar.bz2
drwxr-xr-x 2 root root 72 2006-08-03 14:23 sys
drwxrwxrwt 25 root root 1176 2007-03-11 13:04 tmp
drwxr-xr-x 17 root root 488 2007-03-08 22:07 usr
drwxr-xr-x 13 root root 336 2007-03-06 01:04 var
Et voilà !
reste à remonter la partition de destination, et à y tranférer les données :
$mount /dev/hda4 /mnt/hda4
$cp -ax * /mnt/hda4
Un moment plus tard, c'est bon. Apres inspection, le contenu semble correct, je commence à me sentir mieux.
Je n'ai plus qu'a faire de même pour hda3 :
$mount /dev/hda3 /mnt/hda3
$mkdir /mnt/home
$mount -o loop /mnt/data/dump.hda3 /mnt/home
$cd /mnt/home
$cp -ax * /mnt/hda3
Ce qui prend pas mal de temps pour recopier la vingtaine de gigas.
et enfin, la même chose pour hda1 :
$mount /dev/hda1 /mnt/hda1
$mkdir /mnt/racine
$mount -o loop /mnt/data/dump.hda1 /mnt/racine
$cd /mnt/racine
$cp -ax * /mnt/hda1
Mes 2 Systèmes sont maintenant réinstallés dans leur intégralité, en tout cas, les données sont sur le disque dur
Déplacement du repertoire /home de la gentoo
Malgré ces émotions, je n'ai pas oublié mon objectif de transférer le repertoire /home de la gentoo (hda4) sur hda3
Ça n'est pas plus dur a faire que ce qui vient d'être fait :
$ls -l /mnt/gentoo/home
total 2
drwxr-xr-x 45 1000 1000 1960 2007-03-11 13:04 regis
$ls -l /mnt/hda3
total 1
drwxr-xr-x 15 1000 1000 752 2007-03-11 18:36 traaf
Mes utilisateurs ont heureusement un nom différent, mais l'uid est le même !
C'est pas top, mais ça devrait passer, ça me fera un autre problème à corriger plus tard.
Je recopie le contenu du repertoire /home de Gentoo vers hda3
$cd /mnt/gentoo/home
$cp -ax * /mnt/hda3
$ls -l /mnt/hda3
total 2
drwxr-xr-x 45 1000 1000 1960 2007-03-11 18:31 regis
drwxr-xr-x 15 1000 1000 752 2007-03-11 18:36 traaf
Et voilà mon dossier utilisateur recopié sur la partition hda3
Reste à renommer le repertoire home de hda4 pour qu'il n'apparaisse plus (je le recopie pour conserver les données en cas de pépin)
$mv /mnt/hda4/home /mnt/hda4/home.old
$ls -l /mnt/hda4/h*
/mnt/hda4/home.old:
total 2
drwxr-xr-x 45 1000 1000 1960 2007-03-11 13:04 regis
Puis à créer un repertoire home vide, dans lequel viendra se monter la partition hda3
$mkdir /mnt/hda4/home
$ls -l /mnt/hda4/h*
/mnt/hda4/home:
total 0
/mnt/hda4/home.old:
total 2
drwxr-xr-x 45 1000 1000 1960 2007-03-11 13:04 regis
On retrouve la sauvegarde home.old avec sont contenu, et le nouveau repertoire vide.
Prise en compte des modifications
Je dois encore modifier le fstab de Gentoo pour que ce déplacement soit pris en compte :
# < fs > < mountpoint > < type > < opts > < dump/pass >
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
/dev/hda4 / reiserfs defaults,noatime,notail 0 1
/dev/hda2 none swap sw 0 0
/dev/hde2 /mnt/Documents vfat rw,users,auto,uid=1000,gid=100,umask=002,utf8=true 0 0
# NOTE: The next line is critical for boot!
none /proc proc defaults 0 0
none /dev/shm tmpfs nodev,nosuid,noexec 0 0
Auquel je rajoute l'entrée vers hda3 :
/dev/hda3 /home reiserfs defaults,noatime,notail 0 1
Réinstallation de grub
Reste, par précaution, à réinstaller les bootloaders, fidèlement à mon habitude, j'installe grub sur le MBR pour Ubuntu, et je fais un chainloader vers le grub de gentoo
Je dois donc réinstaller 2 fois grub, sur le MBR et sur hda4 :
$grub --batch
grub> root (hd0,3)
root (hd0,3)
Filesystem type is reiserfs, partition type 0x83
grub> setup (hd0,3)
setup (hd0,3)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/reiserfs_stage1_5" exists... yes
Running "embed /boot/grub/reiserfs_stage1_5 (hd0,3)"... 19 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0,3) (hd0,3)1+19 p (hd0,3)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> root (hd0,0)
root (hd0,0)
Filesystem type is reiserfs, partition type 0x83
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/reiserfs_stage1_5" exists... yes
Running "embed /boot/grub/reiserfs_stage1_5 (hd0)"... 18 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+18 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub>quit
Il ne me reste plus qu'à booter, et voir si ça marche....
Et ça marche, ce qui me permet de poster ce billet ce soir, après quelques frayeurs et un peu de temps passé devant mon écran
Commentaires
t'es un furieux, Traaf. Digne d'un polar, pour geek, tout de même.
piero
En tous cas, merci de nous faire part de ton expérience et de ta façon de t'en sortir; j'y ai perso appris pas mal de choses...
Je vais revoir ma façon de faire des backup; la tienne me plait bien.
Tu me donnes des idées; du coup, je vais organiser mon disque de façon à pouvoir faire des tests d'autres distribs (j'utilise Kubuntu et j'ai bien envie d'essayer Debian en direct)
Je n'ai pas tout compris tes commandes GRUB, mais je vais trouver les explications.
Merci bien et n'hésite pas à en faire d'autres
Putain, 12Go pour la / de Ubuntu et 6Go pour la / de Gentoo...!
Mais qu'est-ce que tu mets dessus, sérieux?
Des photos et films de cul que ta meuf pourra pas trouver???? :D