пользоваться резервной копией файловой системы. Программа fsck
выполняется автоматически для корневой файловой системы при на-
чальной загрузке. Сообщения состояния программы fsck имеют сле-
дующий вид:
+--------------------------------------------------------------
| ** Phase 1 - Check Blocks and Sizes
| (Фаза 1 - Проверка блоков и размеров)
| ** Phase 2 - Pathnames (Имена путей)
| ** Phase 3 - Connectivity (Связность)
| ** Phase 4 - Reference Counts (Счетчики обращений)
| ** Phase 5 - Check Free List (Проверка свободного списка)
|
Если система прекращена аварийно (выход из строя питания),
появятся другие сообщения, на первый взгляд тревожные:
FREE INODE COUNT WRONG IN SUPERBLK (FIX?)
(Ошибка в счетчике свободных индексных дескрипто-
ров файлов в суперблоке - исправить?)
На самом деле сообщения такого рода являются обычными в случае,
если система не была остановлена нормально; здесь следует лишь
ввести y, и fsck продолжит работу. Это можно сделать без вмеша-
тельства администратора системы, но, как правило, лучше все же
знать, что происходит с файловой системой при возникновении
проблемы.
В целях рассмотрения понятия целостности системы и принци-
пов функционирования fsck следует описать структуру, лежащую в
основе простого понятия файлов, каталогов и файловых систем. Хо-
тя вникать в принципы файловой памяти не обязательно, полезно
знать, к чему относятся сообщения, подобные приведенному выше;
после этого они не будут выглядеть столь загадочно. После изуче-
.
- 4-16 -
ния данного раздела вам станут понятны некоторые основные прин-
ципы операционных систем UNIX. В разделе "Восстановление файло-
вой системы с помощью fsck" описана простая механика использова-
ния команды fsck. Последующие подразделы описывают структуры
файловой системы, с которыми работает fsck.
Файлы в системах UNIX
Каждая файловая система содержит специальные структуры,
позволяющие операционной системе осуществлять доступ и сопровож-
дать файлы и данные, хранящиеся в файловой системе. Нас интере-
сует разрушение и восстановление именно этих структур.
Структура файловой системы базируется на принципе хранения
данных на жестких дисках. Хотя жесткий диск и содержит все дан-
ные, используемые системой, они отнюдь не хранятся там маленьки-
ми аккуратными островками, соответствующими отдельным файлам. Вы
вряд ли сможете, указав какое-либо место на жестком диске, с
уверенностью сказать: "Мой файл записан именно в этой части дис-
ка". На самом деле данные, скорее всего, будут разбросаны по
диску, и операционная система использует сложную схему адреса-
ции, чтобы иметь доступ к каждому из фрагментов, на которые раз-
бивается файл, и представить их всех пользователю как единое це-
лое.
Разброс данных связан с тем, что операционная система на
самом деле работает не с файлами, а с элементами данных. Чтобы
понять, что это означает, предположим, что файл создан и записан
в одну область на диске. Теперь допустим, что вы редактируете
этот файл и удаляете из него несколько предложений вразброс.
Значит, вы теперь используете немного меньше пространства на
диске, чем вначале. Это пространство имеет ряд разрывов в облас-
ти, которую занимал файл. Пространство на диске ценится дорого и
не тратится зря. Эти освободившиеся маленькие участки памяти вы-
деляются другим файлам. Представьте себе этот процесс с участием
сотен файлов и дюжины пользователей, и вам станет яснее принцип
сопровождения файлов. Благодаря эффективности алгоритмов (фор-
мул), используемых операционной системой, этот процесс является
очень эффективным и надежным.
Файловые системы в системах UNIX
Файловая система содержит файлы и каталоги, которые предс-
тавлены специальными структурами, называемыми индексными дескрип-
торами файлов (inodes) и блоками данных; операционная система мо-
жет создавать и отслеживать эти структуры.
Блок данных - это элемент данных размером 1024 байта, запи-
санный на диске. Блок данных может содержать
элементы каталога или данные файла. Элемент
каталога состоит из номера индексного дескрип-
тора файла и имени файла.
.
- 4-17 -
Индексный дескриптор файла - это нечто вроде карточки из
библиотечного каталога. Каждый индексный деск-
риптор файла содержит информацию о файле, ана-
логично карточке, содержащей информацию о кни-
ге, - включая сведения о местоположении, раз-
мере и типе файла, а также о количестве свя-
занных с ним элементов каталога. Необходимо
помнить, что он не содержит имени файла; имена
содержатся в каталоге. В индексном дескрипторе
файла содержится информация о размещении всех
данных, составляющих файл, так что операцион-
ная система в случае необходимости может соб-
рать все эти данные.
Блоки не записываются сразу на жесткий диск. Чтобы свести к
минимуму время поиска данных на жестком диске, недавно использо-
вавшиеся блоки данных хранятся в кэше в специальных структурах
памяти - буферах. Именно использование этих структур повышает
эффективность операционной системы. Когда скопится достаточное
количество данных для записи в один или несколько полных блоков
на диске, буфер "сбрасывается" - содержавшаяся в нем информация
записывается на диск. При сбое какая-то информация всегда теря-
ется, так как недавно изменившиеся данные еще не записаны на
диск, но это несущественно.
Когда жесткий диск заполнен данными, индексными дескриптора-
ми файлов, каталогами, файлами и блоками из кэша памяти, как же
операционная система будет их отслеживать? Это возможно благодаря
тому, что все эти структуры обеспечивают достаточную систему свя-
зей между файлами и каталогами, позволяя восстанавливать разру-
шенные соединения.
Специальный блок данных - "суперблок" - содержит глобальную
информацию о файловой системе, а не просто о том, где расположен
конкретный фрагмент файла. Суперблок содержит информацию, необ-
ходимую для монтирования файловой системы и доступа к ее данным.
Он содержит размер файловой системы, количество свободных описа-
телей файлов и информацию о доступном свободном пространстве.
Информация из версии суперблока на диске считывается, когда
файловая система смонтирована; эта информация поддерживается и
модифицируется в памяти по мере развития активности в системе.
Информация записывается обратно на диск с регулярными интервала-
ми по команде update, которая обычно выполняется сценариями
/etc/rc2, когда система запущена. Команда update вызывает коман-
ду sync(C) каждые 30 секунд, в результате чего происходит запись
на диск версии суперблока в памяти и буферов. При аварии систе-
мы, если записанная на диск информация недостаточно актуальна,
файловая система может быть запорчена.
Причины порчи файловой системы
Любая из структур, упомянутых в данном разделе, может ока-
заться запорченной. Это означает разрушение данных или структур,
используемых для поиска данных. Это может случиться по несколь-
ким причинам:
.
- 4-18 -
Аппаратный сбой Аппаратные сбои происходят редко. Лучший
способ решения такой проблемы - обеспечить
неукоснительное следование рекомендованным
процедурам диагностики и обслуживания.
Программные прерывания
Ошибки, вызывающие сбой программы, могут
быть результатом потери некоторых данных.
Здесь трудно дать общие рекомендации, так
как очень велик диапазон возможных причин.
Ошибка по вине человека
Это основная причина очень многих случаев
порчи файловой системы, как ни горько это
признать. Существуют правила работы с фай-
ловыми системами, которые следует соблю-
дать.
Правила проверки файловых систем
1. ВСЕГДА проверяйте файловую систему командой fsck, прежде
чем ее монтировать. Ничто так не усложняет проблему очистки за-
порченной файловой системы, как использование ее в поврежденном
состоянии.
2. НИКОГДА не удаляйте файловую систему физически без пред-
варительного демонтирования.
3. ВСЕГДА применяйте команду sync перед остановом системы и
перед демонтированием файловой системы. (Команда sync записывает
данные из буферного кэша обратно на диск.)
Регулярное дублирование файловой системы дает наилучшие га-
рантии постоянной целостности файловой системы.
Восстановление файловой системы командой fsck
Файловую систему можно исправить командой fsck. Перед вы-
полнением fsck файловую систему нужно демонтировать. (Корневую
файловую систему демонтировать нельзя, так что в этом случае
следует сначала остановить систему, а затем вновь ее запустить в
однопользовательском режиме (режиме технического обслуживания).)
Команда fsck проверяет различные структуры на диске и пытается
согласовать их. Она по возможности восстанавливает соединения,
разрешает ссылки - "чистит" файловую систему.
.
- 4-19 -
Формат команды:
Ъ2fsck specialfile
@ Пользователи sysadmsh выбирают: Filesystems->Checks
В качестве specialfile нужно задать имя специального файла,
соответствующего имени устройства файловой системы.
Замечание
Программа fsck на самом деле является фронтальной - она вы-
полняет лишь предварительную обработку, запуская для каждого ти-
па файловой системы свою версию fsck. Для исправления файловых
систем DOS программа fsck вызывает специальную версию.
Предположим, например, что вы запустили систему после сбоя
питания и находитесь в однопользовательском режиме. Чтобы прове-
рить файловую систему /u, представленную устройством /dev/u,
введите
fsck /dev/u
и нажмите . Программа проверит файловую систему и выдаст
следующие сообщения о ходе своей работы:
+--------------------------------------------------------------
| ** Phase 1 - Check Blocks and Sizes
| ** Phase 2 - Pathnames
| ** Phase 3 - Connectivity
| ** Phase 4 - Reference Counts
| ** Phase 5 - Check Free List
|
Если на одном из этих этапов обнаружится поврежденный файл,
команда спросит, следует ли его исправить или восстановить. Что-
бы исправить запорченный файл, введите y. Всегда разрешайте сис-
теме восстанавливать запорченные файлы, даже если у вас есть в
запасе их копии или вы намерены их удалить.
Заметим, что команда fsck удалит любой файл, который она
сочтет слишком сильно запорченным и не подлежащим восстановле-
нию. Можно задать возможность выбора для fsck - выполнять вос-
становление или нет. Вы можете заставить fsck проигнорировать
нарушение целостности, если вы сочтете проблему настолько серь-
езной, что либо пожелаете разобраться с ней самостоятельно с по-
мощью утилиты fsdb(ADM), либо решите восстановить систему с ре-
зервных копий. Если вы не можете использовать fsdb, вам следует
дать fsck возможность исправлять нарушения целостности, в про-
тивном случае файловая система может оказаться непригодной к ис-
пользованию.
Заметьте, что вам может понадобиться несколько раз выпол-
нить команду fsck, прежде чем вся файловая система будет очище-
на. Полный список сообщений об ошибках можно найти в странице