Примушуйте dd не кешувати чи не читати з кешу


22

Я працюю над вбудованою системою з версією ddbox в ddbox. Я намагаюся перевірити стирання на накопичувачі з якоїсь зовнішньої утиліти, однак DD після стирання знову не читає з диска, а показує мені кешовані дані.

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

Однак, якщо я виконаю dd на заводських налаштуваннях, стерти диск і виконати dd ще раз без перезавантаження, він не покаже мені всі нулі до перезавантаження.

На сторінці GNU я читав, що dd підтримує опцію iflag opt, з прапором nocache, але busybox не підтримує цей варіант, тому це не викликає сумніву.

Моє запитання - як я можу змусити ДД знову читати з диска, а не з кешу?


2
Потенційне запозичення, але ... дд не кешує це. Система ядра / диска робить. Ось чому команда Frostschutz (яка не надсилається до dd) працює.
Геннес

Мені це потрібно для того, щоб накопичувати привід замість того, щоб чекати, щоб закрутитися.
neverMind9

Відповіді:


11

Ви можете спробувати

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

який скидає всілякі схованки.

Детальніше дивіться /usr/src/linux/Documentation/sysctl/vm.txtдалі drop_caches.

(Примітка. Питання стосувалося зайнятого dd, який на сьогоднішній день все ще не підтримує iflag=direct.)


1
Лише зауваження: це працює лише з Linux. Також /procфайлова система відключена в деяких вбудованих конфігураціях Linux.

@EvanTeitelman Правильно, але, здається, працює тут, тому я збираюся підтримати цю відповідь.
гарячий

2
Мені було цікаво, чи це має разовий ефект, чи триває. Відповідно до цього ефект є одноразовим.
Крейг МакКуїн

Це призведе до відмови кешів, але нічого не робить, щоб не перешкодити ddїх переробці в процесі передачі великої кількості даних.
Ян Худек

9

На основі відповіді @ sendmoreinfo:

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

Це не впливає на кеш-читання.


Це працює, але чи не кешує те, що читається ?.
neverMind9

1
Правильно. Це і є мета.
Оле Танге

8

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


4
Це правильна відповідь: dd, якщо = / dev / device iflag = direct bs = 1M; це не впливає на кеш-читання.
Оле Танге

1
@OleTange: Чому тоді ви не опублікуєте це як власну відповідь? Це хіт №1 для google для "dd no cache", а фактична правильна відповідь - у коментарі до неприйнятої відповіді ...
mic_e

5

Невеликий розквіт до іфлагу = пряма відповідь; надайте також смугу прогресу:

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

Без iflag / oflag ПВ повідомляє, що він закінчений, а потім виглядає, що він повішений; але DD до пристрою все ще працює над кешем.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.