Qual è la differenza tra 'bs', 'count' e 'seek' nel comando dd?


24

Ho letto molte guide e messaggi del forum che descrivono come usare dd, ma una cosa che ho notato è che le persone utilizzano sempre valori diversi per il bs=, count=e seek=gli interruttori.

Qualcuno può spiegare cosa fanno esattamente questi switch (la pagina man non è molto dettagliata) e spiegare quali sono le migliori impostazioni per loro per diverse attività, come la creazione di file da / dev / random o / dev / zero e la sovrascrittura partizioni e unità esterne.


Risposte:


27

Davvero non so come spiegarlo meglio della pagina man.

bs=imposta la dimensione del blocco, ad esempio bs=1Msarebbe 1MiB di dimensione del blocco.

count=copia solo questo numero di blocchi (il valore predefinito è che dd continui per sempre o fino a quando l'input si esaurisce). Idealmente i blocchi hanno bs=dimensioni, ma potrebbero esserci letture incomplete, quindi se si utilizza count=per copiare una specifica quantità di dati ( count*bs), è necessario fornire anche iflag=fullblock.

seek= cerca questo numero di blocchi nell'output, anziché scrivere all'inizio del dispositivo di output.

Quindi, per esempio, questo copia 1MiB di y\nposizione per 8MiB del file di output. Quindi la dimensione totale del file sarà di 9 MiB.

$ 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

Dal momento che menzioni /dev/randome sovrascrivi le partizioni ... ci vorrà un'eternità poiché /dev/random(così come /dev/urandom) è troppo lento. Puoi semplicemente usare shred -v -n 1invece, è veloce e di solito disponibile ovunque.


21

Ok, hai detto che le pagine man non sono dettagliate, quindi spiegherò cosa significano con metafore di facile comprensione su un ragazzo in movimento (si chiama dd):

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

ddraccoglie qualcosa (scatole, vasi, letti, riso, ecc.), sposta dove deve essere e lascialo cadere. Fino a quando non lascia cadere il carico, non sceglie nient'altro. Ora, quando devi dirgli esattamente quanti oggetti dovrebbe scegliere per ogni viaggio, questo è ciò che bsfa. È possibile impostare la quantità di dati che leggerà e scriverà. Questo è quasi obbligatorio in tutti i comandi utili e comuni.

   count=N
          copy only N input blocks

Ciò determina la quantità totale di scatole che sposta. Le caselle in questo contesto sono i blocchi sul disco . Gli dici di spostare 5 scatole, sposta solo 5 scatole anche se ci sono più di 5 scatole (se ci sono meno di 5 scatole, prenderà un vaso che ha trovato oltre alle scatole per aggiungerlo). Se dite dda countsolo 5, e scrivere da qualche parte, si sarebbe copiare i primi 5 blocchi che vede e scrivere loro dove si desidera.

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

Il ragazzo di solito trova il primo posto disponibile per eliminare il carico, questo è normalmente all'inizio (del disco) e continua a riempirsi fino alla fine. Bene, con questo dici dddi ricominciare da capo, ad esempio invece della sala, inizia in una delle stanze più all'interno. Basta "saltare" i blocchi di partenza.

Ora, a seconda di ciò che stai facendo, avrai bisogno di diverse combinazioni in base alla fonte e alla destinazione, insieme al formato in cui verranno lette e scritte. Ti consiglio di cercarli separati.


"prenderà un vaso che ha trovato oltre alle scatole per aggiungerlo". Cosa significa questa metafora?
Ini,

1
@Ini Che se c'è un blocco adiacente che non appartiene a if read, dd lo leggerà e lo sposta anche. Un vaso non è una scatola, ma lo sposta.
Braiam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.