У меня неисправный диск на 3 ТБ. На нем много плохих блоков, но на нем все еще около 2,6 ТБ полезного пространства, и я хотел бы использовать его для хранения мусора (музыка, видео и т. д.) Сначала я наткнулся на руководство какого-то парня. Он разрезал диск на несколько разделов, а затем сделал JBOD (просто кучу дисков) RAID (если интересно, вот ссылка): https://habr.com/ru/post/252211). Но кто-то в комментариях к этой статье упомянул, что то же самое может сделать и сам mkfs с помощью ключа '-c'. И теперь мне интересно, как это работает? Да, есть man-страница, которая нам говорит:
-c Проверить устройство на наличие плохих блоков перед созданием файловой системы. Если эта опция указана дважды, то вместо быстрого теста только для чтения используется более медленный тест чтения-записи.
Есть статья на arch wiki, в которой говорится почти то же самое. Она проверяет устройство на наличие плохих блоков, и что дальше? Люди тут и там в Интернете говорят, что она помечает плохие блоки и ОС их не использует. Как это проверить? Есть ли какая-то утилита, которая показывает отмеченные блоки для дальнейшего использования (возможно, создания будущих разделов)?
решение1
Это правда man mkfs.ext4
( man 8 mke2fs
) говорит то, что вы процитировали:
-c
Проверьте устройство на наличие плохих блоков перед созданием файловой системы. Если эта опция указана дважды, то вместо быстрого теста только для чтения будет использоваться более медленный тест чтения-записи.
Но есть еще -l
:
-l filename
Прочитайте список плохих блоков из filename. Обратите внимание, что номера блоков в списке плохих блоков должны быть сгенерированы с использованием того же размера блока, который используетсяmke2fs
. В результате,-c
опция tomke2fs
является гораздо более простым и менее подверженным ошибкам методом проверки диска на наличие плохих блоков перед его форматированием, посколькуmke2fs
автоматически передаст программе правильные параметрыbadblocks
.
Итак, давайте разберемся man 8 badblocks
:
Важное примечание: Если вывод
badblocks
будет передан в программыe2fsck
илиmke2fs
, важно, чтобы размер блока был правильно указан, поскольку генерируемые номера блоков очень зависят от размера блока, используемого файловой системой. По этой причине пользователям настоятельно рекомендуется не запускатьbadblocks
напрямую, а использовать-c
опцию программe2fsck
иmke2fs
.
Там упоминается e2fsck
( fsck.ext4
в случае ext4), поэтому давайте проверим man 8 e2fsck
[выделено мной]:
-c
Эта опция заставляетe2fsck
программуbadblocks(8)
выполнять сканирование устройства в режиме «только чтение» с целью обнаружения поврежденных блоков.Если обнаружены какие-либо плохие блоки, они добавляются в индексный дескриптор плохих блоков, чтобы предотвратить их размещение в файле или каталоге.Если эта опция указана дважды, то сканирование плохих блоков будет выполнено с использованием неразрушающего теста чтения-записи.
И поскольку mke2fs
и e2fsck
являются частями одного и того же инструментария, яожидать -c
работать mke2fs
таким же образом, несмотря на то, что в его описании об этом прямо не говорится.
Затем для проверки плохих блоков файловая система знает об использовании dumpe2fs
. Из man 8 dumpe2fs
:
-b
распечатать блоки, зарезервированные как плохие в файловой системе.
(кредиты дляэтот ответ).
Обратите внимание, что именно файловая система хранит информацию. Чтобы использовать ее для будущих файловых систем, вам нужно сохранить ее до того, как вы уничтожите текущую. И если вы измените таблицу разделов или выберете другой размер блока для новой файловой системы, вам нужно будет пересчитать числа.