При монтировании/изменении размера раздела не удалось прочитать последний сектор?

Использование awkвместоgrep:

awk '/FOO/ { if (matching) printf("\n"); matching = 1 }
     /^$/  { if (matching) printf("\n"); matching = 0 }
     matching' file

Версия, которая перечисляет совпадения:

awk 'function flush_print_maybe() {
         if (matching) printf("Match %d\n%s\n\n", ++n, buf)
         buf = ""
     }
     /FOO/ { flush_print_maybe(); matching = 1 }
     /^$/  { flush_print_maybe(); matching = 0 }
     matching { buf = (buf == "" ? $0 : buf ORS $0) }
     END   { flush_print_maybe() }' file

Обе awkпрограммы используют очень простой «конечный автомат», чтобы определить, соответствует ли он в данный момент или нет. Совпадение шаблона FOOприведет к переходу в состояние matching, а совпадение шаблона^$(с пустой строкой )приведет к переходу в состояние, отличное от -matching.

Вывод пустых строк между совпадающими наборами данных происходит при переходах состояний изmatching(либо в matching, либо в не-matching).

Первая программа печатает любую строку в состоянии matching.

Вторая программа собирает строки в переменной buf, когда находится в состоянии matching. Он сбрасывает (очищает )это после возможной печати (в зависимости от состояния )вместе с меткой Match Nпри переходах между состояниями (, когда первая программа выводит пустую строку ).

Вывод этой последней программы на примере данных:

Match 1
this line contains FOO
this line is not blank

Match 2
This line also contains FOO

Match 3
This line contains FOO too
Not blank
Also not blank

Match 4
FOO!
Yet more random text

Match 5
FOO!
0
06.07.2020, 04:37
1 ответ

Анализ

ntfsfix -n /dev/sda5параметр nзаставит инструмент выводить решение для восстановления, не применяя его (будьте очень осторожны при использовании такого инструмента, поскольку автоматизированные инструменты восстановления могут выбрать неправильное решение для восстановления раздела)

ntfsresize -if /dev/sda5это скажет нам, что именно происходит...

Резервное копирование

В первую очередь, прежде чем что-либо делать, рекомендуется сделать полную резервную копию образа... в противном случае просто сделайте резервную копию таблицы разделов с помощью

sfdisk -d /dev/sda > sda.partition.table.txt

Пояснение

В данном конкретном случае Failed to read last sector (345345...)это означает, что раздел больше, чем указано в таблице разделов, это может произойти при изменении размера раздела (уменьшении )без сжатия файла -системы (ntfs здесь )... решение состоит в том, чтобы отменить изменение размера (в таблице разделов )... Обратите внимание, что ntfsfixможет угадать старое доброе значение и восстановить его , НО инструмент также может угадать неправильное значение и привести к потере части/всех ваших данных... если раздел можно смонтировать после ремонт, который не означает, что вы не потеряли данные, особенно когда chkdskисправляет много ошибок...

Решение

  • Сделайте резервную копию текущей таблицы разделов с помощьюsfdisk -d /dev/sda > sda.partition.table.txt

  • Failed to read last sector (345345...)указывают, что реальный конечный сектор раздела равен [start.sector]+[345345...], поэтому нам нужно рассчитать реальное расположение конечного сектора, добавив начальный сектор раздела и последний сектор, показанный в ошибке

  • Отредактируйте sda.partition.table.txt и замените конечный сектор новым рассчитанным... (для sda5)

  • Восстановите таблицу разделов с помощьюsfdisk /dev/sda < sda.partition.table.txt

0
18.03.2021, 23:21

Теги

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