Целостность файловой системы может быть нарушена в результате сбоя пи- тания или же аппаратной неисправности. Если работа операционной системы была прервана и файловая система не была отмонтирована, то в суперблоке файловой системы остается специальный флаг (dirty — грязный или not clean), который сообщает о том, что в файловой системе возможны наруше- ния. Если же файловая система была отмонтирована правильно, то файловая система находится в состоянии clean — "чистая".
Сбой файловой системы обычно сопровождается тем, что информация, нахо- дящаяся в кэше для данной файловой системы, не попадает на диск, т. е. не синхронизируется. Может произойти также и следующее: операция синхро- низации кэша с диском может быть не доведена до конца вследствие сбоя и запись данных из буфера на диск может прерваться до ее завершения. Это способно привести к целому ряду проблем:
r искажению или потере информации в блоках данных;
r появлению в системе блоков данных, которые считаются занятыми, хотя на них не указывает ни один индексный дескриптор;
r наличию перекрестных ссылок на блоки данных;
r появлению метаданных с ненулевым счетчиком ссылок, на которые не ссылаются никакие файлы;
r наличию противоречивых записей в каталогах и т. п.
Различают два класса возможных нарушений в файловой системе:
r нарушение целостности данных;
r нарушение целостности файловой системы.
Для защиты целостности данных могут быть использованы разнообразные методы резервного хранения данных (backup). Утилиты восстановления це- лостности файловой системы не могут гарантировать восстановление данных после сбоя. Гарантом сохранности данных является только наличие резерв- ных копий данных.
Для восстановления целостности файловых систем в GNU/Linux использует- ся утилита fsck (пример 11.9), которая аналогично mkfs является надстрой- кой над специализированными утилитами для различных файловых систем.
ВНИМАНИЕ!
Проверка целостности файловой системы должна осуществляться лишь на от- монтированной файловой системе. Невыполнение этого требования может привести к полной потере данных в файловой системе!
Пример 11.9. Команда fsck
$ ls -l /sbin/fsck.*
-rwxr-xr-x 4 root root 185112 Oct 19 21:47 /sbin/fsck.ext2
-rwxr-xr-x 4 root root 185112 Oct 19 21:47 /sbin/fsck.ext3
-rwxr-xr-x 4 root root 185112 Oct 19 21:47 /sbin/fsck.ext4
Если вызвать утилиту fsck без опции -t, указывающей тип файловой систе- мы, по умолчанию запустится e2fsck, проверяющая файловые системы ext2, ext3 и ext4.
Эта команда (пример 11.10) проверит целостность файловой системы ext3.
При этом полная проверка осуществляется далеко не всегда, а только при условии:
r наличия флага dirty в суперблоке, что бывает при сбое или выключении питания без отмонтирования файловой системы;
r достижения максимального разрешенного количества монтирований фай- ловой системы без проверки ее целостности;
r достижения максимального срока без проверки целостности файловой системы.
Если же необходимо выполнить полную проверку файловой системы в от- сутствие любого из приведенных выше условий, то надо использовать опцию
-f команды e2fsck. А для тестирования поверхности диска перед проверкой файловой системы требуется указывать опцию -c команды e2fsck. Напри- мер, приведенная в примере 11.11 команда выполняет полную проверку фай- ловой системы, т. к. превышено максимально разрешенное для данной фай- ловой системы число монтирований без проверки целостности файловой системы.
Пример 11.11. Полная проверка файловой системы ext3
При работе команды e2fsck используется специальный каталог lost+found, находящийся в корневом каталоге файловой системы устройства. В этом ка- талоге сохраняются конвертированные в файлы потерянные блоки данных.