QUESTION ORIGINALE:
Si j'ai 2 disques durs identiques avec les caractéristiques suivantes:
Combien de temps une copie dd complète doit-elle prendre?
Jusqu'à présent, cela fonctionne depuis 5 heures et continue toujours ...
J'utilise Linux Ubuntu 12.04 64bit et la commande que j'utilise est:
dd if=/dev/sdb of=/dev/sdc
MISE À JOUR: 1
Je peux maintenant voir la progression, et cela fait plus de 6 heures pour la copie 430 Go. Le disque dur est de 3 To ...
N'y a-t-il pas un moyen plus rapide de procéder?
MISE À JOUR: 2
Cela semble beaucoup mieux qu'auparavant (Merci à Groxxda pour les suggestions):
Sudo dd if=/dev/sdb bs=128K | pv -s 3000G | Sudo dd of=/dev/sdc bs=128K
ETA est d'environ 9 heures pour 3 To, alors qu'avant il atteignait 430 Go après 6 heures, je suppose que cela aurait pris environ 36 heures en utilisant la commande précédente.
dd
était utile dans le passé lorsque les gens utilisaient des bandes (lorsque la taille des blocs importait) et lorsque des outils plus simples tels que cat
n'étaient peut-être pas binaires.
Aujourd'hui, dd if=/dev/sdb of=/dev/sdc
est une manière d'écrire lente juste compliquée et sujette aux erreurs cat /dev/sdb >/dev/sdc
. Alors que dd
toujours utile pour certaines tâches relativement rares , il est beaucoup moins utile que le nombre de tutoriels le mentionnant vous le laisserait croire. Il n'y a pas de magie dans dd
, la magie est toute dans /dev/sdb
.
Votre nouvelle commande Sudo dd if=/dev/sdb bs=128K | pv -s 3000G | Sudo dd of=/dev/sdc bs=128K
est à nouveau inutilement lent et compliqué. Les données sont lues à 128 Ko à la fois (ce qui est mieux que la valeur par défaut dd
de 512 Go, mais pas aussi bonne que des valeurs encore plus grandes). Il passe ensuite par deux tuyaux avant d'être écrit.
Utilisez la commande cat
plus simple et plus rapide. (Dans certains benchmarks j'ai fait il y a quelques années sous Linux, cat
était plus rapide que cp
pour une copie entre différents disques, et cp
était plus rapide que dd
avec n'importe quelle taille de bloc; dd
avec une grande taille de bloc était légèrement plus rapide lors de la copie sur le même disque.)
cat /dev/sdb >/dev/sdc
Si vous souhaitez exécuter cette commande dans Sudo
, vous devez effectuer la redirection en tant que root:
Sudo sh -c 'cat /dev/sdb >/dev/sdc'
Si vous voulez un rapport de progression, puisque vous utilisez Linux, vous pouvez facilement en obtenir un en notant le PID du processus cat
(par exemple 1234) et en regardant la position de son descripteur de fichier d'entrée (ou de sortie) .
# cat /proc/1234/fdinfo/0
pos: 64155648
flags: 0100000
Si vous voulez un rapport de progression et que votre variante Unix ne fournit pas un moyen facile d'accéder à la position d'un descripteur de fichier, vous pouvez installer et utiliser pv
au lieu de cat
.
dd
utilise une très petite taille de bloc par défaut (512 octets). Cela se traduit par une surcharge (un read()
et write()
syscall pour 512 octets).
Cela va beaucoup plus vite lorsque vous utilisez une taille de bloc plus grande. Les vitesses optimales commencent à bs=64k
Ou plus. La plupart des gens utilisent un bs=1M
Encore plus grand pour qu'il devienne lisible par l'homme (quand dd
dit qu'il a copié 1234 blocks
, Vous savez que c'est 1234 MiB
Sans faire de calcul). Il est peu probable que l'utilisation de blocs encore plus grands entraîne des améliorations de la vitesse, mais une consommation de mémoire plus élevée.
La commande doit donc être:
dd bs=1M if=/dev/sdb of=/dev/sdc
Si vous avez déjà une exécution lente de dd
, vous pouvez l'interrompre et reprendre avec une instance de dd
plus rapide. Pour cela, il est important de savoir jusqu'où la copie a déjà progressé. dd
imprime généralement la progression lorsque vous l'annulez, ou vous pouvez lui envoyer le signal USR1
pendant son exécution pour lui faire imprimer sa progression.
kill -USR1 $(pidof dd)
Par exemple, s'il a copié plus de 1234MiB
, Vous pouvez reprendre à la position 1234MiB
En utilisant:
dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc
S'il a copié moins de 1234MiB
, Votre copie sera incomplète. S'il a copié plus de 1234MiB
, Il recopiera certaines parties déjà copiées, ce qui normalement ne fait aucun mal. Donc, en cas de doute, vous devez choisir une valeur légèrement inférieure à ce que vous pensez avoir déjà été copié.
Vous pouvez utiliser la commande kill
avec le signal approprié pour faire des statistiques de sortie dd
une erreur standard.
À partir de la page de manuel GNU dd:
Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid
18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
Assurez-vous de vérifier d'abord sur votre page de manuel le bon signal car il peut différer sur différentes implémentations dd: (BSD dd utilise SIGINFO).
bs=
argument. Jetez un oeil à ce fil sur le superutilisateur et essayez quelques valeurs par vous-même.dd
distinctes pour la lecture et l'écriture et utilisez un canal pour les connecter (dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M
).direct
.Il existe un logiciel commercial appelé HDClone . Il est autorisé à la fois comme un logiciel gratuit et commercial. L'une ou l'autre version peut créer une clé USB ou un DVD amorçable, ainsi que des disques de copie. Connectez les disques durs source et de destination et suivez les instructions basées sur l'interface graphique.
La version gratuite sera transférée à un débit d'environ 80 Mo/s, tandis que les versions payantes peuvent aller beaucoup plus vite. Pour les systèmes de fichiers NTFS et FAT, les versions payantes peuvent être configurées pour cloner uniquement les bits occupés du disque dur, ce qui augmente considérablement la vitesse de chaque clone.
Avez-vous essayé 'gparted'? Vous pouvez littéralement copier-coller une partition d'un lecteur à un autre et la redimensionner en conséquence si nécessaire. Vous obtenez le taux de transfert et le temps restant. Il utilise 'e2image' en dessous pour les partitions Linux.