Рейтинг:8

Как перезаписать очень большой жесткий диск (18 ТБ) случайными данными с помощью команд оболочки в Linux

флаг cn

Я хотел бы перезаписать очень большой жесткий диск (18 ТБ) случайными байтами, чтобы затем проверить смарт-данные на наличие перераспределенных секторов или других ошибок.

Поскольку у badblocks есть некоторые ограничения на количество блоков, с которыми он будет работать за один запуск, я попробовал «метод cryptsetup», описанный в вики archlinux:

https://wiki.archlinux.org/title/Badblocks#Finding_bad_sectors

Я установил зашифрованное поле логического устройства на весь диск, а затем использовал команду «shred», чтобы записать нули в открытое поле устройства:

cryptsetup открыть поле /dev/device --type plain --cipher aes-xts-plain64
клочок -v -n 0 -z /dev/mapper/field

Он продолжал печатать такие строки, как

шред: /dev/mapper/eld: пройти 1/1 (000000)...870МиБ/17ТиБ 0%
шред: /dev/mapper/eld: пройти 1/1 (000000)...1,7ГиБ/17ТиБ 0%
...
шред: /dev/mapper/eld: пройти 1/1 (000000)...4.1TiB/17TiB 24%

но потом он остановился на написанном 4.1TiB/17TiB. Я проверил это с помощью шестнадцатеричного дампа, нули не записывались за адресом байта 0x428249b0000 (4570459340800 ~ 4,156 ТиБ):

hexdump -C --skip 0x428249a0000 /dev/mapper/eld | главный
428249a0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
428249b0000 b3 cd d0 34 72 15 f2 2c f6 32 90 fb 69 24 1f ec |...4r..,.2..i$..|
428249b0010 a0 f4 88 a5 56 e7 13 82 94 e5 e0 f5 37 da c3 59 |....V.......7..Y|
428249b0020 9b 55 9f d8 39 a1 41 dc 52 ca 7b 3a 95 f5 59 e2 |.U..9.A.R.{:..Y.|

Многие стандартные команды, по-видимому, имеют проблемы с дисками большой емкости, потому что задействованные числа слишком велики для 32-битных типов данных.Какие инструменты чтения/записи в Linux могут надежно читать/писать за пределами этих воображаемых границ 2TiB, 4TiB?

флаг in
4 ТБ — это физический предел MBR. Вы создали таблицу разделов MBR вместо GPT и настроили один раздел?
флаг cn
Это новый диск без разделов. Я не думаю, что MBR или разделы имеют значение, я хочу перезаписать весь диск, поэтому данные MBR или GPT не должны сохраняться.
marcelm avatar
флаг ng
_"но потом он остановился на 4.1TiB/17TiB написано."_ - Как это остановилось? Нет больше прогресса? `shred` только что вышел чисто? Любое сообщение об ошибке? Было ли что-нибудь в системных журналах в это время? Продолжая вопрос Джеральда, означает ли это, что `/dev/device` в ваших командах был полным диском, а не разделом?
флаг cn
@marcelm Shred продолжал работать, но после строки 4.1TiB больше не выводился. Никаких сообщений об ошибках на экране или в системном журнале. Путь /dev/device относится ко всему жесткому диску SATA.
Рейтинг:12
флаг us

Изменить: обновлено в соответствии с комментарием

я бы просто использовал

dd if=/dev/urandom of=/dev/sdX bs=1M status=progress iflag=fullblock oflag=fullblock

Здесь /dev/sdX это устройство для жесткого диска.

флаг cn
Это не кажется надежным, потому что чтение из urandom может завершиться ошибкой в ​​середине блока, и тогда dd запишет меньше, чем полный блок данных. Есть способ исправить это с помощью iflag=fullblock oflag=fullblock, см. https://unix.stackexchange.com/a/121888/90056.
флаг jm
Хотя перезапись случайными данными кажется разумной, использование `/dev/zero` в качестве входных данных должно работать против любых, кроме самых решительных злоумышленников.
Remember Monica avatar
флаг ru
Кроме того, /dev/urandom работает очень медленно. Использование чего-то вроде openssl rc4 для генерации псевдослучайных данных, вероятно, намного ближе к скорости ввода-вывода при более низком процессоре. Или /dev/zero, чего должно хватить. Или действительно такой инструмент, как шред.
joshudson avatar
флаг cn
@ JánLalinský: Что-то изменилось, потому что я использовал это примерно в 2000 году и ни разу не наблюдал частичную блокировку от urandom?
peterh avatar
флаг pk
@joshudson Я, редко, да. Действительно редко и всегда были какие-то проблемные обстоятельства. Я думал, что это было вызвано ими, хотя мне иногда приходилось запускать dd, чтобы понять, что происходит.
ilkkachu avatar
флаг us
@ JánLalinský, это не имеет значения: если `dd` читает неполный блок, он также записывает неполный блок. Все это означает, что после этого записанные блоки будут не выровнены, но ОС все равно выполняет буферизацию в `/dev/sdX`. Это имеет большее значение с `count=NN`, так как AFAIK неполные блоки будут включены в подсчет.
ilkkachu avatar
флаг us
Однако `urandom` работает/был медленным, по крайней мере, когда я последний раз тестировал. Я думаю, что алгоритм, который он использовал, был изменен (на ChaCha20 или что-то подобное?) В какой-то момент, так что теперь он может быть быстрее. Я думаю, что в какой-то момент я использовал что-то вроде `openssl enc -aes-128-ctr -nosalt -pass file:/dev/urandom ...`.
Peter Cordes avatar
флаг ke
Почему такое большое `бс`? Меньший размер блока, такой как 128 КБ (примерно половина размера кэша L2), с большей вероятностью лучше перекрывает ввод-вывод с затратами ЦП на «чтение» на «случайном» устройстве. Но, как сказали многие комментаторы, более быстрый источник случайности — это *очень* хорошая идея. На моем i7-6700k Skylake с частотой 3,9 ГГц, Linux 5.12.15-arch1-1, `pv /dev/null` показывает 55,6 МБ/с. Таким образом, в зависимости от скорости жесткого диска, от половины до четверти скорости диска, процесс записи 18 ТБ занимает в два-четыре раза больше времени.
Peter Cordes avatar
флаг ke
Предположительно, вы захотите использовать CSPRNG, если вы собираетесь вообще писать случайность вместо нулей, но в целом, если вам нужен молниеносно быстрый источник случайности на машине x86, см. [Какой самый быстрый способ сгенерировать Текстовый файл объемом 1 ГБ, содержащий случайные цифры?] (https://unix.stackexchange.com/a/324520) - мой ответ можно легко изменить, чтобы просто сохранить необработанные результаты xorshift128+ из векторов SSE2 или AVX2 в выходной буфер вместо обработка в ASCII цифры + пробелы. Одно ядро ​​по-прежнему должно работать близко к скорости memcpy, намного быстрее, чем любой жесткий диск.
marcelm avatar
флаг ng
[`dd` обычно бесполезен](https://unix.stackexchange.com/questions/12532/dd-vs-cat-is-dd-still-relevant-these-days) (да, существуют исключения), это, вероятно, медленнее из-за субоптимальных размеров блока (и да, `1M` неоптимально), и это [потенциально опасно] (https://unix.stackexchange.com/questions/17295/when-is-dd-suitable- для копирования данных или при частичном чтении и записи). _Не используйте `dd`._ Просто используйте `cat` или `pv`, если вам нужен индикатор прогресса. Эти инструменты намного проще, быстрее и не имеют подводных камней.
Zac67 avatar
флаг ru
Требование случайных данных для предотвращения восстановления данных на уровне носителя [является мифом] (https://security.stackexchange.com/questions/10464/why-is-writing-zeros-or-random-data-over-a-hard -драйв-многократно-лучше-й) или, по крайней мере, сильно устарел. Просто используйте `/dev/zero`.
Рейтинг:1
флаг cn

Вместо cryptsetup + shred я использовал cryptsetup + pv (cat тоже должен работать вместо pv, но он не будет давать никакой информации о прогрессе) и указал stdin на /dev/zero:

cryptsetup открыть поле /dev/device --type plain --cipher aes-xts-plain64
</dev/zero pv >/dev/mapper/eld

Это имеет то преимущество (по сравнению с dd), что не нужно указывать неясные аргументы, а производительность по каналу SATA 3.3 6 Гбит / с хорошая (> 200 МБ / с).

pv по-прежнему давал сбой, когда был достигнут конец, но я проверил, тем не менее, он перезаписал все логическое устройство нулями. Это означает, что dm-crypt перезаписал весь жесткий диск псевдослучайными байтами.

Теперь ошибки жесткого диска можно проверить как минимум двумя способами:

1. Поиск испорченных данных SMART (например, перераспределенных секторов) в выходных данных

smartctl -a /dev/устройство

2. Чтение данных из /dev/mapper/eld и проверка того, что все прочитанные байты имеют нулевое значение. Запуск команды cmp из diffutils для сравнения:

cmp -l -b /dev/zero /dev/mapper/field

Он либо напечатает байтовый адрес первого несоответствия и выйдет с ошибкой, либо не найдет никакого несоответствия, а затем напечатает «cmp EOF on /dev/mapper/eld…» (и все равно выйдет с ошибкой).

Несоответствие означает, что либо на жестком диске произошел постоянный сбой записи в этой позиции, либо это может быть случайная ошибка, которая не будет повторяться точно в той же позиции.

При первом запуске cmp я действительно получил ошибку уже через 8 секунд, чему очень удивился. Данные SMART не показали каких-либо ухудшений, а системный журнал не выявил никаких сообщений об ошибках, связанных с жестким диском.

Затем я попытался снова запустить команду cmp, чтобы проверить, реальна ли ошибка записи, но несоответствие в этой позиции больше не возникало. Это была какая-то случайная ошибка во всем процессе чтения + оценки. Так что не полагайтесь на один запуск команды cmp; в случае обнаружения несоответствия запустите его снова. Если ошибка исчезнет, ​​то проигнорируйте первое несоответствие или попробуйте еще раз. Если ошибка не устранена, верните жесткий диск продавцу, так как он, скорее всего, неисправен и его деградация во времени может происходить быстрее по сравнению с исправным жестким диском.

.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.