Quelle est la différence entre «bs», «count» et «Seek» dans la commande dd?

24

J'ai lu de nombreux guides et messages du forum décrivant comment utiliser dd, mais une chose que j'ai remarqué est que les gens utilisent toujours des valeurs différentes pour les bs=, count=et les seek=commutateurs.

Veuillez expliquer à quelqu'un ce que ces commutateurs font exactement (la page de manuel n'est pas très détaillée) et expliquer quels sont les meilleurs paramètres pour eux pour différentes tâches, telles que la création de fichiers à partir de / dev / random ou / dev / zero, et l'écrasement partitions et disques externes.

Eric
la source
Essayez la documentation GNU pour dd ou la version POSIX .
jw013

Réponses:

27

Je ne sais vraiment pas comment expliquer cela mieux que la page de manuel.

bs=définit la taille de bloc, par exemple bs=1Mserait 1 Mo de taille de bloc.

count=copie uniquement ce nombre de blocs (par défaut, dd continue indéfiniment ou jusqu'à épuisement de l'entrée). Idéalement, les blocs sont de bs=taille mais il peut y avoir des lectures incomplètes, donc si vous utilisez count=pour copier une quantité spécifique de données ( count*bs), vous devez également fournir iflag=fullblock.

seek= recherche ce nombre de blocs dans la sortie, au lieu d'écrire au tout début du périphérique de sortie.

Ainsi, par exemple, cela copie la valeur de 1 y\nMo de la position de 8 Mo du fichier de sortie. La taille totale du fichier sera donc de 9 Mo.

$ yes | dd bs=1M count=1 seek=8 iflag=fullblock of=outputfile
$ ls -alh outputfile
9.0M Jun  3 21:02 outputfile
$ hexdump -C outputfile
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00800000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00900000

Puisque vous mentionnez /dev/randomet écrasez les partitions ... cela prendra une éternité car /dev/random(ainsi que /dev/urandom) est tout simplement trop lent. Vous pouvez simplement utiliser à la shred -v -n 1place, c'est rapide et généralement disponible partout.

frostschutz
la source
21

Ok, vous avez dit que les pages de manuel ne sont pas détaillées, donc je vais expliquer ce qu'elles signifient avec des métaphores faciles à comprendre à propos d'un gars en mouvement (cela s'appelle dd):

   bs=BYTES
          read and write up to BYTES bytes at a time

ddramasse quelque chose (boîtes, vases, lits, riz, etc.), déplacez-vous là où il doit être et déposez-le. Jusqu'à ce qu'il ne baisse pas la charge, il ne choisit rien d'autre. Maintenant, quand vous devez lui dire exactement combien d'objets il doit ramasser par voyage, c'est ce qu'il faut bsfaire. Vous définissez la quantité de données qu'il va lire et écrire. C'est presque obligatoire dans toutes les commandes utiles et courantes.

   count=N
          copy only N input blocks

Cela détermine le nombre total de boîtes qu'il déplacera. Les boîtes dans ce contexte sont les blocs sur le disque . Vous lui dites de déplacer 5 cases, il ne déplace que 5 cases même s'il y a plus de 5 cases (s'il y a moins de 5 cases, il prendra un vase qu'il a trouvé à côté des cases pour l'ajouter). Si vous dites ddà countseulement 5, et l' écrire quelque part, il copiait les 5 premiers blocs qu'il voit et les écrire où vous voulez.

   seek=N skip N obs-sized blocks at start of output

Le gars trouve normalement le premier endroit disponible pour déposer la charge, c'est normalement au début (du disque), et continue de se remplir jusqu'à la fin. Eh bien, avec cela, vous dites ddde commencer plus haut, par exemple, au lieu du hall, commencez dans l'une des pièces plus à l'intérieur. Il suffit de "sauter" les blocs de départ.

Maintenant, selon ce que vous faites, vous aurez besoin de différentes combinaisons en fonction de la source et de la destination, ainsi que du format dans lequel elles seront lues et écrites. Je vous recommande de les rechercher séparément.

Braiam
la source
"il va prendre un vase qu'il a trouvé à côté des boîtes pour l'ajouter". Que représente cette métaphore?
Ini
1
@Ini Que s'il y a un bloc adjacent qui n'appartient pas à if read, dd le lira et le déplacera aussi. Un vase n'est pas une boîte, mais dd le déplace.
Braiam