web-dev-qa-db-fra.com

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

J'ai lu de nombreux guides et articles de forum décrivant comment utiliser dd, mais j'ai remarqué que les gens utilisent toujours des valeurs différentes pour bs=, count= et 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.

26
Eric

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

bs= définit la taille du bloc, par exemple bs=1M aurait une taille de bloc de 1 Mo.

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= afin de 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 une valeur de 1 Mo de y\n pour positionner 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/random et écraser les partitions ... cela prendra une éternité puisque /dev/random (aussi bien que /dev/urandom) est tout simplement trop lent. Vous pouvez simplement utiliser shred -v -n 1 au lieu de cela, c'est rapide et généralement disponible partout.

28
frostschutz

Ok, vous avez dit que les pages de manuel ne sont pas détaillées, donc je vais vous 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

dd ramasse quelque chose (boîtes, vases, lits, riz, etc.), déplacez-vous là où il faut 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 que bs fait. 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 à count seulement 5, et que vous l'écrivez quelque part, il copiera les 5 premiers blocs qu'il voit et les écrit 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 à dd de commencer plus haut, par exemple au lieu du couloir, commencez dans 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.

22
Braiam