Игнорировать сбойные сектора в файловой системе ext4 без форматирования?

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

Регулярные выражения не подходят для сравнения чисел, но если вы видите свои входные данные в виде двух:-разделенных столбцов, с ними будет проще справитьсяawk:

awk -F ':' '$2 >= 100 && $2 <= 199' <file

Это сравнит второе разделенное:-поле в данных со 100 и 199 и напечатает полную строку, если число находится в заданном диапазоне.

Это также возможно с grep,но не такой гибкий:

grep ':1[0-9][0-9]$' <file

Выражение [0-9]соответствует одному символу между 0и 9. $привязывает выражение к концу строки.

Если вы хотите сопоставить строки с номерами от 100 до 250, вы просто замените 199в коде awkна 250, но с регулярным выражением вам придется придумать

grep -E ':(1[0-9][0-9]|2[0-4][0-9]|250)$' <file

Здесь три части скобок соответствуют числам от 100 до 199, затем от 200 до 249 и, наконец, 250. (Я говорю «числа», но регулярные выражения всегда работают с строками).

0
11.01.2021, 17:19
2 ответа

Да, ваша файловая система ext4 может игнорировать их без форматирования.

Но если у вас нет действительно очень старого жесткого диска, у вас, вероятно, будет жесткий диск, который автоматически повторно -распределяет поврежденные сектора в «запасные» сектора при следующей записи, и все это прозрачно для ОС.

Таким образом, правильный способ состоит в том, чтобы получить список плохих блоков, попытаться прочитать каждый из них несколько раз на всякий случай, а затем записать обратно (или обнулить его, если вы не можете его прочитать; в этом случае вы также можете идентифицировать файл и посмотреть, не сможете ли вы восстановить его откуда-то ). Вы можете сделать это, например. с dd(, но дважды проверьте все, прежде чем нажимать return, легко делать глупости с ddи напрямую записывать на жесткие диски или разделы ).

Пока вы это делаете, также проверьте данные SMART вашего жесткого диска с помощью smartctl.

3
18.03.2021, 22:37

Вы можете запустить fsck.ext2с опцией -c,который запустит badblocks, создайте невидимый файл с блоками, которые не удалось прочитать, а затем убедитесь, что никакие два файла не используют одни и те же блоки. Если какой-либо из этих блоков используется другим файлом, это проявляется как конфликт, и вам предоставляются различные варианты восстановления, такие как попытка дублировать блоки или удаление файла.

Такой ремонт нельзя выполнить во время автоматического(-a)прогона, так как он включает разрушающую операцию. Если вы объедините -cи -a, проверка файловой системы может завершиться ошибкой, и я не уверен, правильно ли построен inode сбойных блоков в этом запуске (, так что вы должны быть в состоянии сделать интерактивное восстановление без повторного сканирования ).

Таким образом, эти блоки помечаются как выделенные и не используются.

2
18.03.2021, 22:37

Теги

Похожие вопросы