Comment maximiser la vitesse de clonage de disque via `dd`?

1

Je veux copier avec exactitude le disque entier de / dev / sda vers / dev / sdb. Je voudrais donc utiliser la ddcommande sous Linux, mais deux options me confondent, bset sync.

dd if = / dev / sda de = / dev / sdb bs = 4096 conv = notrunc, noerror, sync

  • Dois-je ajouter une syncoption comme suggéré par wiki.archlinux.org ?

  • Devrais-je définir bs=16384kBla taille du cache disque plutôt que le nombre le plus élevé pour optimiser la vitesse?

Kevin Dong
la source

Réponses:

2

Dois-je ajouter une option de synchronisation comme suggéré par wiki.archlinux.org?

Si vous voulez utiliser cette conv=noerroroption, vous feriez bien de l'utiliser conv=syncavec, ou vous pourriez vous retrouver avec une sauvegarde inutile.

Par la page de manuel Linux

Each CONV symbol may be: 
...
sync
    pad every input block with NULs to ibs-size; when used with block or unblock, pad with spaces rather than NULs 

Cette option pouvant ajouter du remplissage est nécessaire lorsque vous spécifiez également l' noerroroption "ou continuer après les erreurs de lecture". Le contrôleur de disque ne fournit aucune donnée de secteur pour le tampon d'entrée lorsqu'une erreur de lecture sévère (c'est-à-dire irrécupérable) se produit. Si dd s'est arrêté suite à une telle erreur (comme il le ferait normalement), le manque de données ne pose pas de problème.

Cependant, lorsque "continuer après les erreurs de lecture" est spécifié, le manque de données est alors un problème. Si la mémoire tampon d'entrée n'est pas complétée pour prendre en compte le ou les secteurs illisibles, les données écrites suivantes sont alors décalées par rapport aux secteurs appropriés dans lesquels elles doivent être écrites. Ou si les données suivantes sautées les secteurs de destination correspondant aux erreurs (ou fait un cherchent (dans dd le langage) à son secteur correspondant), puis les données de déchets dans les secteurs sautées-over seraient traités comme des copies des données originales.

Si vous utilisiez dd pour copier des blocs comportant un numéro de séquence intégral, le remplissage ne serait peut-être pas nécessaire pour détecter ou comptabiliser les blocs manquants. On ne peut pas présumer que les secteurs de disques bruts possèdent une telle numérotation de séquence intégrale et nécessitent un remplissage pour tenter de préserver l'intégrité du système de fichiers copié.

Notez qu'il existe deux syncoptions disponibles avec dd .
L'un est conv=syncet l'autre est iflag=sync. Ils ont des significations différentes.

Devrais-je définir bs = 16384 Ko comme taille du cache de disque plutôt que le nombre le plus élevé pour maximiser la vitesse?

Vous parlez de quel "grand nombre"?

Le bsparamètre, taille de bloc, n'a rien à voir avec la taille de la mémoire cache (bien que je ne sache pas exactement de quelle mémoire cache vous faites référence.)
16 Mo est probablement une capacité de traitement excessive, car il se peut même qu'il ne reste pas beaucoup de mémoire DMAable à verrouiller. . Il existe des tests de référence permettant de faire varier la taille des blocs, et ceux que j'ai vus, comme celui-ci , confirment mes soupçons selon lesquels la taille du retour diminue (ou du moins pas plus), ce qui semble être d'environ 512 Ko.

Une valeur classique pour la bscopie d’un disque dur était la taille de la piste en octets (ou num_of_sectors_per_track * 512 octets). Mais comme les disques durs modernes utilisent l’enregistrement de bits par zones et modifient la densité surfacique, il n’existe pas de "nombre de secteurs par piste" fixe (ou connu d'ailleurs). La spécification typique publiée de "63 secteurs par piste" sur les lecteurs modernes est simplement une commodité numérique.

sciure
la source
1

Ce n'est pas que dd ne fasse pas la tâche, mais vous pouvez envisager d'utiliser dd_rescue si elle est disponible. Il offre la possibilité de mieux gérer tous les secteurs corrompus et fournit un meilleur travail d’information sur l’état lors de la copie. La syntaxe est légèrement différente:

# dd_rescue [options] infile outfile
# using a 1M block size allows dd_rescue to adjust it's reads/writes to the limits of the OS buffer 

dd_rescue -b 1M /dev/sda /dev/sdb

#sample of the status
dd_rescue: (info): Using softbs=1048576, hardbs=4096
dd_rescue: (info): ipos:   1048576000.0k, opos:   1048576000.0k, xferd:   1048576000.0k
               errs:      0, errxfer:         0.0k, succxfer:   1048576.0k
         +curr.rate:  107936kB/s, avg.rate:  107268kB/s, avg.load: 98.6%
         >-----------------------------------------< 100%  ETA:  0:00:00

Vous constaterez peut-être qu'il est moins important d'augmenter la vitesse du clone que de savoir combien de temps dure le processus.

Sachez que les vitesses de transfert moyennes initiales peuvent être trompeuses, car les premiers 50 Go ou plus d'un lecteur de plateau rotatif sont jusqu'à 30% plus rapides que les autres. Il copie à partir des pistes physiquement plus courtes situées à l'intérieur du disque et ralentit à mesure que les pistes s'allongent. Vous ne verrez pas cela pour les SSD, bien sûr.

Dan L
la source
0

bssignifie que n b(octets) sont lus et écrits à chaque fois. Il représente la taille du bloc . bsn'affecte pas nécessairement la taille du bloc d'entrée ibs ni la taille du bloc de sortie obs .

syncindique au processus d'attendre que toutes les données aient été correctement écrites sur le disque avant de passer au bloc suivant . Il est généralement préférable d’assurer l’intégrité des données et d’éviter toute perte de données en cas de panne de courant (telle que le débranchement du lecteur juste après l’écriture des données), mais elle est plus lente .

Sans syncla copie, le processus est globalement plus rapide et le périphérique écrit peut-être plus tôt que pour syncactivé, mais vous remarquerez peut-être que, lorsque les informations ont été complètement copiées, le disque est peut-être en train d'écrire des informations depuis son cache sur le support réel. Cela est souvent utile pour les disques durs ou lorsque vous ne prévoyez pas de déconnecter le périphérique dès que la copie est terminée.

Tout simplement:

  • sync → attendez que les informations soient complètement écrites sur un support réel.
  • sans sync→ envoyer des informations. à l'appareil et laissez-le gérer l'écriture réelle.

Vous pouvez accélérer (un peu) le processus avec l' syncoption activée en utilisant une taille de bloc importante bs pour éviter un accès répétitif au disque entre de petites quantités de temps et ainsi ralentir le processus global.

J'ai toujours utilisé ddsans l' syncoption et je n'ai jamais rencontré de problèmes. Attendez que les informations soient entièrement écrites avant d'éjecter un périphérique.

arielnmz
la source
Merci. Pourriez-vous s'il vous plaît me dire quel numéro bs=est le meilleur pour IDE HDD? 10000k? 20000k? ou il serait préférable d’être un multiple de 512 (taille du secteur)?
Kevin Dong
Votre explication pour conv=sync(qui est dans la question) est incorrecte. Vous décrivez iflag=sync(ce qui n'est pas dans la question).
sciure de bois
@sawdust J'ai lu ces informations syncsur un article concernant l'utilisation de pseudo-analyses comparatives de disques durs ddet j'ai eu ce comportement en utilisant cette option. Mais je peux me tromper. Pourriez-vous préciser les différences entre eux?
arielnmz
@KevinDongNaiJia Et en ce qui concerne le bsje suggérerais d'utiliser la même taille que le cache du lecteur, mais 4Mc'est une bonne valeur, je suggérerais également de définir explicitement les tailles de bloc ibset obs; en tant que page de manuel pour les ddétats, l' bsoption ne définit pas nécessairement la taille du bloc d'entrée ni la taille du bloc de sortie .
arielnmz
1
@ KevinDongNaiJia si vous avez défini les deux ibset obsvous n'avez pas à spécifier bs. C'est ce que dit la page de manuel dd.
arielnmz