9.5.4. Команда fsck

9.5.4. Команда fsck

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

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

• сектора, которые используются одновременно двумя файлами;

• сектора, которые включены в список свободных секторов, хотя они содержат часть какого-то файла;

• сектора, которые не содержат информации, но не включены в список свободных секторов;

• индексные дескрипторы файлов (inodes), не указанные ни в одном каталоге;

• неверная общая информация в суперблоке и т. д.

Формат запуска команды следующий:

[root]# fsck [опции] [-t fstype] [-fs-options] filesystem

где fstype - тип проверяемой файловой системы, а в качестве filesystem можно указать либо имя устройства (например, /dev/hda4), либо точку монтирования (/, /opt, /mnt/wint) (Примечание: в man-странице по fsck сказано, что можно еще использовать метку (label) файловой системы, либо UUID, но, что такое два последних варианта, я пояснить не берусь).

Вообще говоря, команда fsck не является самостоятельной утилитой, она просто предоставляет единый интерфейс вызова специализированных программ для проверки файловых систем разных типов. Эти программы называются fsck.fstype (например, fsck.ext2) и команда fsck при запуске производит поиск соответствующей специфической программы сначала в /sbin, затем в /etc/fs и /etc, и, наконец, в каталогах, перечисленных в переменной PATH. Опции, указанные после двойного дефиса, передаются команде fsck.fstype.

Из собственных опций команды fsck (они указываются сразу после имени) стоит отметить опции -A, -a, -r и -N. Если указать опцию -a, то при обнаружении ошибок в файловой системе будет производиться их автоматическое исправление. Указание опции -A приводит к тому, что команда просмотрит файл /etc/fstab и за один прогон проверит все перечисленные в нем файловые системы. Опция -r переключает команду в интерактивный режим работы, т. е. перед тем, как произвести какие-то изменения, будет выдаваться запрос на подтверждение действия. Задание опции -N приводит к тому, что никаких изменений в файловой системе производится не будет, будет только сказано, что должно быть сделано.

При загрузке ОС Linux в некоторых случаях происходит автоматический запуск команды fsck. Основных причин для выполнения fsck на этапе загрузки системы две: некорректный выход из системы в предыдущий раз (например, резкое отключение питания или неисправность аппаратуры) и достижение заданного порога для количества выполнений операции размонтирования файловой системы. При каждом выполнении операций монтирования-размонтирования файловой системы в ее суперблоке (см. главу 16) делаются специальные отметки. Если последнее размонтирование завершилось корректно, то файловая система помечается как "чистая" (clean) и число операций монтирования-размонтирования увеличивается на единицу. Если корректного размонтирования не было, то файловая система помечена как "грязная" (dirty). На этапе загрузки ОС проверяется, являются ли все файловые системы "чистыми", и если нет, то для "грязных" систем выполняется команда fsck. Кроме того, даже если все системы "чистые", но достигнут порог для числа операций монтирования/размонтирования, запускается та же команда с опцией -A. Как было сказано выше, при этом производится проверка всех файловых систем, перечисленных в файле /etc/fstab. Порядок, в котором проверяются файловые системы, определяется числами, указанными в последнем поле каждой строки файла /etc/fstab. Файловые системы проверяются в порядке возрастания этих номеров. Первым всегда следует проверять корневой раздел. Если две файловые системы расположены на разных дисках, им может быть присвоен один и тот же номер. Это приводит к тому, что они будут проверяться одновременно, а, значит, сократится общее время проверки. Но если файловые системы расположены на одном и том же физическом устройстве (например, в разных разделах), то совпадение номеров вызовет только замедление процедуры проверки, так как головки диска должны будут совершать лишние перемещения.

Иногда требуется запустить fsck и вручную. При этом лучше всего предварительно перевести систему в однопользовательский режим и размонтировать проверяемые файловые системы (или смонтировать их в режиме "только для чтения"). Например, запуск fsck в разделе /usr обычно требуется тогда, когда файловая система разрушена и тогда любые дальнейшие действия в разрушенной системе могут привести к полному краху, а, значит, fsck должна быть запущена как можно скорее. Обычно о необходимости перехода в однопользовательский режим говорит также то, что fsck не может автоматически восстановить файловую систему при загрузке. Такое случается относительно редко, обычно при выходе из строя жесткого диска или при попытках установить какую-либо экспериментальную версию ядра, но все же об этом надо знать, чтобы не растеряться в затруднительной ситуации.

К сожалению, в процессе восстановления файловой системы приходится полностью полагаться на возможности программы fsck. Начинающему пользователю не стоит самостоятельно пытаться произвести какие-то действия в поврежденной файловой системы, потому что вы рискуете перевести ядро в паническое состояние (kernel panic).

Если fsck обнаруживает "потерянные файлы", т. е. такие файлы, которые не указаны ни в одном из каталогов, она помещает их в каталог lost+found на верхнем уровне проверяемой файловой системы. Поскольку имена файлов регистрируются только в родительском каталоге, то в данном случае их "истинные" имена неизвестны, и команда присваивает им имена, совпадающие с номерами их индексных дескрипторов.