O redirecionamento de saída para um dispositivo de bloco sobrescreve bytes ou blocos inteiros?

2

Uma comentário em outra pergunta me fez pensar:

Supondo que eu redirecione a saída de um comando para um dispositivo de bloco, e o tamanho dessa saída é menor que o tamanho do bloco do dispositivo de bloco:

% blockdev --getbsz /dev/sda
4096

% head -c 100 /dev/zero > /dev/sda

Isso substituirá os primeiros 100 bytes de / dev / sda ou os primeiros 4096 bytes (isto é, um bloco completo)?
O comportamento depende do shell, das configurações de buffer de saída ou até mesmo do sabor * nix (que pode usar dispositivos de caractere em vez de dispositivos de bloco, como * BSD)?

    
por n.st 25.11.2018 / 19:12

2 respostas

1

Se você gravar em um dispositivo de bloco usando algum tamanho N menor que o tamanho de bloco subjacente, então esperaria que o SO (1) lesse um bloco inteiro do dispositivo, (2) atualize os primeiros N blocos (assumindo um deslocamento zero) com o que você está escrevendo, e (3) reescreva o bloco inteiro para o dispositivo. O resultado final seria que parece ter escrito os primeiros N bytes.

    
por 25.11.2018 / 21:59
0

De acordo com minha experiência com dd , pelo menos alguns softwares gravam apenas o número especificado de bytes (e não blocos completos). Por exemplo, é possível escrever na extremidade da cabeça de uma unidade para modificar o setor de inicialização do BIOS (MBR) e a tabela de partição.

Mas é possível que algum outro software seja feito para escrever blocos inteiros.

Sugiro que você teste como um determinado programa se comporta (ou peça ajuda para testá-lo).

    
por 25.11.2018 / 19:25