J'ai besoin de copier un disque sur un autre. J'ai essayé avec la commande ci-dessous et il faut presque un jour pour copier 1 TB de disque dans federo.
dd if=/dev/sda of=/dev/sdb
J'ai essayé la même chose sur un système Unix (HP-UX) avec la commande ci-dessous et elle se termine en quelques heures
dd if=/dev/sda of=/dev/rdsk
Quelle est l'alternative que je pourrais utiliser pour copier d'un disque à un disque plus rapidement?
dd
a de nombreuses options (étranges), voir dd (1) .
Vous devez indiquer explicitement la taille du tampon, alors essayez
dd if=/dev/sda of=/dev/sdb bs=16M
IIRC, la taille de tampon par défaut n'est que de 512 octets. La commande ci-dessus la définit sur 16 mégaoctets. Vous pouvez essayer quelque chose de plus petit (par exemple bs=1M
) mais vous devez utiliser plus que la valeur par défaut (en particulier sur le matériel de disque récent avec des secteurs de 4 Ko, c'est-à-dire Advanced Format ). Je recommande naïvement une puissance de deux qui est au moins un mégaoctet.
Avec la taille de tampon de 512 octets par défaut, je suppose (mais je peux me tromper) que le matériel nécessite que le noyau transfère 4K pour chaque bloc de 512 octets .
Concernant rdsk
, les pages de manuel sd (4) disent:
Pour le moment, seuls les blocs de périphériques sont fournis. Les appareils bruts n'ont pas encore été implémentés.
L'augmentation de la taille du tampon de dd vous donnera plus de performances pour les opérations de lecture et d'écriture. Maintenant, tous les disques ont un tampon de lecture/écriture matériel. Mais si vous augmentez la taille du tampon de dd plus que le tampon matériel, ses performances diminueront car dd lira du premier disque au tampon lorsque le second disque aura tout écrit à partir de son propre tampon matériel. Vous devez définir l'option bs
de la commande dd à chaque fois une valeur différente pour différents périphériques.
Il y a des années dans Unix-land dd
était le moyen requis pour copier un périphérique bloc. Cela s'est poursuivi en tant que connaissance culte du fret même si (sur les systèmes Linux, au moins) cat
est presque toujours plus rapide que dd
.
Cependant, même dans l'histoire, une taille de bloc décente a contribué à réduire le nombre d'appels système (lents), étant donné que chaque appel système a déclenché une opération d'E/S. La taille de bloc par défaut est de 512 octets (un secteur de disque). La collecte de plusieurs blocs de disques en une seule lecture était - et est - également acceptable. Cet exemple utilise une taille de bloc de 32 Mo:
dd bs=$((512*2048*32)) if=/dev/source of=/dev/target
Sur les systèmes Linux actuels, cependant, les disques peuvent être copiés plus efficacement avec un simple cat
cat /dev/source >/dev/target
(Comme indiqué dans les commentaires sur votre question, pv
peut remplacer cat
et vous donnera une indication de la progression et du débit.)
Généralement, dd
peut être évité au profit de certaines alternatives. Il y a plusieurs bonnes raisons d'utiliser à la place GNU ddrescue
. Dans Ubuntu, vous pouvez l'installer avec:
Sudo apt-get install gddrescue
et simplement ddrescue
à utiliser. Notez que différemment du nom du package, l'exécutable pas a le g
initial.
Son utilisation est aussi simple que:
ddrescue inputFile outputFile logFile
Le fichier journal (nommé selon votre choix) vous permet de suspendre/arrêter et redémarrer, sans refaire le travail précédent, ce qui est utile lors de la création de gros clones ou de la récupération de disques. Par défaut, il affiche la progression, la vitesse de copie actuelle, la vitesse de copie moyenne et le nombre de blocs défectueux trouvés.
Il utilise des valeurs par défaut raisonnables pour la taille des blocs, donc la vitesse de copie est toujours aussi rapide que l'appareil peut gérer, du moins d'après mon expérience (j'ai cloné plusieurs centaines de disques avec lui, toutes tailles et types).
Souvent, les disques qui commencent à tomber en panne ont des problèmes de vitesse tels que des correctifs occasionnels de lenteur, de faible vitesse moyenne, de longues pauses soudaines (secteurs défectueux) ou des réinitialisations complètes (graves erreurs de surface). ddrescue
peut vous aider à identifier tout ce qui précède et à redémarrer votre clone (à condition que vous ayez spécifié un fichier journal) même si votre lecteur se réinitialise lui-même.
Très belle question. L'interface brute est implémentée sur certains systèmes Unix (tru64, hpux, solaris) mais pas sur linux. L'interface brute accélère le transfert car les E/S Unix sont ignorées. L'interface de bloc (/dev/dsk
ou /dev/disk
) est plus lent car il utilise le système d'E/S Unix. Pour accélérer dd
(gnu dd can) utilisez bs=30M
ou bs=20M
selon votre matériel. La réponse courte est: NON, elle n'est pas mise en œuvre, du moins pour autant que je sache. J'utilise linux depuis les temps anciens de la version 2.2 du noyau et je n'ai jamais vu rdsk
utilisé sous unix.