Force dd para não armazenar em cache ou não ler do cache

17

Estou trabalhando em um sistema embarcado com a versão busybox do dd. Eu estou tentando testar um apagamento para a unidade de algum utilitário externo, no entanto dd não lê o disco novamente após o apagamento, mas mostra-me os dados em cache.

Eu reduzi-o ao dd como quando eu faço um dd inicial, vejo os dados, reinicio o meu sistema para limpar o cache, apaguei e então corri o dd novamente ele veio com todos os zeros.

No entanto, se eu fizer dd nas configurações de fábrica, apague a unidade e faça o dd novamente sem reiniciar, não mostrarei todos os zeros até o reinício.

Eu li na página man do GNU que o dd suporta o iflag opt, com um flag nocache, mas o busybox não suporta essa opção, então isso está fora de questão.

A minha pergunta é como posso forçar o dd a ler a partir do disco novamente, e não a partir do cache?

    
por ardent 12.07.2013 / 21:58

4 respostas

10

Você poderia tentar

sync
echo 3 > /proc/sys/vm/drop_caches

que baixa todos os tipos de caches.

Para detalhes, consulte /usr/src/linux/Documentation/sysctl/vm.txt on drop_caches .

    
por 12.07.2013 / 22:21
8

O I / O direto (modo de abertura O_DIRECT ) deve funcionar, mas seu kernel e / ou dd podem não suportar.

    
por 13.07.2013 / 14:56
5

Baseado na resposta do @ sendmoreinfo:

dd if=/dev/device iflag=direct bs=1M

Não afeta o cache de leitura.

    
por 11.10.2017 / 23:31
0

Um pequeno floreio para o iflag = resposta direta; fornecer uma barra de progresso também:

dd iflag=direct if=~/source.iso | pv | dd oflag=direct of=/dev/sdb bs=8M

Sem o iflag / oflag, os relatórios pv terminaram e, em seguida, parece que está suspenso; mas o dd para o dispositivo ainda está trabalhando no cache.

    
por 10.10.2018 / 09:52

Tags