Como escrever digamos primeiro n bytes de um arquivo binário em um setor específico de HDD usando o Linux dd?

0

Eu tenho uma máquina virtual VMWare Windows 10 & Eu iniciei no Live Linux Mint.

Eu só quero escrever primeiro n bytes de um arquivo binário para um setor específico no HDD usando o dd no Linux. Para este propósito eu adicionei um disco rígido virtual de 500MB no Windows e formatado como NTFS.

O comando que estou usando é

sudo  dd of=/dev/sdb if=/media/mint/<mount>/Temp/mbr.img bs=11 seek=1000 count=1

Aqui / dev / sdb é o HD de 500 MB (não é uma partição nele)

/ media / mint / (mount) /Temp/mbr.img é o arquivo binário. Acabei de largar o MBR por exemplo.

bs = 11 Espero que isso seja para os 11 bytes

seek = 1000 Espero que isso vá para o 1000º setor (512 bytes por default do setor)

O comando é concluído com sucesso.

No entanto, quando de dentro do Windows 10 Hex Workshop, eu verifico o conteúdo do setor 999,1000 & 1001 (não estou muito certo de que seek = 1000 resolve) eles estão em branco. Nada é escrito nele a partir do mbr.img.

Quando pesquiso dados de amostra dos primeiros 11 Bytes no disco rígido, não os encontro em nenhum lugar.

No Hex Workshop eu estou aderindo a números decimais para pular para um setor.

Alguém pode me ajudar a solucionar mais qual é o erro / problema aqui?

    
por rajeev 24.09.2018 / 13:44

2 respostas

2

Em man 1 dd :

bs=BYTES
read and write BYTES bytes at a time (also see ibs=,obs=)

ibs=BYTES
read BYTES bytes at a time (default: 512)

obs=BYTES
write BYTES bytes at a time (default: 512)

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

Ao usar bs=11 , você afeta ibs e obs . seek=1000 usa obs . Você espera pular 1000 setores de saída, mas em vez disso, você pula 1000 pedaços de saída, 11 bytes cada.

Parece que você queria algo como

sudo dd if=/path/to/mbr.img ibs=11 count=1 of=/dev/sdb obs=512 seek=1000 
    
por 24.09.2018 / 13:55
0

Se você definir o tamanho do bloco bs para 11 e, em seguida, procurar por 1000 blocos, terá ignorado 1000 * 11 = 11000 bytes em vez de 1000 * 512 = 512000 bytes para 1.000 setores . Então, obviamente, isso não pode funcionar, e você agora mudou alguma outra parte do seu disco rígido, que pode voltar a te morder (então pense em uma maneira de desfazer essa mudança).

Eu sei que você pode usar dd para escrever arquivos com precisão de bytes, então em um arquivo você pode fazer algo como

dd ... bs=1 count=11 seek=512000

No entanto, não tenho certeza se você pode escrever uma parte de um bloco em /dev/sdb . Se você não pode, uma maneira é copiar esse bloco em particular com algo como

dd if=/dev/sdb of=/tmp/myblock bs=512 skip=1000 count=1

edite o arquivo /tmp/myblock ou use dd para fazer alterações de precisão de byte conforme explicado acima (mas sem o seek , é claro, porque o arquivo consiste apenas no bloco que você deseja alterar) e, finalmente, escreva o bloco de volta com

dd of=/dev/sdb if=/tmp/myblock bs=512 seek=1000 count=1
    
por 24.09.2018 / 14:25