web-dev-qa-db-fra.com

Copie DD complète du disque dur vers le disque dur

QUESTION ORIGINALE:

Si j'ai 2 disques durs identiques avec les caractéristiques suivantes:

  • SATA 6,0 Gb/s
  • 5400 tr/min
  • 3 To

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.

37
oshirowanen

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é.

7
frostschutz

Obtenir des statistiques sur le processus DD en cours

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).

Accélérer le processus

  1. Connectez chaque disque dur à son propre port SATA pour que les données puissent être lues d'un appareil et écrites sur l'autre en même temps.
  2. Utilisez une taille de bloc appropriée en utilisant le bs= argument. Jetez un oeil à ce fil sur le superutilisateur et essayez quelques valeurs par vous-même.
  3. Utilisez des invocations 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).
    Si vous faites cela et spécifiez une taille de bloc, assurez-vous d'utiliser la même taille de bloc à chaque appel.
  4. Vous pouvez essayer d'autres optimisations comme l'argument direct.
  5. Assurez-vous que vos disques durs ne sont pas montés ou cela peut entraîner une copie corrompue.
5
groxxda

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.

0
Gerold manders

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.

0
ioannis