2

Мне нужно стереть жесткий диск, прежде чем отдать его, но я хочу иметь возможность делать это порциями, чтобы я мог остановиться и возобновить работу в различных точках в середине. Например, если для очистки диска потребуется 24 часа, а у меня есть блоки по 6-8 часов каждую ночь, я бы хотел подключить жесткий диск USB к ноутбуку, чтобы стереть его в течение ночи, отключить и забрать ноутбук в утром, а затем возобновить на следующую ночь, пока это не будет полностью сделано.

Я использую dd из терминала Linux, например

$ nohup dd if=/dev/zero of=/dev/sdX bs=1M &

Первоначально я думал просто следить за его ходом с помощью kill -USR1 ${ddpid} , отслеживать его, а затем возобновлять с того места, где остановился после прерываний. Я сразу не полюбил это, так как с первой попытки запутался в математике и потерял время на повторную очистку уже вытертой области.

Сейчас я рассматриваю возможность разбиения диска заранее, а затем стираю каждый раздел по одному или пару за раз. Поскольку это диск объемом 4 ТБ, я не смог преодолеть границу 2 ТБ с помощью fdisk , поэтому я использовал gdisk для создания новых разделов:

Device          Start        End   Sectors   Size Type
/dev/sdb1        2048  589826047 589824000 281.3G Linux filesystem
/dev/sdb2   589826048 1179650047 589824000 281.3G Linux filesystem
/dev/sdb3  1179650048 1769474047 589824000 281.3G Linux filesystem
/dev/sdb4  1769474048 2359298047 589824000 281.3G Linux filesystem
/dev/sdb5  2359298048 2949122047 589824000 281.3G Linux filesystem
/dev/sdb6  2949122048 3538946047 589824000 281.3G Linux filesystem
/dev/sdb7  3538946048 4128770047 589824000 281.3G Linux filesystem
/dev/sdb8  4128770048 4718594047 589824000 281.3G Linux filesystem
/dev/sdb9  4718594048 5308418047 589824000 281.3G Linux filesystem
/dev/sdb10 5308418048 5898242047 589824000 281.3G Linux filesystem
/dev/sdb11 5898242048 6488066047 589824000 281.3G Linux filesystem
/dev/sdb12 6488066048 7077890047 589824000 281.3G Linux filesystem
/dev/sdb13 7077890048 7667714047 589824000 281.3G Linux filesystem
/dev/sdb14 7667714048 7814037134 146323087  69.8G Linux filesystem

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

Когда я заканчиваю каждый раздел, я собираюсь вернуться в fdisk/gdisk и удалить раздел, даже если весь диск не стерт.

Как только я закончу со всеми разделами, я планирую также стереть начало диска:

$ dd if=/dev/zero of=/dev/sdX bs=1M count=512

(Я понимаю, что 512 - это немного излишне; пожалуйста, не стесняйтесь указывать лучший номер в комментариях.)

Достигнет ли это моей цели - вытереть диск полностью, по частям, не оставляя ни одного пропущенного пробела?

2 ответа2

1

Другой альтернативой решению @KamilMaiorowski может быть создание файловой системы в /dev /sdX, а затем запись в нее пустых файлов. Таким образом, вы можете остановить часть пути и продолжить по своему желанию, либо добавив файл или написав новый. Когда на диске не хватает места для других файлов, все готово. Вы также можете удалить файлы с диска, как только вы это сделали.

Для этого (с загрузочного диска)

mkfs.ext4 /dev/sdX
mkdir /tmp/tempdisk
mount /dev/sdX /tmp/tempdisk
dd if=/dev/zero of=/tmp/tempdisk/file0.zero
0

О начале диска. Первый раздел начинается в секторе 2048 . Секторы пронумерованы от 0 . Предоставленный вывод gdisk не указывает это явно, но я могу рассчитать, что ваш диск использует сектора размером 512B . Таким образом, перед первым разделом есть 2048 секторов по 512 байт. Эта команда заполнит их нулями:

dd if=/dev/zero of=/dev/sdX bs=512 count=2048

Достигнет ли это моей цели - вытереть диск полностью, по частям, не оставляя ни одного пропущенного пробела?

Я проанализировал цифры - между перегородками нет промежутков. Но! Схема GPT размещает резервную таблицу разделов в самом конце диска, она занимает 33 сектора. Кроме того, инструменты разбиения могут каким-либо образом выравнивать конец последнего раздела (хотя нечетное число 146323087 предполагает, что это не так). Таким образом, вы должны также покрыть это пространство за пределами последнего раздела:

dd if=/dev/zero of=/dev/sdX bs=512 seek=7814037135

Ожидайте, что эта команда достигнет конца диска почти сразу.

Дисковые операции используют кэш, поэтому после всего этого вы должны запустить sync . Обычно весь кэш очищается, когда вы корректно завершаете работу. Но если вы отключите диск (отключите USB) раньше, некоторые изменения могут быть потеряны. Будем надеяться, что вы никогда не отключались таким образом после очистки определенных разделов.

После этого весь ваш диск будет обнулен. Этого должно быть достаточно (прочитайте это и это). Если бы диск был SSD, это могло бы вызвать проблемы из-за выравнивания износа; но я думаю, что 4 ТБ здесь HDD, так что нет проблем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .