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
ddrescueis invoked with the--generate-modeoption it operates in "generate mode", which is different from the default "rescue mode". That is, if you use the--generate-modeoption,ddrescuedoes not rescue anything. It only tries to generate amapfilefor later use.[…]
ddrescuecan in some cases generate an approximatemapfile, frominfileand 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
ddrescueis invoked with the--fill-modeoption it operates in "fill mode", which is different from the default "rescue mode". That is, if you use the--fill-modeoption,ddrescuedoes not rescue anything. It only fills with data read frominfilethe blocks ofoutfilewhose status character frommapfilecoincides with one of the type characters specified as argument to the--fill-modeoption.
( 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.