Опція dd команда bs в кінці диска


10

Якби я використовував ddкоманду наступним чином:

dd if=/dev/zero of=/dev/sdX bs=16M

Що відбувається в кінці диска, якщо він не є точним кратним 16M? Чи означає це, що остання частина диска не нульова?

Я помітив у https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ , він пише, що уряд США використовує

dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc

Чи є conv=notruncваріант способу забезпечити стирання кожного останнього байта?

dd 

Відповіді:


12

Вимивається весь пристрій виводу, чи є його розмір кратним розміру блоку, якому ви передаєте ddчи ні.

notruncПрапор не має ніякого ефекту , якщо вихідний файл пристрій, так як усічення файл пристрій не має ніякого ефекту. Якби вихід був звичайним файлом, це призвело б до того, що вихідний файл не обрізається перед записом, що в деяких файлових системах означає, що старі дані перезаписані (на відміну від запису нових блоків даних і залишення решти неприєднаними), однак це не буде корисним, оскільки ця властивість не гарантується всіма файловими системами, і, крім того, команда не тільки перезапише файл, але й продовжить писати, поки він не заповнить вихідний диск (або не виникне інша помилка).

Замість того, щоб використовувати ddі не турбуватися про те, чи правильно ви його використовуєте (як це буває, він працює в даному конкретному випадку, але це складно і іноді не працює ), просто використовуйтеcat .

cat /dev/zero >/dev/sdX

Незважаючи на поширену думку в Інтернеті, немає абсолютно ніякої магії в ddтому, що робить його якось краще придатним для запису на диск. Магія - у /devфайлах. Будь-який інструмент, який може впоратися з двійковими даними, як-от будь-який сучасний catабо head, може виконати ту саму роботу, що інакше, ddякщо ви не передаєте прапори, такі як seekабо skip.

Зверніть увагу , що загальна проблема ddі в catтому , що на успішну операцію, вони будуть помилки з «не залишилося на пристрої простору» (ENOSPC). Якщо ви помістите це в сценарій, вам потрібно буде або перевірити, чи помилка є ENOSPC, або скористатися іншим методом. Більш надійним методом є спочатку визначити розмір пристрою (наприклад, використовуючи /proc/partitionsпід Linux), а потім записати точно потрібну кількість байтів за допомогою такого інструмента, як head.

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX

8

Немає жодної проблеми - ddпише до самого кінця ( No space left on device), якщо у неї не вистачає вводу, обмежується count=xабо виникає інша помилка (наприклад, погані сектори, паршивий кабель тощо).

Якщо перезапис цілого блокового пристрою - ваша мета, shredце простіше у використанні.

shred -v -n 1 /dev/deleteme     # pseudorandom data
shred -v -n 0 -z /dev/deleteme  # zeroes

Або cryptsetupдля випадкових даних з кроком перевірки (нулі зашифровані до випадкових даних; випадкові дані розшифровуються назад до нулів).

Або blkdiscardдля SSD-дисків.

Або wipefsякщо мова йде лише про те, щоб почати з нуля, а не насильно позбавлятися від усього, що коли-небудь зберігалося на диску.

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