Скажем, вы хотите обнулить неисправный жесткий диск. Вы хотите перезаписать как можно больше с нулями. То, что вы не хотите, это: процесс прерывается при первой ошибке записи. Как это сделать?
AFAICS, plain dd
предоставляет только возможность игнорировать ошибки чтения. Таким образом, что-то вроде
dd if=/dev/zero of=/dev/disk/by-id/lousy-vendor-123 bs=128k
недостаточно.
ddrescue
Кажется, лучше игнорировать ошибки - но какова будет оптимальная командная строка с ним?
Моя попытка с GNU ddrescue:
ddrescue --verbose --force --no-split /dev/zero /dev/disk/by-id/lousy-vendor-123
dd conv=noerror
может быть расширение GNU, я не уверен. В любом случае, это должно сработать. Тем не менее, ответ SATA «скажи приводу стирать сам» стоит того, чтобы стереть целые диски.dd
документов GNUnoerror
как «продолжить после ошибок чтения» ...dd conv=noerror
это стандарт POSIX, но он может быть очень медленнымdd conv=noerror
должно быть для ошибок чтения (согласно man-странице), а не для записи ошибок. Нет ничего плохого в том, чтобы объединить этоconv=notrunc
, что помогло мне игнорировать ошибки записи. unix.stackexchange.com/a/229379/4319dd if=/dev/zero of=/dev/sdX
, не будет выполнять чтение с диска. Почему вы думаете , что дд команда «не хватает» ? Какие "ошибки" вы испытываете?Ответы:
Я предпочитаю
badblocks
в режиме деструктивной записи для этого. Он пишет, что продолжает делать это, когда сталкивается с ошибками, и, наконец, сообщает вам, где были эти ошибки, и эта информация может помочь вам решить, что делать дальше (Будет ли смесь?).И черный список:
А что осталось на диске потом:
Обратите внимание, что это не случайные данные - шаблон повторяется, поэтому, если вы пропустите,
1MiB
вы снова увидите тот же результат.Он также попытается проверить, прочитав данные обратно, поэтому, если у вас есть диск, который утверждает, что пишет успешно, но возвращает неправильные данные при обратном чтении, он найдет и эти ошибки. (Убедитесь, что никакие другие процессы не записывают на диск во время работы badblocks, чтобы избежать ложных срабатываний.)
Конечно, с сильно поврежденным диском это может занять слишком много времени: нет кода, который позволил бы полностью пропустить дефектные области. Единственный способ добиться этого
badblocks
- использовать гораздо больший размер блока.Я не уверен, что
ddrescue
делает это лучше; он должен делать это в другом направлении (восстанавливать как можно больше данных). Вы можете сделать это вручную для dd / ddrescue / badblocks, указав первый / последний блок ...источник
-t random
или ...-t 0
блокирует ошибку, тогда просто сделать один проход записи? Глядя на-t
справочную страницу - кажется, что без нее обходится 4 прохода (для «0xaa, 0x55, 0xff, 0x00»).-t
вы предоставляете в командной строке. По умолчанию 4 прохода, как вы говорите.Если диск не подключен через USB, рассмотрите возможность использования
hdparm
(версия> 9.31) для безопасного стирания диска ATA . Эта команда приводит к тому, что микропрограмма привода стирает содержимое диска, включая поврежденные блоки.Предупреждение: используйте правильную букву диска - я показал
/dev/sdX
в качестве примера - не просто скопируйте / вставьте.Во-первых, убедитесь, что он понимает команды ATA (большинство дисков, выпущенных в последнее десятилетие или более, должны):
Последние две строки извлечения показывают, что оно поддерживается.
Поэтому добавьте пароль к диску (очевидно, это необходимо):
и стереть:
Более подробная информация об этой процедуре доступна здесь .
источник
/dev/sdX
это хорошо, потому что тогда, если кто-то пропустит его появление при вставке и настройке, проблем не будет.Я вижу четыре подходящих ответа здесь:
hdparm
Метод отправленный garethTheRed , вероятно , лучше всего, если вы подключены непосредственно к компьютеру. Очевидно, однако, если вы попробуете подключить его через USB, вы можете кирпич вашего диска. Если вы делаете это для диска, который вы собираетесь утилизировать, то это может быть хорошо. Тем не менее, вы, вероятно, хотите обезопасить себя перед удалением.Техника, о которой сообщил imz-Ivan Zakharyaschev, будет работать, но может быть очень медленной. Я бы посоветовал, если вы не хотите, чтобы данные можно было восстановить, используйте
/dev/urandom
вместо/dev/zero
; например,Я бы посоветовал против следующего. Для чего-то более быстрого, что делает то же самое, используйте технику, о которой сообщает maxschlepzig (в вопросе):
Это будет быстрее, чем
dd
команда, но не так быстро, какhdparm
команда. Смотрите ниже, почему я не рекомендую это ...Команда
badblocks
также будет работать, но вы не можете рандомизировать данные таким образом, и снова она будет очень медленной.Наконец, я был бы упущен, если бы не указал причину номер один, по которой люди хотят полностью стереть диск - они собираются его утилизировать. В этом случае, если вы этого еще не сделали, вы можете сначала попытаться восстановить диск. Если вы читаете блок и он возвращает ошибку ввода-вывода, то в следующий раз, когда вы записываете в тот же блок, диск попытается перераспределить другой блок из резервного списка. Как только резервный список заполнится, вы получите ошибки ввода-вывода при записи. Именно тогда вы действительно должны отказаться от диска.
Таким образом, вы можете сделать что-то простое, как:
И затем, чтобы переписать плохие блоки, просто что-то вроде:
Если эта команда работает, если вы смелы, вы можете переформатировать свой диск и использовать его снова.
Кроме того, вы можете запустить
badblocks
команду на диске дважды. Второй раз он должен сообщать о плохих блоках ...Это займет больше времени, но более надежно.
Стоит также отметить, что ни один из методов на самом деле не делает безопасного удаления, кроме
hdparm
команды. Помните все эти плохие блоки? У них все еще есть некоторые ваши исходные данные в основном нетронутыми. Эксперт по восстановлению данных может получить доступ к ним, чтобы увидеть небольшое количество того, что ранее было на вашем жестком диске.Что касается ddrescue и почему я против этого, у меня есть следующее противоядие:
Проблема в том, что ddrescure будет СЛИШКОМ хорошо игнорировать ошибки. У меня был жесткий диск, который в соответствии с dd снизил скорость записи на отметке около 102 ГБ и начал выдавать ошибки записи на отметке 238 ГБ. Я был весьма впечатлен тем, что ddrescue продолжал перетаскивать диск с постоянной скоростью, даже не сообщая об ошибках. 17 часов спустя, когда это было на 1300 ГБ, когда я случайно заметил, что индикатор диска сам перестал мигать. Быстрая проверка показала, что весь USB-корпус отключился. Я вытащил диск из колыбели. Я заметил, что ddrescue просто радостно сообщил, что все еще копирует без ошибок, даже с диском в моих руках. Я подключил диск к другой машине и обнаружил, что теперь это кирпич.
Я не виню ddcue в том, что сделал диск кирпичом. Диск отказывал и стал кирпичом. Я просто обнаружил, что тревожный ddrescue даже не подсчитывает, сколько ошибок записи он игнорирует. При таком использовании ddrescue заставляет вас думать, что он был полностью успешным, независимо от всех ошибок записи. Дело в том, что он не должен был продолжать движение на полной скорости в секции с замедлением. Причина, по которой раздел был медленным, заключается в том, что многие блоки были перемещены диском, что вызвало большое количество запросов при доступе к этому разделу. Так что это, вероятно, тот момент, когда вывод ddrescue стал вымышленным.
источник
вероятно, добился цели для меня.
Упомянутый
должно быть для ошибок чтения (согласно man-странице). В этом нет ничего плохого.
Моя полная команда обнуления диска выглядела так:
Добавление обычая
bs=
также может потребоваться в некоторых случаях.источник
Быстрый и зрелый метод заключается в использовании
sdd
.Если вы просто хотите уничтожить весь контент, позвоните:
sdd -inull bs=1m of=/dev/rdsk/cXdXtXp0 -noerror
Всегда используйте «сырой» интерфейс драйвера диска.
Если вам нравится восстанавливать диск и хранить как можно больше старого содержимого, позвоните:
sdd if=/dev/rdsk/cXdXtXp0 of=/dev/rdsk/cXdXtXp0 bs=1m -noerror
Это заменит все нечитаемые блоки нулями на уровне 512 байт. Вы можете изменить количество повторов с помощью
try=#
, по умолчанию 2.Обратите внимание, что
sdd
это быстрее, чемdd
в случае ошибок, поскольку он сначала пытается прочитать с предоставленным размером блока, а в случае ошибок он читает с 512 байтами. Если есть ошибки чтения, sdd делает случайные поиски, а фиктивные считывают, чтобы успокоить прошивку накопителя.Расширенные функции восстановления после ошибок были разработаны в 1980-х годах, когда я работал для второго по величине OEM-производителя Sun-Microsystems.
Исходный код Sdd включен в инструменты schily:
http://sourceforge.net/projects/schilytools/files/
источник