Dados de limite de tubulação em bytes

1

Estou tentando fazer um 'caso avançado' de clonagem.

Existe um pipe escrevendo para um dispositivo de bloco, no final do qual há uma partição que não deve ser tocada. Eu sei onde esta partição começa. Neste caso eu quero sobrescrever a tabela de partições.

Por uma questão de simpilicty, o pipe começa com dd if=myfile .

dd if=myfile > /dev/sda

Eu poderia fazer algo como

dd if=myfile | dd bs=1B count=startofmypartition-~1000000 > /dev/sda

Mas há alguma maneira melhor de fazer isso e há alguma desvantagem nesse método?

pv tem uma opção de tamanho, mas afirma que é usado apenas para calcular o ETA, então não tenho certeza se isso funcionará: (do manpage:)

-s SIZE, --size SIZE Assume the total amount of data to be transferred is SIZE bytes when calculating percentages and ETAs. The same suffixes of "k", "m" etc can be used as with -L.

Eu sei que haverá mais operações de gravação, mas devem ser os mesmos dados no disco usando a mesma quantidade de espaço - contanto que não seja uma unidade de fita.

    
por rudib 11.09.2017 / 16:59

1 resposta

1

dd bs=1 é muito ineficiente, pois faz uma read() e uma write() de chamada de sistema por byte. Não faz muito sentido usar dd em um dispositivo de bloco (a menos que você queira usar sinalizadores especiais como conv=noerror,sync... para manipular erros ou deslocamentos)

Aqui você pode fazer:

offset=$(($(cat /sys/class/block/sda3/start) * 512)) &&
 pv -trabSs "$offset" < myfile > /dev/sda

(ou use head -c "$offset" se você não se importa com as informações de progresso).

pv e head escolherão o tamanho adequado do buffer para otimizar o desempenho.

(observe que, como você está gravando dados no início do disco, substituirá efetivamente a tabela de partições!).

Outra alternativa poderia ser criar um novo dispositivo de bloco que mapeie apenas as seções de /dev/sda que você deseja substituir

Como:

echo "0 $(cat /sys/class/block/sda3/start) linear /dev/sda 0" |
  dmsetup create writable_sda &&
cp myfile /dev/mapper/writable_sda
    
por 11.09.2017 / 18:41

Tags