Por que o dd está lendo e gravando no mesmo disco?

5

Eu tenho usado o dd no Linux para sobrescrever um disco rígido externo USB.

Quando eu uso o tamanho de bloco padrão de 512 bytes, com este comando:

# dd if=/dev/zero of=/dev/sdb

em toda a operação, o disco rígido (/ dev / sdb) está sendo lido e gravado alternadamente, aproximadamente 1 GB de cada vez. Ou seja read 1GB ... write 1GB ... read 1GB ... write 1GB etc. Todos os dados são lidos a partir do disco rígido como está escrito.

Eu sei que isso está acontecendo porque está sendo mostrado no meu painel personalizado do Conky ( diskio_read , diskio_write ), que eu sei ser um indicador 100% confiável de atividade de E / S de disco.

Eu repeti isso usando um disco rígido externo diferente em um computador diferente. Isso acontece via USB 2.0 e USB 3.0.

Em contraste, quando eu faço a mesma coisa, mas uso um tamanho de bloco de 1 MB, com este comando:

# dd if=/dev/zero of=/dev/sdb bs=1M

Além de uma pequena quantidade de leitura no início, o disco rígido não é lido durante a operação.

Dado que este fenómeno aconteceu em dois computadores diferentes e em dois discos rígidos diferentes, usando uma distro padrão do Linux (Xubuntu 14.04), qualquer um que queira deveria presumivelmente conseguir replicá-lo no seu próprio computador.

Alguém por favor pode explicar o que está acontecendo aqui?

    
por EmmaV 03.12.2015 / 18:08

2 respostas

5

Se você especificar um tamanho de bloco (512 bytes) menor que o tamanho de bloco do disco (geralmente 4096 bytes, mas hoje em dia talvez mais), o bloco será parcialmente gravado, de forma que o conteúdo do restante do bloco deve ser preservado antes de escrever.

Isso ocorre porque os blocos de disco não podem ser gravados com apenas 512 bytes, mas você precisa escrever um bloco inteiro de uma só vez (4096 ou maior). Quando você escreve essa quantidade (4096) ou mais, não há gravação parcial, então ela não precisa ler.

    
por 03.12.2015 / 18:58
0

Este é basicamente um sintoma de E / S armazenada em buffer em um sistema Linux. Uma boa visão geral disso em relação ao comando dd está localizada em Existe uma maneira de determinar o valor ideal para o parâmetro bs para dd? que suporta a resposta do ctrl-d. No entanto, isso também sugere que tamanhos de bloco ainda maiores (ou seja, maiores que 1M) podem melhorar ainda mais o desempenho.

    
por 03.12.2015 / 19:37