22 votes

Pourquoi l'option sync est-elle utilisée avec la commande `dd` ?

En suivant les instructions sur este la page affichait un dd et une sync à la fin. La commande est la suivante :

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M sync

Je sais ce qui est dd et comment il fonctionne, mais je n'ai jamais entendu parler ou utilisé la sync avec lui et son entrée de page manuelle est comme :

sync   pad every input block with NULs to  ibs-size;  when  used  with
       block or unblock, pad with spaces rather than NULs

Qu'est-ce que NUL et pourquoi est-il rembourré à ibs-size et pourquoi s'embêter à rembourrer les blocs de données et à utiliser la fonction sync avec l'option dd commande ? Pourquoi ne pas le garder simple et facile ?

Quand j'essaie d'exécuter sync avec la commande telle qu'elle est avec l'emplacement et les valeurs appropriés, j'obtiens l'erreur suivante :

dd: unrecognized operand ‘sync’
Try 'dd --help' for more information.

30voto

muru Points 180007

Vous interprétez mal la commande. C'est :

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M 
sync

sync est une commande distincte, ici. Voir man 1 sync :

NAME
       sync - flush file system buffers

SYNOPSIS
       sync [OPTION]

DESCRIPTION
       Force changed blocks to disk, update the super block.

La raison de son utilisation est évidente quand on pense à la mise en cache.

Quant à la dd que vous lisez, il s'agit d'une valeur de le site conv option :

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

S'il était utilisé (ce qui n'est pas le cas), il serait utilisé ainsi :

dd ... conv=sync

5voto

Mark Plotnick Points 989

Dd lit les données un bloc à la fois (la taille du bloc est spécifiée par l'utilisateur). Dd peut éventuellement lire un bloc plus court que celui spécifié par l'utilisateur, soit à la fin du fichier, soit en raison des propriétés du périphérique source ; cela s'appelle un bloc d'erreur. enregistrement partiel . Par défaut, dd écrira ensuite un bloc de la même taille que celui qu'il a lu.

Dd va répéter cette opération jusqu'à ce que le nombre spécifié soit atteint, ou qu'il voit eof sur l'entrée, ou une erreur sur l'entrée ou la sortie. Quand il termine, dd rapporte le nombre d'enregistrements complets et partiels qu'il a lus et écrits.

Ce comportement convient parfaitement à la copie d'un fichier ordinaire dans un système de fichiers ou sur une connexion réseau TCP, car il est considéré comme un flux d'octets. Mais d'autres objets du système de fichiers, tels que les DVD bruts et les bandes magnétiques, nécessitent des tailles d'écriture comprises dans certaines fourchettes et représentant un multiple arrondi d'une certaine quantité (512 ou 2048 octets, par exemple). Par exemple, si vous avez une image de disque de 255 pistes de 63 secteurs de 512 octets et que vous souhaitez écrire sur une bande qui nécessite une taille de bloc de 1024 octets, vous devrez faire quelque chose comme suit

dd if=disk.img of=/dev/rmt0 bs=1k conv=sync

pour s'assurer que dd n'essaie pas d'écrire un bloc de 512 octets à la fin. Le bloc le plus court à la fin sera complété par des zéros ou des blancs. Le remplissage avec des zéros est un choix sûr et courant. L'option permettant à dd de compléter avec des blancs est utile dans une situation différente - convertir un fichier qui a des lignes de longueur variable en un fichier avec des lignes de longueur fixe.

0voto

Leslie Satenstein Points 131

J'ai découvert que le système linux, et non dd, met en cache les tampons. Par conséquent, quand la commande dd est terminée, je lance sync comme

sudo dd if=my.downloaded.iso of=/dev/sd(?) bs=1M && sync

Je n'ai pas utilisé d'option interne de dd pour provoquer le buffer flushing. En général, lorsque je crée une version USB d'une distribution, je suis le seul sur l'ordinateur, je n'ai donc aucun scrupule à ce que la commande que j'ai postée fasse du tort. Comme je lance la synchronisation en tant que &&, la synchronisation est effectuée avec les droits sudo et je suis sûr que l'USB que je crée est complète.

0voto

Rudolf Dovičín Points 117

Vous pouvez utiliser sync pour la sortie, qui est incluse dans dd comand, par oflag symbole :

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M oflag=sync

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X