Qual é a diferença entre 'bs', 'count' e 'seek' no comando dd?

15

Eu li muitos guias e posts no fórum descrevendo como usar dd , mas uma coisa que eu notei é que as pessoas sempre usam valores diferentes para as opções bs= , count= e seek= . / p>

Por favor, alguém pode explicar o que essas opções fazem exatamente (a página man não é muito detalhada) e explicar quais são as melhores configurações para elas, como criar arquivos de / dev / random ou / dev / zero e sobrescrevendo partições e unidades externas.

    
por Eric 03.06.2014 / 20:37

2 respostas

21

Eu realmente não sei como explicar isso melhor do que a página de manual.

bs= define o tamanho do bloco, por exemplo, bs=1M seria blocos de tamanho de 1MiB.

count= copia apenas esse número de blocos (o padrão é que o dd continue sempre ou até que a entrada acabe). O ideal é que os blocos sejam de bs= size, mas pode haver leituras incompletas, portanto, se você usar count= para copiar uma quantidade específica de dados ( count*bs ), também deverá fornecer iflag=fullblock .

seek= procura esse número de blocos na saída, em vez de gravar no início do dispositivo de saída.

Portanto, por exemplo, isso copia 1 MiB de y\n para a posição 8 MiB do arquivo de saída. Então o tamanho total do arquivo será 9MiB.

$ 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

Como você mencionou /dev/random e sobrescreve as partições ... demorará uma eternidade, pois /dev/random (assim como /dev/urandom ) é muito lento. Você poderia usar apenas shred -v -n 1 , isso é rápido e geralmente está disponível em qualquer lugar.

    
por 03.06.2014 / 21:10
16

Ok, você disse que as man pages não são detalhadas, então vou explicar o que elas significam com metáforas fáceis de entender sobre um cara em movimento (o nome é dd ):

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

dd pega algo (caixas, vasos, camas, arroz, etc.), move-se onde precisa estar e solta-o. Até que ele não deixe cair a carga, ele não escolhe mais nada. Agora, quando você precisa dizer a ele exatamente quantos objetos ele deve escolher por viagem, é isso que o bs faz. Você define a quantidade de dados que ele lê e escreve. Isso é quase obrigatório em todos os comandos úteis e comuns.

   count=N
          copy only N input blocks

Isso determina a quantidade total de caixas que ele irá mover. As caixas neste contexto são os blocos no disco . Você diz a ele para mover 5 caixas, ele só move 5 caixas, mesmo se houver mais de 5 caixas (se houver menos de 5 caixas, ele levará um vaso que ele encontrou além das caixas para adicioná-lo). Se você disser dd a count apenas 5 e escrevê-lo em algum lugar, ele copiará os primeiros 5 blocos que ele vê e os gravará onde quiser.

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

O cara normalmente encontra o primeiro lugar disponível para largar a carga, isto é normalmente no início (do disco), e continua enchendo até o final. Bem, com isto você diz a dd para começar mais, diga em vez do salão, comece em uma das salas mais para dentro. Apenas "pula" os blocos iniciais.

Agora, dependendo do que você está fazendo, você precisará de diferentes combinações com base na origem e no destino, juntamente com o formato em que serão lidos e gravados. Eu recomendo que você procure por eles separados.

    
por 03.06.2014 / 21:41

Tags