Razões de segurança à parte, vamos fazê-lo. Nós podemos (ab) usar o GNU ddrescue
.
Para detectar setores de zeros --generate-mode
é útil.
When
ddrescue
is invoked with the--generate-mode
option it operates in "generate mode", which is different from the default "rescue mode". That is, if you use the--generate-mode
option,ddrescue
does not rescue anything. It only tries to generate amapfile
for later use.[…]
ddrescue
can in some cases generate an approximatemapfile
, frominfile
and the (partial) copy inoutfile
, that is almost as good as an exactmapfile
. It makes this by simply assuming that sectors containing all zeros were not rescued.[…]
ddrescue --generate-mode infile outfile mapfile
( fonte )
Vamos fingir que seu dispositivo é outfile
da execução anterior de ddrescue
. Não podemos usá-lo como infile
(porque ddrescue
se recusa a trabalhar quando infile
e outfile
são o mesmo arquivo), precisamos de um fictício, /dev/zero
serve. Devemos saber o tamanho do setor físico do seu dispositivo e usá-lo com a opção -b
. Este comando pode ajudar:
lsblk -o NAME,PHY-SeC /dev/FLASH
Aqui, assumo que é 512
.
ddrescue -b 512 --generate-mode /dev/zero /dev/FLASH flash.map
Agora, flash.map
descreve todos os setores como não experimentados ( ?
) ou como concluídos ( +
), dependendo de estar cheio de zeros ou não. O próximo passo é preencher setores diferentes de zero com zeros; --fill-mode
é perfeito para este trabalho:
When
ddrescue
is invoked with the--fill-mode
option it operates in "fill mode", which is different from the default "rescue mode". That is, if you use the--fill-mode
option,ddrescue
does not rescue anything. It only fills with data read frominfile
the blocks ofoutfile
whose status character frommapfile
coincides with one of the type characters specified as argument to the--fill-mode
option.
( fonte )
Devemos usar o mesmo valor de -b
que com --generate-mode
, adicionalmente --force
para substituir o dispositivo de saída. Este é o comando:
ddrescue -b 512 --force --fill-mode=+ /dev/zero /dev/FLASH flash.map
Desta vez /dev/zero
não é apenas um argumento fictício, é a fonte real de dados (zeros) gravados no dispositivo.
Após ddrescue
finises, invoque sync
. Agora /dev/FLASH
está preenchido com zeros.