Структура файловой системы, описанная выше в терминах i-узлов, блоков, косвенных блоков и суперблока, может быть нарушена и требовать восстановления. Например, при разрушении информации в трижды косвенном блоке могут появиться следующие проблемы:
- некоторый блок может быть вне системы, т.е. не являться частью файла и не быть в списке свободных блоков;
- могут появиться дубли i-узлов, т.е. описывать один и тот же файл дважды;
- некоторый блок может одновременно быть частью файла и быть в списке свободных блоков;
- некоторый файл может существовать, не будучи включенным ни в один каталог.
К счастью, структура файловой системы обладает некоторой избыточностью, позволяющей восстанавливать отдельные поломки.
Вот некоторые виды избыточности:
- блок данных, являющийся каталогом, содержит имена файлов и номера i-узлов; где-то есть i-узел, соответствующий этому каталогу, и этот i-узел должен быть каталогом, а не обычным файлом;
- блок, включенный в список свободных блоков, теоретически не может быть частью какого-либо файла; для проверки этого достаточно сканировать все i-узлы для просмотра всех блоков, занятых файлами, и сканировать список свободных блоков;
- аналогично, блок, принадлежащий файлу, должен принадлежать только одному файлу; это легко проверить.
Эти и другие виды избыточности использует программа проверки файловой системы, запускаемая командой fsck (file system check)
Из примера видно, что fsck выполняется в несколько фаз.
На этих фазах производится следующая работа:
- проверка целостности i-узлов (счетчик связи, тип и формат i-узла);
- проверка каталогов, указывающих на i-узлы, содержащие ошибки;
- проверка каталогов, на которые нет ссылок;
- проверка счетчиков связей в каталогах и файлах;
- проверка неверных блоков и дублированных блоков в списке свободных блоков, неиспользуемых блоков, которые должны быть включены, но не включены в список свободных блоков, и счетчика общего числа свободных блоков.
После выполнения fsck, связанного с "починкой" файловой системы, может появиться сообщение: ***** BOOT UNIX (NO SYNC!) *****, требующее перезагрузки системы без выполнения команды sync.
Если этого не сделать, работа по восстановлению списка свободных блоков будет утрачена, так как копии управляющих таблиц и буфера в оперативной памяти остались старыми. Для их обновления требуется перезагрузка без выгрузки буферов на диск командой sync.