Как работает mkfs -c

Как работает mkfs -c

У меня неисправный диск на 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опция to mke2fsявляется гораздо более простым и менее подверженным ошибкам методом проверки диска на наличие плохих блоков перед его форматированием, поскольку 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
распечатать блоки, зарезервированные как плохие в файловой системе.

(кредиты дляэтот ответ).

Обратите внимание, что именно файловая система хранит информацию. Чтобы использовать ее для будущих файловых систем, вам нужно сохранить ее до того, как вы уничтожите текущую. И если вы измените таблицу разделов или выберете другой размер блока для новой файловой системы, вам нужно будет пересчитать числа.

Связанный контент