Eu tenho um arquivo de loopback que contém um único sistema de arquivos, vamos chamá-lo de fs.image
. Eu tenho outro arquivo de loopback muito maior, que contém várias partições e vários sistemas de arquivos, vamos chamá-lo de disk.image
.
fs.image
é exatamente do mesmo tamanho que uma das partições em disk.image
. Gostaria de copiar os dados dele para o disk.image
arquivo no local correto.
Eu tenho um script que calcula o deslocamento adequado e tenta fazer isso com dd
. Presumi que isso funcionaria porque funciona com um dispositivo de bloco, mas não é o caso. disk.image
é truncado na posição imediatamente após os dados que acabaram de ser gravados nele.
Existe alguma maneira de evitar dd
truncar o arquivo?
fs.image
está compactado como fs.image.bz2
e o comando que estou executando é assim:
bzcat fs.image.bz2 | dd of=disk.image bs=4M seek=$OFFSET
onde $OFFSET
está meu deslocamento computado.
Pensei em outras maneiras de fazer isso, mas esta parece ser a mais simples (se funcionou). Uma opção seria copiar os dados até o ponto de inserção em outro arquivo, anexar o sistema de arquivos e, finalmente, anexar o restante do arquivo original. No entanto, isso seria lento porque eu copiaria muitos dados que realmente não preciso. Estou aberto a outras opções.
Responder1
GNU dd
(pelo menos versão 8.23) tem o seguintesinalizador de conversão
não truncado não trunque o arquivo de saída
que faz exatamente o que você deseja; aqui está um pequeno exemplo:
$ cat foo
foobar
$ echo -n XX | dd of=foo bs=1c seek=1 conv=notrunc
2+0 records in
2+0 records out
2 bytes (2 B) copied, 0.000283698 s, 7.0 kB/s
$ cat foo
fXXbar