Main menu:

Site search

Categories

février 2010
L M M J V S D
1234567
891011121314
15161718192021
22232425262728

Archive

Sauvegarder une partition entière avec dd

La commande dd permet de sauvegarder un disque entier ou une partition sans devoir faire attention à ce qu’il y a effectivement sur le disque, à sa structure. Il copie les données se trouvant sur le disque physique sans se préoccuper de savoir si il y a une ou plusieurs partitions ni comment elles sont formatées. De plus dd peut copier des secteurs du disque qui ne se trouvent pas sur une partition comme le MBR par exemple.

Il est donc possible de sauvegarder un disque entier ou simplement une partition et donc, même une partition Windows Vista par exemple. Et comme je suis un peu comme Saint Thomas, je ne crois que ce que j’ai pu expérimenter, je me suis lancé dans la sauvegarde et la restauration d’une partition contenant un Windows Vista en parfait état de marche.

La première chose que j’ai faite, c’est monter un disque dur externe sur /media/disk. Ce disque va servir à recevoir la sauvegarde de ma partition. Ensuite j’ai fait une sauvegarde du MBR parce qu’on ne sait jamais! Si quelque chose se passe mal, je suis sûr d’au moins pouvoir restaurer le MBR du disque avec la table des partitions:

$ sudo dd if=/dev/sda of=/media/disk/mbr.bin bs=512 count=1

La commande dd permet de sauvegarder les données par blocs. La taille du bloc est déterminée par le paramètre bs dans la commande. Dans le cas du MBR, celui-ci correspond au premier secteur du disque et fait 512 octets. On donnera donc au bloc la taille de 512. Par contre, lors de la sauvegarde d’une partition ou d’un disque entier, il peut être intéressant de donner au bloc une taille multiple de celle des blocs sur le disque. La plupart des disques sont constitués de blocs de 512 octets. Définir une taille de 1024 ou 2048 permet d’accélérer la sauvegarde. Créer des blocs de taille plus grande ne sert à rien d’après mes essais.

L’inconvénient de dd, c’est qu’il copie absolument tout. Même les parties du disque non-utilisées. Si votre partition fait 250GB, la sauvegarde fera aussi 250GB. Pour diminuer cette taille, nous pouvons compresser avec gzip les données. Les essais que j’ai fait sur une partition de 25GB donnaient une sauvegarde de 18GB. C’est déjà mieux. Il peut être aussi intéressant de s’assurer avant de formater le disque qu’il contient bien des zéros partout. De cette façon, les zones inutilisées sont constituées de zéros qui se compressent très bien. D’après ce que j’ai pu voir, c’est déjà le cas des partitions NTFS et mes partitions ext3/ext4 contenaient aussi des zéros dans les zones inutilisées. Mais pour être sûr, remplissez le disque de zéro avant tout formatage, cela diminuera la taille de la sauvegarde plus tard si cela s’avère nécessaire. La commande suivante remplit le disque sda de zéros:

$ sudo dd if=/dev/zero of=/dev/sda bs=1024k conv=noerror,sync

Attention: n’utilisez la commande ci-dessus que si vous savez ce que vous faites. L’utiliser sur un disque en utilisation, le remplira de zéro et effacera toutes les données du disque.

Autre inconvénient de dd, ça prend du temps! Comme il copie tout, cela prend même un temps fou. Trois quarts d’heure pour ma partition de 25GB sur mon (vieux) système.

Passons maintenant à la sauvegarde proprement dite. Je veux donc sauvegarder ma partition Vista se trouvant sur le disque sda1.

$ sudo dd if=/dev/sda1 bs=2048 conv=noerror,sync | pv | gzip -c > /media/disk/sda1_backup.gz

La commande pv permet d’avoir une indication de ce qui est déjà fait et de ce qui reste à faire. La commande gzip avec l’option -c envoie le résultat vers la sortie standard qui est redirigée vers un fichier sur le disque externe monté dans /media/disk.

Si par malheur un jour, vous devez restaurer la partition, il suffit de faire l’opération inverse:

$ gunzip -c /media/disk/sda1_backup.gz | pv | sudo dd of=/dev/sda1 bs=2048

Je vous l’ai dit, cette commande dd permet tout aussi bien de sauvegarder un disque en entier. Il suffit dans les commandes ci-dessus de remplacer /dev/sda1 par /dev/sda.
Pour installer pv qui ne l’est pas par défaut, tapez:

$ sudo aptitude install pv

La commande dd copie à l’identique. Il faut donc, lors de la restauration, que le disque ou la partition soit d’une taille suffisante pour recevoir l’image du disque ou de la partition qui a été sauvegardée.

Pour info, il existe une multitude d’outils permettant de sauvegarder ou de cloner une partition ou un disque dur autre que dd. Les plus connus sont PartImage et Clonezilla.

Comments

Comment from Yann
Time: 14 février 2010, 20 h 12 min

La lenteur de copie est du à l’option bs qui me semble un peu faiblarde. Pourquoi ne pas copier des tailles de block de au moins 1M ? ça devrais prendre nettement moins de temps 😉

Comment from admin
Time: 14 février 2010, 21 h 12 min

@Yann:
Et bien justement, j’ai essayé avec des blocs plus grands et comme je le dis dans le billet, au delà de 4096, le gain en vitesse est nul. Donc utiliser un bloc de 1MB n’aiderait, à mon avis, pas.

Comment from Domeee
Time: 28 février 2010, 20 h 19 min

Merci Michel, pour cet article très intéressant.
Justement, je viens d’installer eeebuntu 3 sur mon eee701 (quel changement par rapport au xandros dramatiquement plantogène et à la logithèque limitée et obsolète !) et je me posais la question d’une commande unix pour faire un back-up. Cet article tombe donc à pic !
J’ai une ou deux petites questions subsidiaires : avec ta commande, je peux donc sauvegrader les 4Go de mon 701 ?
Pour la destination, j’ai un disque 120 Go USB formatté en fat32 : es-ce que ça marche, ce format est-il compatible ?
D’après ce que j’ai compris, ça me créé une archive .gz d’environ 4Go sur mon disque 120Go : y’a pas une embrouille du style ça me formatte mon disque pour le mettre à l’identique de mon SSD de 701 ? => j’aurais les boules, j’ai 60Go de photos dessus… (je te rassure, j’ai des sauvegardes, mais quand même !)
Merci pour ton aide !

PS : jolie la photo du haut : Norvège ?

Comment from admin
Time: 28 février 2010, 21 h 15 min

@Domeee:
Oui, cela va créer un fichier de plus ou moins la taille de la partition source. Ce fichier, tu peux évidemment le sauvegarder où tu veux. Une partition fat32 convient mais attention à la taille du fichier. Si je ne me trompe pas, la taille maximum en fat32 est de 4GB. La sauvegarde ne reformate pas ton disque. Par contre quand tu fais une restauration, ton disque prend le format d’origine. Donc attention quand même quand tu fais la copie de ne pas te tromper :/
Pour ce qui est de la photo, je n’en suis pas l’auteur. Je ne sais pas où elle a été prise 🙁

Comment from Domeee
Time: 1 mars 2010, 21 h 59 min

Bonsoir !
Pour la limite de 4Go, ça doit passer, avec la norme commerciale du Go, on doit pas aller plus loin que 3.8 « vrais » Go avec les 4 « faux » Go annoncés pas asus.
Par contre, qu’entends-tu par :
« Par contre quand tu fais une restauration, ton disque prend le format d’origine. »
En fait, la question basique que je me pose, c’est : en quoi donc est formatté mon disque après l’installation de eeebuntu ? Je suppose que c’est pas du fat32… Mon backup risque donc de ne pas marcher si je le plante sur du fat32 ?
Dernier point et non des moindres : pour restaurer ton backup, tu tapes une ligne de commande. Ca veut dire que tu as un linux qui marche sur ta machine, non ? En clair, si mon eee est raide après un upgrade raté (j’ai eu…), comment je fais pour taper la commande de restauration avec un ordi sans sytème ?
J’ai fait jadis un backup avec eeebackup, il fabriquait une carte SD spéciale (un système minimal ?) pour pouvoir booter dessus avant de restaurer le backup qui était stocké sur un autre disque => j’ai pas testé la restauration, mais je suppose que ça marche même ordi archi planté.
Quid de ta solution ?

Comment from Michel Leunen
Time: 1 mars 2010, 23 h 07 min

@Domeee:
La sauvegarde se fait dans un fichier. Ce fichier, tu peux le mettre où tu veux. Peu importe la partition ou le type de partition sur laquelle tu le stockes.
Lors de la restauration, dd réécrit sur le disque les données qui se trouvaient sur celui-ci ou sur la partition telle qu’elle était au départ. Données + formatage. Si tu as sauvegardé une partition NTFS, la restauration donnera une partition NTFS. Même chose pour de l’ext3 ou du FAT32.
Pratiquement: tu fais une sauvegarde d’un disque entier ou d’une partition sur ce que tu veux. Un CD, un DVD, une clef USB ou un disque dur externe, peu importe puisque ce n’est qu’un fichier. Lors de la restauration, tu te sers de ce fichier sauvegardé pour recréer ton disque ou ta partition telle qu’à l’origine. Ce que tu peux faire bien sûr même si ton eeePC est archi-planté puisque dans ce cas il suffit d’utiliser un LiveCD ou un LiveUSB

Comment from Domeee
Time: 2 mars 2010, 14 h 46 min

Ok, j’avais pas pensé au live CD pour remettre tout dans l’état !
Merci beaucoup Michel pour tes explications, je vais pouvoir sauvegarder tout ça avant que ça ne lâche, maintenant que j’ai tout bien installé ma config aux petits oignons !

Comment from Dimitri
Time: 8 août 2012, 15 h 33 min

Bonjour,

Bel article, très clair.

Une seule erreur s’y est glissée: dans le 3e exemple de code, le paramètre « if=/dev/sda » référence tout le disque, alors que l’article parle de la 1ère partition, Vista.

Il faudrait juste corriger ce paramètre en « if=/dev/sda1 ».
La partition Vista est /dev/sda1, qui se trouve sur le disque /dev/sda.

Voili voilou.

Comment from Michel Leunen
Time: 19 août 2012, 11 h 19 min

@Dimitri
Bien vu et tout à fait exact. Je corrige tout de suite.

Comment from Sébastien
Time: 15 octobre 2012, 19 h 28 min

Bonjour,

Je voulais savoir lorsque je fais une restauration, sur le disque de destination, dois-je créer la partition ou bien laisser le disque sans partition et c’est pendant la restauration qu’il va me recréer ma partition avec les mêmes caractéristiques que la partition sauvegardée ?

De même puis-je sauvegarder une partition NTFS windows XP d’un disque dur classique et la restaurer dans une clé USB ?

D’avance merci de votre réponse.

D’avance merci

Comment from Michel Leunen
Time: 15 octobre 2012, 20 h 15 min

Ca dépend, si tu as sauvegardé tout un disque en spécifiant if=/dev/sda alors tu ne dois pas partitionner ton disque d’abord. Si tu as sauvegardé seulement une partition, sda1 par exemple, alors tu dois restaurer sur une partition qui est au moins aussi grande.
Tu peux restaurer ta partition Windows en NTFS sur une clef USB pour autant que ta clef ait au moins la même taille que ta partition Windows. Mais…ce n’est pas pour autant que tu pourras booter et démarrer ton Windows depuis ta clef USB.