Вопрос или проблема
Я использую badblocks для разрушительного удаления всех данных на диске, используя следующую команду:
badblocks -wsp 0 /dev/sdb1
Я передал опцию -p 0
в надежде, что это приведет к выполнению только одного прохода, но я получаю несколько проходов:
Тестирование с шаблоном 0xaa: завершено
Чтение и сравнение: завершено
Тестирование с шаблоном 0x55: завершено
Чтение и сравнение: завершено
Тестирование с шаблоном 0xff: завершено
Чтение и сравнение: выполнено на 19.01%, прошло времени 7:43:47. (0/0/0 ошибок)
Из прочтения manpage, я вижу, что опция -w
сама по себе включает четыре прохода:
-w Использовать тест в режиме записи. С этой опцией badblocks сканирует на наличие поврежденных блоков, записывая несколько шаблонов (0xaa, 0x55, 0xff, 0x00) на каждый блок устройства, читая каждый блок и сравнивая содержимое. Эта опция не может быть объединена с опцией -n, так как они взаимно исключают друг друга.
Это избыточно для моих нужд. Есть ли способ провести один разрушительный проход?
Перечитав manpage, я решил проблему. -w
действительно выполняет один проход, как подразумевается в описании опции -p
:
По умолчанию 0, что означат, что badblocks завершится после первого прохода.
Проход состоит из четырех тестовых шаблонов:
-w Использовать тест в режиме записи. С этой опцией badblocks сканирует на наличие поврежденных блоков, записывая несколько шаблонов (0xaa, 0x55, 0xff, 0x00) на каждый блок устройства, читая каждый блок и сравнивая содержимое.
Шаблон можно переопределить, используя опцию -t
:
-t test_pattern Указать тестовый шаблон, который будет считан (и записан) в блоки диска. test_pattern может быть либо числовым значением между 0 и ULONG_MAX-1 включительно, либо словом “random”, что означает, что блок должен быть заполнен случайной битовой последовательностью. Для режимов записи/чтения (-w) и безразрушающего (-n) режимов можно указать один или более тестовых шаблонов, указав опцию -t для каждого необходимого тестового шаблона. Для режима только чтения может быть указан только один шаблон и он не может быть “random”. Тестирование только чтением предполагает, что указанный шаблон уже был записан на диск – если нет, то большое количество блоков не пройдет проверку. Если указано несколько шаблонов, то все блоки будут протестированы с одним шаблоном прежде, чем перейти к следующему шаблону.
Пример команды и вывода:
# badblocks -wsvt 0 /dev/sdz
Проверка на наличие поврежденных блоков в режиме чтения/записи
От блока 0 до 488386583
Тестирование с шаблоном 0x00: завершено
Чтение и сравнение: завершено
Проход завершен, плохие блоки не найдены. (0/0/0 ошибок)
Если цель состояла в уничтожении данных, а не в поиске ошибок, вы можете просто использовать
dd if=/dev/zero of=/dev/sdX status=progress
где X — это буква целевого устройства.
Но если вы действительно беспокоитесь о данных на вашем диске, вы можете запустить dd несколько раз, использовать другие инструменты, такие как wipe или shred, или просто позволить badblocks выполнять свою работу. Все зависит от времени, которое вы готовы потратить на удаление данных.
Я использовал программу дисков Ubuntu с Ubuntu 24.04, чтобы определить /dev/sda как имя диска для копирования. Кроме того, в программе Диски есть опция для просмотра параметров SMART, которая показала, что текущее количество ожидающих секторов равно 1.
Согласно справке по Дискам, казалось, что если все сектора успешно записаны на диск, это действие исправит количество текущих ожидающих секторов, либо переместив сектор, либо сбросив количество текущих ожидающих секторов, если все записи были успешными.
Поэтому я наивно запустил из командной строки в режиме суперпользователя (см. sudo -i):
dd if=/dev/zero of=/dev/sda bs=512 status=progress
Это продолжалось до тех пор, пока весь диск не заполнился нулями. Удивительно, но, несмотря на то, что весь диск был записан, текущее количество ожидающих секторов осталось неизменным и равно 1.
Поэтому я следую дальше по линии подхода badblocks в ответах здесь, за исключением использования разрушающего теста записи (да, после резервного копирования на другой диск). Это потому, что только запись на диск, как ожидается, может изменить текущее количество ожидающих секторов, если только с диском нет проблемы.
Я сейчас запускаю (в режиме суперпользователя):
badblocks -swv -b 512 -t 0 /dev/sda
Параметр s обновляет статус. Параметр w используется для выбора разрушающего теста записи. Параметр v выбирает подробный режим. Параметр -b 512 используется для установки размера записываемого блока в 512 байт. -t 0 устанавливает тестовый шаблон как нули, чтобы очистить диск. Наконец, параметр /dev/sda в конце — это имя диска, которое я могу получить из программы дисков Ubuntu, так как есть только два SSD-диска, один из которых загружает Ubuntu, а второй предназначен для тестирования.
Я надеюсь, таким образом, либо очистить SMART текущее количество ожидающих секторов с нулевой переаллокированными секторами SMART, либо перейти к другому SSD-диску, как моя стратегия решения проблемы. У меня есть много дисков для оценки, так что для меня не проблема, если я должен отказаться от одного, который не работает на 100%, необходимом для дальнейшего успеха. Мой опыт показывает, что поврежденные блоки могут быть проблематичными, поэтому я не включаю диски с такими блоками в следующую партию.
Я публикую этот ответ здесь, потому что другие ответы не рекомендуют четко, как использовать badblocks в режиме записи; ответ, рекомендующий записать только на /dev/sda1, записывает только в один раздел, а не на весь диск, и также dd может не удалить ошибку, как я проверил. На самом деле ранее запись dd не смогла решить проблему, возможно, потому что badblocks — лучший инструмент или же SSD-диск может быть плохим. Я надеюсь, что badblocks будет более успешным, но в любом случае у меня есть решение, которое кажется мне более осмысленным. Либо это сработает, либо нет. Если нет, я переходу к следующему. Если да, у меня есть полезный диск, на который я могу установить операционную систему без ожидания больших трудностей.
Ответ или решение
Использование утилиты badblocks для выполнения деструктивного тестирования диска — это эффективный способ не только проверки поверхностных ошибок, но и перезаписи всех данных на диске, что может служить для целей полной очистки данных перед утилизацией или передачей устройства. В вашем случае задача состоит в выполнении одного деструктивного прохода, что часто используется для быстрого стирания данных без необходимости многократного перезаписывания.
Теория
Для начала, важно понимать, что опция -w
в badblocks работает в режиме записи, при котором выполняются четыре стандартных шаблонных теста: 0xaa, 0x55, 0xff и 0x00. Эти тесты используют попеременное записывание и чтение блоков для определения их целостности, что делает несколько проходов естественной частью процесса.
Однако, для выполнения одного деструктивного прохода достаточно заменить эти четыре шаблона на один, который запишет на диск однотипный битовый шаблон на весь диск. Это достигается с помощью опции -t
, позволяющей задать кастомный шаблон. Таким образом, можно уменьшить количество проходов до одного.
Пример
Рассмотрим, как можно организовать процесс одноразовой деструктивной записи на диск:
sudo badblocks -wsvt 0 /dev/sda
Обозначения:
-w
— деструктивный тест записи (write-mode), который стирает все данные на выбранном устройстве.-s
— позволяет отображать статус выполнения команды в процессе работы.-v
— включает режим подробного вывода, предоставляющий детальную информацию о выполнении команды.-t 0
— устанавливает тестовый шаблон как 0x00, который запишется на каждый блок. Позволяет эффективно провести только один проход./dev/sda
— это устройство, на котором выполняется тест. Важно убедиться, что устройство выбрано корректно, чтобы избежать случайной потери нужных данных на других дисках.
Применение
Применение вышеуказанной команды позволит вам очистить диск, записывая на него нули, что подходит для многих сценариев, когда требуется быстрое и надежное удаление данных без углубленного поиска потенциальных ошибок на диске.
Кроме того, стоит отметить, что в некоторых случаях, особенно если ваша цель — надежное удаление данных, можно использовать инструменты вроде dd
или shred
. Однако badblocks
может оказаться более эффективным для выявления проблемных участков запоминающего устройства.
Пример использования dd
также для полного зануления диска:
sudo dd if=/dev/zero of=/dev/sda bs=512 status=progress
Здесь dd
поочередно записывает нули на все блоки диска с размером блока в 512 байт.
Заключение
Важно помнить, что после выполнения деструктивных операций с помощью badblocks или dd, все данные на целевом устройстве будут полностью удалены без возможности восстановления. Это делает такие операции идеальными для безопасного удаления конфиденциальной информации, но также требует уверенности в резервном копировании всех важных данных до их проведения.
Кроме того, если существуют проблемы с секторов, такие как высокий счетчик текущих ожидающих секторов (Current Pending Sector Count), выполнение операции деструктивного тестирования записи может или устранить, или подтвердить необходимость физической замены устройства. Это зависит от того, насколько хорошо диск справляется с записью на все его блоки.