Заставить dd не кешировать или не читать из кеша

22

Я работаю над встроенной системой с версией busybox dd. Я пытаюсь проверить удаление на диске с помощью какой-либо внешней утилиты, однако dd больше не читает с диска после стирания, но показывает мне кэшированные данные.

Я сузил его до dd, как когда я делаю начальный dd, просматриваю данные, перезагружаю систему, чтобы очистить кэш, стираю, а затем снова запускаю dd, он обнаружил все нули.

Однако, если я выполню dd на заводских настройках, сотру диск и снова выполню dd без перезапуска, он не покажет мне все нули до перезагрузки.

Я прочитал на man-странице GNU, что dd поддерживает iflag opt с флагом nocache, но busybox не поддерживает эту опцию, так что об этом не может быть и речи.

У меня вопрос, как я могу заставить dd снова читать с диска, а не из кеша?

пылкий
источник
2
Потенциальный придирки, но ... дд не кеширует его. Система ядра / диска делает. Вот почему работает команда Frostschutz (которая не отправляется на dd).
Хеннес
Мне нужно это, чтобы не дать машине проснуться, а не ждать, когда она раскрутится.
neverMind9

Ответы:

11

Вы могли бы попробовать

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

который сбрасывает все виды кешей.

Подробнее см. /usr/src/linux/Documentation/sysctl/vm.txtНа drop_caches.

(Примечание: речь шла о busybox dd, который до сих пор не поддерживается iflag=direct.)

frostschutz
источник
1
Просто примечание: это работает только с Linux. Кроме того, /procфайловая система отключена в некоторых встроенных конфигурациях Linux.
@EvanTeitelman Правильно, похоже, здесь все работает, так что я собираюсь поддержать и принять этот ответ.
горячо
2
Я задавался вопросом, имеет ли это разовый эффект, или продолжается. В соответствии с этим , эффект является разовым.
Крейг МакКуин
Это приведет к удалению кешей, но никак не повлияет на их потерю ddв процессе передачи большого объема данных.
Ян Худек
9

Основано на ответе @ sendmoreinfo:

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

Это не влияет на чтение-кеш.

Оле Танге
источник
Это работает, но не кэширует ли то, что читается?
neverMind9
1
Правильный. Это цель.
Оле Танге
8

Прямой ввод / вывод (открытый режим O_DIRECT) должен работать, но ваше ядро ​​и / или ddможет не поддерживать его.

sendmoreinfo
источник
4
Это правильный ответ: dd if = / dev / device iflag = direct bs = 1M; это не влияет на чтение-кеш.
Оле Танге
1
@OleTange: Почему бы вам не опубликовать это как собственный ответ? Это первое попадание в Google по запросу "dd no cache", и правильный правильный ответ - в комментарии к не принятому ответу ...
mic_e
5

Небольшой рост к iflag = прямой ответ; также предоставьте индикатор выполнения:

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

Без iflag / oflag pv сообщает, что он закончен, а затем выглядит как зависший; но дд к устройству все еще работает на кеш.

awltux
источник