J'ai fait une demi-heure de lecture pour me préparer à cloner mon disque dur. Il a plusieurs partitions, dont une partition Windows. Je vais acheter un très gros disque dur externe pour la sauvegarde. J'aimerais pouvoir utiliser ce clone pour restaurer l'intégralité du disque en cas de problème (je suis sur le point de faire un remaniement du système d'exploitation). Je veux apprendre à le faire en utilisant dd, car j'aime les outils de bas niveau qui ne nécessitent rien d'installation.
J'ai trouvé le code utile suivant sur les forums ubuntu (entré à partir d'un shell racine à l'aide d'un CD live):
dd if=/dev/hda of=/dev/hdb & pid=$!
while kill -USR1 $pid; do sleep 1; done
(Je sais que je devrai modifier les emplacements d'entrée et de sortie.) Cependant, j'ai deux questions. La première est très noobie: cette commande est répartie sur deux lignes. Sûrement, lorsque j'appuierai sur Entrée après le point d'exclamation, cela lancera le processus?
Deuxièmement, sur d'autres sites, il a recommandé de saisir la taille du bloc. Comme ça:
# dd if=/dev/hda conv=sync,noerror bs=64K of=/mnt/sda1/hda.img
Je ne connais rien à la taille des blocs. 64K a-t-il raison? Il semble que ma taille de bloc soit de 512 octets à partir de ce qui suit, la sortie de sudo fdisk -ul:
Disk /dev/sda: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xc3ffc3ff
Device Boot Start End Blocks Id System
/dev/sda1 * 63 143364059 71681998+ 7 HPFS/NTFS/exFAT
Partition 1 does not start on physical sector boundary.
/dev/sda2 976867328 1465147391 244140032 7 HPFS/NTFS/exFAT
/dev/sda3 143364094 976867327 416751617 5 Extended
Partition 3 does not start on physical sector boundary.
/dev/sda5 143364096 162895871 9765888 82 Linux swap / Solaris
/dev/sda6 162897920 205864959 21483520 83 Linux
/dev/sda7 205867008 976867327 385500160 83 Linux
Partition table entries are not in disk order
Disk /dev/mapper/cryptswap1: 10.0 GB, 10000269312 bytes
255 heads, 63 sectors/track, 1215 cylinders, total 19531776 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x433bb3a7
Disk /dev/mapper/cryptswap1 doesn't contain a valid partition table
Je vous remercie.
dd if=/dev/hda of=hdb
? Voici une réponse qui montre quelques détails, y compris le temps d'exécution pour 160 Go: askubuntu.com/questions/435694/…dd
inclut un commutateur de progression comme mentionné iciRéponses:
Le progrès
La commande que vous avez répertoriée
est un joli bi-liner pour suivre la progression de
dd
façon régulière. J'en utilise aussi un très similaire. Cela semble bon. Je l'ai trouvé ici peut-être?Blocksizes avec
dd
: alignement et performanceVous pouvez ajouter une taille de bloc dans laquelle les opérations ont lieu. Peu importe la taille de bloc du périphérique de bloc sous-jacent pour que l'opération se déroule aussi bien, mais pour des raisons de performances, vous pouvez choisir celui qui convient à vos besoins.
Tout d'abord, il y a la chose d'alignement . Dans le cas où votre périphérique de bloc fonctionne comme 512 Ko (comme le font les lecteurs flash), il serait très malheureux de fonctionner
dd
avecbs=512
(octets) car cela entraînera 1024 écritures (!) Pour chaque bloc du point de vue du périphérique. En pratique, ce ne sera pas si grave que les écritures sont mises en mémoire tampon et prises en une seule fois, mais pendant les synchronisations, cela peut encore amplifier le nombre d'écritures.Tenez également compte de la surcharge d'utilisation du processeur lorsque vous traitez une très grande quantité de petites opérations. Il est juste plus efficace de prendre des mégaoctets à la fois lors de la copie de grandes quantités de données.
Ma meilleure pratique est de commencer avec 1 Mo car c'est un bon multiple de la plupart des configurations, y compris les tailles de bande RAID, les tailles d'étendue LVM, etc. Sur mon ordinateur portable avec SSD, j'ai tendance à voir une légère amélioration en utilisant 10 Mo comme taille de bloc, alors que je ne le vois plus sur mon disque dur physique.
Dernier bloc
Ne vous inquiétez pas si la taille du lecteur / volume n'est pas un multiple de la taille du bloc. Le dernier bloc
dd
copié sera ajusté pour correspondre au dernier bit de données qu'il contient. Vous pouvez voir si le dernier bloc avait une taille différente en regardant la sortie.Les
+0
moyens qu'il était une correspondance exacte, un+1
moyen qu'il était pas. Pas grave.Voir également
la source
# dd if=/dev/hda conv=sync,noerror bs=1MB of=/mnt/sda1/hda.img & pid=$!
while kill -USR1 $pid; do sleep 1; done
bs=1M
comme c'est une puissance de 2, plutôt que d'bs=1MB
être une puissance de 10. Mais lancez juste quelques repères sur votre système si vous pouvez voir ce qui est le meilleur.kill -USR1 $pid
dd a maintenant un rapport d'avancement disponible en ajoutant lestatus=progress
commutateurComme d'autres l'ont dit, il n'y a pas de taille de bloc universellement correcte; ce qui est optimal pour une situation ou une pièce de matériel peut être terriblement inefficace pour une autre. En outre, en fonction de la santé des disques, il peut être préférable d'utiliser une taille de bloc différente de celle qui est "optimale".
Une chose qui est assez fiable sur le matériel moderne est que la taille de bloc par défaut de 512 octets a tendance à être presque un ordre de grandeur plus lente qu'une alternative plus optimale. En cas de doute, j'ai trouvé que 64K est un défaut moderne assez solide. Bien que 64 Ko ne soit généralement pas LA taille de bloc optimale, d'après mon expérience, il a tendance à être beaucoup plus efficace que la valeur par défaut. 64K a également une histoire assez solide d'être performant de manière fiable: vous pouvez trouver un message dans la liste de diffusion Eug-Lug , vers 2002, recommandant une taille de bloc de 64K.
Pour déterminer LA taille de bloc de sortie optimale, j'ai écrit le script suivant qui teste l'écriture d'un fichier de test de 128M avec dd à une plage de tailles de bloc différentes, de la valeur par défaut de 512 octets à un maximum de 64M. Soyez averti, ce script utilise dd en interne, alors utilisez-le avec prudence.
dd_obs_test.sh
:Voir sur GitHub
J'ai seulement testé ce script sur un système Debian (Ubuntu) et sur OSX Yosemite, donc il faudra probablement quelques ajustements pour faire fonctionner les autres versions d'Unix.
Par défaut, la commande crée un fichier de test nommé
dd_obs_testfile
dans le répertoire courant. Vous pouvez également fournir un chemin d'accès à un fichier de test personnalisé en fournissant un chemin d'accès après le nom du script:La sortie du script est une liste des tailles de blocs testées et leurs taux de transfert respectifs comme suit:
(Remarque: L'unité des taux de transfert variera selon le système d'exploitation)
Pour tester la taille optimale du bloc de lecture, vous pouvez utiliser plus ou moins le même processus, mais au lieu de lire
/dev/zero
et d'écrire sur le disque, vous devez lire à partir du disque et écrire/dev/null
. Un script pour ce faire pourrait ressembler à ceci:dd_ibs_test.sh
:Voir sur GitHub
Une différence importante dans ce cas est que le fichier de test est un fichier écrit par le script. Ne pointez pas cette commande sur un fichier existant ou le fichier existant sera écrasé avec des données aléatoires!
Pour mon matériel particulier, j'ai trouvé que 128K était la taille de bloc d'entrée la plus optimale sur un disque dur et 32K était la plus optimale sur un SSD.
Bien que cette réponse couvre la plupart de mes conclusions, j'ai dû déterminer une taille de bloc dd optimale suffisamment de fois pour écrire un blog à ce sujet. Vous pouvez trouver plus de détails sur les tests que j'ai effectués là-bas.
Ce post StackOverflow peut également être utile: dd: Comment calculer la taille de bloc optimale?
la source