ГЛАВА 5 УПРАВЛЕНИЕ ФАЙЛОВОЙ СИСТЕМОЙ СОДЕРЖАНИЕ ВВЕДЕНИЕ Как организована файловая система Блок 0 Блок 1: суперблок Описатели файлов Блоки данных Свободные блоки Заключение ФАЙЛОВЫЕ СИСТЕМЫ И ИХ РАЗМЕЩЕНИЕ НА ЗАПОМИНАЮЩИХ УСТРОЙСТВАХ Форматирование дисков Деление дисков Ограничения размеров КАК РАБОТАЕТ ФАЙЛОВАЯ СИСТЕМА Таблицы в памяти Системная таблица описателей файлов Системная таблица файлов Таблица открытых файлов Последовательность действий при доступе к файлу Открытие файла Создание файла Чтение и запись файлов Файлы, используемые несколькими процессами Конверсия маршрутного имени Синхронизация Время поиска Дыры в файлах Заключение ОБСЛУЖИВАНИЕ ФАЙЛОВОЙ СИСТЕМЫ Создание файловой системы и открытие доступа к ней Команда mkfs Монтирование и размонтирование файловых систем Заключение ПОДДЕРКА ФАЙЛОВЫХ СИСТЕМ Выработка принципов организации и обслуживания файловых систем Shell-процедуры для управления файловыми системами Проверка корректности файловых систем Контроль за использованием дискового пространства Контроль за процентом занятого дискового пространства Контроль за растущими файлами и каталогами Выявление и удаление неиспользуемых файлов Выявление пользователей, занимающих большой объем дискового пространства Сохранение и восстановление файловых систем Полное сохранение Дополнительные копии Выборочные резервные копии Напоминания о плановых сохранениях файловых систем Восстановление файловой системы с сохраненных копий ВОЗМОЖНЫЕ НЕПОЛАДКИ В ФАЙЛОВОЙ СИСТЕМЕ Аппаратные сбои Авариное завершение программ Ошибки пользователя КАК ПРОВЕРИТЬ КОРРЕКТНОСТЬ ФАЙЛОВОЙ СИСТЕМЫ Утилита fsck Команда fsck Пример использования команды Компоненты файловой системы, проверяемые утилитой fsck Суперблок Описатели файлов Счетчик ссылок Блоки косвенной адресации Блоки данных каталогов Блоки данных обычных файлов Выполнение fsck Фаза инициализации Фаза 1: Проверка блоков и размеров Фаза 1В: Повторный просмотр для поиска описателей, ссылающихся на дважды занятые блоки Фаза 2: Проверка маршрутных имен Фаза 3: Проверка связности Фаза 4: Проверка счетчиков ссылок Фаза 5: Проверка списка свободных блоков Фаза 6: Переконструирование списка свободных блоков Фаза очистки ВВЕДЕНИЕ Как организована файловая система Основная функция операционной системы UNIX - это поддержка фай- ловых систем. Файл в системе UNIX представляет собой одномерный массив байт, не имеющий какой-либо другой структуры. Файлы включаются в иерархически организованные каталоги. Каталог - это просто файл другого типа, который доступен пользователю только для чтения, но не для записи; операционная система ос- тавляет право записи файлов-каталогов лишь за собой. Совокуп- ность каталогов и обычных файлов образует файловую систему. На рис. 5-1 показано соответствие каталогов и файлов в файловой системе. Каталоги заключены в прямоугольники. Рис. 5-1. Файловая система UNIX | +---+ | +------| / +------+ | | +-+-+ | | +----+ | | | +----+ | |/bin+-----+ | +----|/usr| | +----+ +--+-+ +----+ | | |/etc| | + cat +----+ | | | | + who + mkfs | | | | + ls + mount | | | + setclk Исходной точкой файловой системы является каталог, который на- зывается ее корнем. В операционной системе UNIX всегда имеется одна файловая система, которая так и называется - корневая фай ловая система. Традиционно корневой каталог корневой файловой системы обозначается одной наклонной чертой (/). Таким образом, на рис. 5-1 приведена стуктура корневой файловой системы. Если к корневой файловой системе, например, к каталогу /usr, "подве- сить" еще одну файловую систему, то получим результат, который проиллюстрирован на рис. 5-2. Рис. 5-2. Подключение файловой системы /usr | +---+ | +----------| / +---------------------+ | | +-+-+ | | | | | | +--+-+ +--+-+ +-+--+ | |/bin| |/etc| +------|/usr+--------+ | +----+ +----+ | +--+-+ | | | | +-----+---------+----------+----+ | + cat + mkfs | +--+-+ +---+----+ +-+--+ | | | | | |/bin| |/include| |/abc| | | + who + mount | +----+ +--------+ +----+ | | | | | + lp + studion.h | | + ls + setclk | | | | | | + at + time.h | | | | | | | | + cut + math.h | | | | | | файловая система /usr | | +-------------------------------+ Для обозначения понятия "каталог", например, /usr, могут приме- няться различные термины. Каталог, который используется как точка подключения монтируемой файловой системы к корневой фай- ловой системе, может называться "лист" или "точка монтирова- ния". Независимо от того, какой применяется термин, подобный каталог является корнем для исходящей из него файловой системы. Имя этой файловой системы совпадает с именем каталога. В нашем примере файловая система будет называться /usr. Диаграммы на рис. 5-1 и 5-2 могут служить удобным способом представления структуры файлов и каталогов, но он не вполне то- чен и не дает представления о том, в каком виде файловые систе- мы хранятся в операционной системе UNIX. С точки зрения системы UNIX файловая система представляет собой определенным образом организованный набор блоков диска, которые можно подразделить на четыре категории: блок 0 блок 1: суперблок переменное число блоков, содержащих список описателей файлов переменное число блоков данных: большая часть их содержит данные, некоторые используются для хранения списка свободных блоков и косвенных адресов Проиллюстрируем эту схему. Рис. 5-3. Файловая система с точки зрения системы UNIX | +---------------------------------+ | | Блок 0 | | | Зарезервирован | | +---------------------------------| | | Блок 1 | | | Суперблок | | +---------------------------------| | | Блок 2 | | | . | | | . | | | . Описатели | | | . файлов | | | . | | | Блок n | | +---------------------------------| | | Блок n+1 | | | . | | | . | | | . Блоки | | | . данных | | | . | | | Конец файловой системы | | | | | +---------------------------------+ Блок 0 Блок 0 - хотя и считается частью файловой системы, фактически не используется ею. Он зарезервирован для хранения процедур загрузки. Не все файловые системы участвуют в процессе загруз- ки. В файловых системах, не участвующих в процессе загрузки, блок 0 не используется. Блок 1: суперблок В суперблоке хранится большая часть информации о файловой сис- теме, в том числе такая информация как: Размер и статус файловой системы - метка, имя файловой системы - размер в физических и логических блоках - признак доступа только на чтение - флаг модификации суперблока - дата и время последнего изменения Описатели файлов - общее число описателей файлов - число свободных описателей файлов - массив, содержащий 100 номеров свободных описателей файлов - индекс в массиве номеров свободных описателей файлов Блоки данных - общее число свободных блоков - массив, содержащий номера 50 свободных блоков - индекс в массиве номеров свободных блоков Диаграмма полей суперблока изображена на рис. 5-4. Заметим, что в суперблоке не поддерживаются полные списки свободных описате- лей блоков; хранятся лишь номера достаточного их количества для удовлетворения текущих потребностей, возникающих при работе с файловой системой. Почти всегда, за исключением ситуации, когда файловая система близка к исчерпанию описателей файлов и блоков данных, свободных описателей и блоков имеется больше, чем пере- числено в суперблоке. Информация о них хранится в одном из бло- ков данных. Рис. 5-4. Суперблок | +-------------------------------------------------------------+ | | Дополнительная информация | | | | | | - логический и физический размеры диска | | | - флаг модификации суперблока | | | - признак доступа только на чтение | | | - дата последнего изменения | | | - метка или имя | | +-------------------------------------------------------------| | | Информация об описателях файлов | | | | | | - общее число описателей файлов | | | - общее число свободных описателей файлов | | | - массив номеров свободных описателей файлов | | | - индекс в массиве номеров свободных описателей файлов | | +-------------------------------------------------------------| | | Информация о блоках | | | | | | - общее число свободных блоков | | | - массив номеров свободных блоков | | | - индекс в массиве номеров свободных блоков | +-------------------------------------------------------------+ Описатели файлов Используемый в документации на английском языке термин "i-node" означает "information node" ("информационный узел"). Часто ис- пользуется написание без дефиса: inode. Аналогичным образом обозначаются понятия, связанные с описателями файлов, например, список описателей файлов называется i-list, или ilist, (i-спи- сок), i-number (i-номер) - позиция описателя в списке описате- лей файлов. Описатель файла содержит всю информацию о файле за исключением его имени, которое хранится в каталоге. Описатель файла занима- ет 64 байт, следовательно, в одном физическом блоке помещается 8 описателей файлов. Число блоков, отводимых под описатели фай- лов, не фиксировано; оно зависит от общего числа описателей файлов в файловой системе, которое указывается при ее создании. Описатель файла содержит: тип и режим файла; типы файлов: обычный (-), каталог (d), символьный (с), или fifo (именованный канал (p)); режим - это набор прав чтения- записи-выполнения. число ссылок на файл идентификатор пользователя, которому принадлежит файл идентификатор группы, которой принадлежит файл число байт в файле массив из 13 адресов блоков диска дата и время последнего доступа дата и время последней модификации дата и время создания Сердцевину описателя составляет массив из 13 адресов блоков диска. Первые 10 - непосредственные адреса, т. е. адреса первых десяти блоков, в которых хранится содержимое файла. Если файл содержит более 10240 байт, то 11-й адрес указывает на блок кос- венной адресации, содержащий еще 256 адресов блоков. 12-й адрес указывает на блок двойной косвенной адресации, в котором нахо дятся адреса 256 блоков косвенной адресации, каждый из которых хранит адреса 256 блоков. И, наконец, для файлов, длина которых превышает 67 381 248 байт, 13-й адрес массива - это адрес блока тройной косвенной адресации, в котором находятся адреса 256 блоков двойной косвенной адресации, и т. д. Теоретически воз- можная длина файлов в системе UNIX значительно превышает разме- ры дискового пространства современных UNIX-машин. Блоки данных Остальную часть памяти, отведенной под файловую систему, зани- мают блоки данных, называемые также блоками хранения. Для обыч- ных файлов блоки данных хранят содержимое файлов. Структура со- держимого файлов не определена. Для каталогов - блоки данных содержат 16-байтные элементы (по 64 в блоке). Каждый элемент представляет файл или подкаталог данного каталога. Элемент сос- тоит из номера описателя файла, который занимает 2 байта, и имени файла или подкаталога. Свободные блоки Блоки, не занятые в данный момент под хранение описателей фай лов, данных или адресов других блоков, образуют связный список. Каждый блок в списке содержит адрес следующего блока. Заключение Мы рассмотрели здесь абстрактную структуру файловой системы, основные компоненты, из которых она состоит, и некоторые соот- ношения между тем и другим. В последующих разделах этой главы мы покажем, как файловые системы размещаются на дисках и что происходит в процессе работы с ними. ФАЙЛОВЫЕ СИСТЕМЫ И ИХ РАЗМЕЩЕНИЕ НА ЗАПОМИНАЮЩИХ УСТРОЙСТВАХ Файловые системы операционной системы UNIX размещаются на дис ках с произвольным доступом. Прежде чем установить файловую систему на диск, необходимо выполнить некоторые подготовитель- ные действия. Материал этой части главы представляет собой краткий обзор сведений, которые более подробно изложены в гл. 4, "Обслуживание дисков и лент". Форматирование дисков Прежде чем приступить к использованию диска в оперционной сис теме UNIX, необходимо его отформатировать и, таким образом, вы- делить на нем адресуемые секторы. Сектор - это участок размером 1024 байт, к которому может адресоваться контроллер диска. Чис- ло секторов есть функция от размера и числа поверхностей диско- вого устройства. Примечание Жесткие диски обычно форматируются при установке. Единственный случай, когда может возникнуть необходи- мость их переформатирования - это после катастрофичес- кого аппаратного сбоя. В таком случае рекомендуется об- ратиться к представителю фирмы. Дискеты изготавливаются в расчете на возможное применение на различных машинах. Производители поставляют их в неотформатиро- ванном виде, предоставляя пользователям возможность самим от форматировать их для конкретной машины, на которой они будут применяться. Для форматирования дискет служит команда for- mat(1M). Деление дисков Следующий уровень форматирования дисков - это установка разде- лов. На жестком диске может быть выделено до 7 разделов [см. также intro(7)]. Ограничения размеров Максимальное число блоков, которое может быть отведено под фай- ловую систему, близко к общему числу секторов диска. Этот мак- симум может быть уменьшен в результате выделения на диске об- ласти для подкачек или страничной организации памяти. Максимально допустимое число описателей файлов равно 65500. Размер блока на диске - 1024 байт, такой же размер имеет сектор диска. Гибкие диски имеют размеры блоков 256, 512 и 1024 байт. В системе UNIX размер логического блока равен 1024 байт. Подп рограммы ввода/вывода для файлов работают с блоками в 1 Кб. КАК РАБОТАЕТ ФАЙЛОВАЯ СИСТЕМА До сих пор мы обсуждали лишь логическую структуру файловых сис- тем и их размещение на физических дисках. Теперь мы опишем, что происходит в процессе работы с файловыми системами в ОС UNIX. Таблицы в памяти Когда файловая система идентифицируется в системе UNIX при по- мощи команды mount(1M), то в таблице смонтированных файловых систем создается новый элемент, а ее суперблок прочитывается в буфер ядра. Части суперблока, которые более всего нужны в опе- ративной памяти - это списки свободных описателей файлов и сво бодных блоков, а также признаки и поля, содержащие время созда ния/модификации файлов, так как они постоянно подвергаются из менениям. СИСТЕМНАЯ ТАБЛИЦА ОПИСАТЕЛЕЙ ФАЙЛОВ В системе UNIX поддерживается структура, называемая системной таблицей описателей файлов. Когда файл открывается, его описа- тель копируется с диска в системную таблицу описателей файлов. Если два или более процессов открывают один и тот же файл, то они используют один и тот же элемент таблицы описателей. Эле- мент таблицы, помимо прочего, содержит следующую информацию: имя устройства, с которого был взят описатель файла номер описателя файла счетчик ссылок (число указателей) на данный файл. (Файл может быть открыт для более чем одного процесса.) Структура системной таблицы описателей файлов показана ниже. Рис. 5-5. Системная таблица описателей файлов | +-------------------------------------------------------+ | | Указатель на следующий описатель файла в таблице | | +-------------------------------------------------------| | | Поле связи для списка свободных элементов | | +-------------------------------------------------------| | | Признак | | +-------------------------------------------------------| | | Счетчик ожиданий описателя файла | | +-------------------------------------------------------| | | Счетчик указателей на файл | | +-------------------------------------------------------| | | Имя устройства, откуда взят описатель | | +-------------------------------------------------------| | | Номер описателя | | +-------------------------------------------------------| | | Режим | | +-------------------------------------------------------| | | Число ссылок | | +-------------------------------------------------------| | | Идентификатор пользователя - владельца файла | | +-------------------------------------------------------| | | Идентификатор группы, владеющей файлом | | +-------------------------------------------------------| | | Размер файла | СИСТЕМНАЯ ТАБЛИЦА ФАЙЛОВ В системе поддерживается еще одна таблица, называемая системной таблицей файлов. Такая таблица необходима, поскольку файлы мо- гут разделяться взаимодействующими процессами, и нужно следить за тем, какие процессы к каким файлам имеют доступ. Элемент системной таблицы файлов для каждого дескриптора файла содержит следующую информацию: признак, показывающий как был открыт файл (на чтение, на за- пись) счетчик процессов, ссылающихся на этот элемент (когда значе- ние счетчика становится равным нулю - система удаляет эле- мент) указатель на элемент системной таблицы описателей файлов указатель текущей позиции в файле, в которой будет выполнять- ся очередная операция ввода/вывода ТАБЛИЦА ОТКРЫТЫХ ФАЙЛОВ Наконец, последняя таблица, которая служит для обеспечения дос- тупа к файлам - это таблица открытых файлов. Она размещается в области памяти пользователя. В каждом процессе есть область па- мяти пользователя, а в ней - таблица открытых файлов. Элемент таблицы открытых файлов ссылается на соответствующий элемент системной таблицы файлов. На рис. 5-6 показана связь между эти- ми таблицами. Рис. 5-6. Таблицы для работы с файловой системой и связи между ними | Адресное пространство операционной системы Адресное пространство процесс | ------------------------------------------------ ----------------------------- | | | Системная | таблица Системная +- -- -- -- -- -- +- -- -- -- -- -- -- -+ | описателей таблица | Область памяти | | файлов файлов пользователя | | +---------+ +-------+ | | | | 0 | | 0 | Таблица | +----------+ | +---------| +-------| | открытых | | | | | 1 | | 1 | файлов | |Процесс А | | +---------| +-------| | +-----------+ | | | | | 2 ttuxx | | 2 | | 0 Stdin | | | | | +---------| +-------| | +-----------| | | | | | 3 | | 3 | | 1 Stdout | | +----------+ | +---------| +-------| | +-----------| | | | 4 | | 4 | | 2 Stderr | | | +---------| +-------| | +-----------| | | | . | | . | | 3 | | | | . | | . | | +-----------| | | | . | | . | | . | | | +---------+ +-------+ | | . | | | | . | | | | +-----------+ | | +- -- -- -- -- -- +- -- -- -- -- -- -- -+ | | Последовательность действий при доступе к файлу В следующих нескольких параграфах мы опишем последовательность шагов, предпринимаемых операционной системой при открытии, соз- дании, чтении и записи файла. ОТКРЫТИЕ ФАЙЛА Предположим, что выполняется системный вызов open(2) с маршрут- ным именем /a/b. (В программе скорее всего используется подп- рограмма fopen(3) из стандартной библиотеки ввода/вывода, но она в свою очередь обращается к системной процедуре.) 1. Поскольку маршрутное имя начинается с наклонной черты, то операционная система извлекает из таблицы описателей файлов описатель корневого каталога. 2. Пользуясь описателем корневого каталога, система последова- тельно просматривает файл - корневой каталог в поисках эле- мента "а". Если элемент "а" обнаружен, то система извлекает номер описателя, соответствующего элементу "а". 3. Номер описателя дает смещение в списке описателей, в котором находится описатель файла "а". Выбрав описатель файла "а", система выясняет, что это каталог. 4. Осуществляется последовательный просмотр каталога "а" в по- исках элемента "b". 5. После того как элемент "b" найден, выбирается номер его опи- сателя и используется как индекс в списке описателей для вы- бора описателя файла "b". 6. По описателю файла "b" система выясняет, что это файл; копи рует описатель в системную таблицу описателей (если его там еще нет) и устанавливает значение счетчика указателей. 7. Заносится новый элемент в системную таблицу файлов, из нег устанавливается ссылка на элемент в системной таблице описа- телей; текущая позиция в файле устанавливается равной 0, т. е. указывает на начало файла, инициализируется счетчик ука- зателей на файл. 8. В таблице дескрипторов файлов в области памяти пользователя также создается новый элемент и из него устанавливается ссылка на элемент в системной таблице файлов. 9. Программа возвращает в качестве результата номер слота дескриптора файла. Для поиска описателя файла в каталоге применяется линейный иск, этим объясняется настоятельная рекомендация иметь неболь- шие каталоги. Время поиска сокращается также, если имена подка- талогов располагаются вблизи начала каталога. (Используйте для этого команду dcopy(1M).) СОЗДАНИЕ ФАЙЛА При создании файла (системный вызов create(2)) выполняются вна- чале следующие дополнительные действия: 1. В суперблоке отыскивается свободный номер описателя файла. 2. Устанавливается режим файла (возможно, выполняется сложение с дополнением значения UMASK), и заносится в описатель фай ла. 3. Используя номера описателей, система осуществляет поиск в каталогах так же, как и при открытии файла. Разница заключа- ется в том, что последняя часть маршрутного имени файла за- писывается в каталог, имя которого образует остальная часть маршрутного имени. ЧТЕНИЕ И ЗАПИСЬ ФАЙЛОВ Оба системных вызова - read(2) и write(2) - выполняют следующую последовательность шагов: 1. При помощи дескриптора файла, который служит индексом в таб- лице открытых файлов и передается при вызове в качестве па- раметра, из пользовательской таблицы открытых файлов извле- кается указатель на элемент системной таблицы файлов. 2. При вызове, системной программе передаются в качестве пара- метров адрес пользовательского буфера и число байт, которые нужно прочитать (записать). Из элемента системной таблицы файлов выбирается текущая позиция в файле. 3. (Чтение) По указателю из системной таблицы файлов на сис темную таблицу описателей извлекается описатель читаемого файла. Операционная система копирует данные из внешней памя- ти в буфер пользователя. 4. (Запись) Проходится та же цепочка указателей, но перепись данных производится из буфера пользователя во внешнюю па- мять. Если требуются новые блоки для данных или блоки кос- венной адресации, то они берутся из списка свободных блоков файловой системы. 5. Перед тем как возвратить управление пользователю, система прибавляет число прочитанных (записанных) байт к указателю текущей позиции файла в системной таблице файлов. 6. Результат программы равен числу прочитанных или записанных байт. ФАЙЛЫ, ИСПОЛЬЗУЕМЫЕ НЕСКОЛЬКИМИ ПРОЦЕССАМИ Если взаимодействующие процессы разделяют дескриптор файла, как это бывает после выполнения системного вызова fork(2), то они разделяют и соответствующий элемент в системной таблице файлов. Невзаимодействующие процессы, которые обращаются к одному и то- му же файлу, ссылаются на разные элементы в системной таблице файлов, поскольку они могут производить чтение и запись различ- ных участков файла. В обоих случаях используется один и тот же элемент в системной таблице описателей; а текущая позиция файла для чтения и записи хранится в поле соответствующего элемента системной таблицы файлов. КОНВЕРСИЯ МАРШРУТНОГО ИМЕНИ Поиск по каталогам и конверсия маршрутного имени осуществляется только один раз за все время, пока файл остается открытым. Для выполнения последующих операций доступа к этому файлу предоставляет дескриптор файла, который является индексом в таблице открытых файлов в пользовательской области процесса. Таблица открытых файлов указывает на элемент в системной табли- це файлов, который в свою очередь ссылается на элемент в табли- це описателей. Имея описатель файла, система может отыскать блоки, из которых состоит данный файл. Синхронизация Приведенное выше описание, хотя и довольно громоздкое, может показаться вполне четким и стройным. Дело, однако, осложняется тем, что система UNIX является многозадачной. Для того чтобы дать некоторым задачам какие-то преимущества, система может принять решение о том, что другие задачи являются менее срочны- ми. Помимо этого, для того чтобы обеспечить более быстрое обс- луживание, система хранит в памяти хэш-таблицу буферов, хэш- таблицу свободных блоков и описателей файлов, а также суперб- лок. Жертвуя надежностью, т. е. не обеспечивая при операциях вывода немедленную запись каждого байта данных на диск, система способна предоставить большее количество услуг большему числу пользователей. В обычном режиме работы содержимое буферов время от времени сбрасывается на диски. Это особый системный процесс, не связан- ный непосредственно с какими бы то ни было операциями чтения или записи в пользовательских процессах. Процесс называется "синхронизация". Помимо записи содержимого дисковых буферов он обеспечивает также запись суперблоков на диск. Для записи на диск суперблоков, измененных описателей файлов и содержимого буферов можно воспользоваться командой sync. Следует заметить, однако, что выполнение этой команды означает лишь, что перепись данных запланирована, но не обязательно выполнена. Поэтому мно- гие вводят эту команду дважды подряд, чтобы она сработала на- верняка. Время поиска Время, которое система затрачивает на поиск и чтение файла, оп ределяется двумя характеристиками: размерами каталогов, в которых производится поиск размером самого файла Как уже говорилось выше, при поиске открываемого файла система UNIX выполняет линейный поиск во всех каталогах, перечисленных в маршрутном имени. Время поиска можно сократить двумя способа ми: 1. Число элементов каталога должно быть невелико. Каталог сох- раняет свой максимальный размер, если только он не был сжат командой dcopy(1M). Если Ваш каталог содержит более 640 эле- ментов, то он достиг предела, за которым уже применяется косвенная адресация. 2. Перемещайте имена подкаталогов в начало каталога. Для этого в утилите dcopy(1M) предусмотрена специальная опция. Если имена подкаталогов расположены в начале каталога, то поиск занимает значительно меньше времени. Большие файлы читаются медленнее, из-за того что приходится проходить через цепочки косвенной или двойной косвенной адреса ции. Дыры в файлах Если файл создается не вручную, средствами редактора, а ка- кой-либо программой, то программа, вообще говоря, может произ- вести запись в позицию файла, отстоящую на несколько блоков от позиции, в которую была произведена предыдущая запись. Допус тим, программа записала блоки 1 и 2 файла. Эти блоки указаны в описателе файла. Если теперь программа перейдет сразу к 5-му блоку и запишет в него данные, то 5-й указатель адреса в описа теле файла будет содержать адрес реального блока, в то время как 3-й и 4-й указатели останутся нулевыми, т. е. ни на что не будут указывать. В этом случае мы говорим, что в файле име дыра. В принципе в этом нет ничего страшного; файлу принадлежат лишь те блоки, в которые была произведена запись. Во время ре- организации файла [например, при помощи команды dcopy(1М)] под 3-й и 4-й блоки файла будут отведены реальные блоки диска; их адреса будут записаны в описатель файла, блоки будут изъяты из списка свободных блоков и заполнены нулями. Заключение В этом разделе мы попытались дать представление о том, как опе- рационная система UNIX работает с файловыми системами. Понимая, что и как происходит при функционировании файловой системы, вы сможете яснее осознать, какие действия необходимы для поддержа- ния ее целостности и работоспособности. ОБСЛУЖИВАНИЕ ФАЙЛОВОЙ СИСТЕМЫ Создание файловой системы и открытие доступа к ней После того как диск отформатирован, и выявлены его дефектные блоки, следующий шаг - определение файловой системы. Для этой цели служит команда mkfs(1М). Для определения файловой системы на дискете или ленте можно воспользоваться командой sysadm(1M) makefsys. Команда mkfs Команда mkfs имеет два формата: mkfs специальный_файл число_блоков [:число-описателей] [промежуток число_блоков_ mkfs специальный_файл прототип [промежуток число_блоков_на_цилиндре] Заметим, что ни в одном из форматов не предусмотрено задание имени файловой системы. Оно определяется именем специального файла устройства, на котором она будет размещена. Специальный файл устройства обычно находится в каталоге /dev и связан с идентификацией контроллера и номеров (старшим и младшим) тома для физического устройства. В первом формате единственная дополнительная информация, кото- рая обязательно должна присутствовать - это число блоков по 1024 байт, отводимых под файловую систему. Второй формат коман- ды позволяет включить эту информацию в файл-прототип, в котором также может быть определена структура каталогов и файлов новой файловой системы, и он также позволяет читать содержимое файлов существующей файловой системы. В обоих форматах предусмотрено задание величины промежутка меж- ду записями и числа блоков на цилиндре. Если эта информация в командной строке не указана, то берутся подразумеваемые значе- ния. В первом формате, хотя и требуется указание числа блоков, но число описателей файлов можно опустить. Если число блоков не указано, то по умолчанию берется один описатель на каждые четы- ре логических блока. Если Вы используете первый формат команды mkfs, то файловая система создается с одним каталогом. Если Вы используете файл- прототип, то в него может быть включена информация, по которой mkfs построит и инициализирует определенную структуру каталогов и файлов файловой системы. Формат файла-прототипа приводится в описании команды mkfs(1М) в Справочнике администратора. Заме- тим, что в команде sysadm makefsys не предусмотрено использова- ние файла-прототипа. Установление соответствия между именем устройства и именем файловой системы Обычно файловую систему называют по имени верхнего каталога ее иерархической структуры. Файловая система на рис. 5-2, в начале этой главы, называется /usr. Аналогично, корневая файловая сис- тема root называется так потому, что ее верхний каталог имеет имя "root" [в системе UNIX принято обозначать его наклонной чертой (/)]. Но выше мы видели, что при создании файловой сис- темы единственное имя, указываемое в командной строке (помимо имени файла-прототипа, если применяется второй формат) - это имя специального файла. Существует два способа связать имя файловой системы с именем каталога. Первый, наиболее явный способ - команда labelit(1М). Эта ко манда устанавливает связь между специальным файлом устройства и именем файловой системы, которое в дальнейшем будет указы- ваться при ее монтировании. Она записывает установленное имя файловой системы, т. е. имя ее верхнего каталога, в поле су перблока. Если команда labelit применяется к смещаемым файло вым системам, например, на дискетах, то в качестве одного из параметров в командной строке можно указать номер тома. Этот номер также записывается в суперблок, но обычно принято ука- зывать его в наклейке на футляре дискеты или ленты, на кото- рых хранится файловая система. Связь между устройством и файловой системой устанавливает также команда монтирования mount(1M). Если файловая система должна быть доступна для пользователей, то это действие обя- зательно. Монтирование и размонтирование файловых систем Для того чтобы сделать файловую систему доступной для пользова- телей, необходимо дать указание системе UNIX "смонтировать" ее. Монтирование корневой файловой системы всегда выполняется в процессе загрузки. Другие файловые системы также могут монтиро- ваться автоматически при переводе системы в многопользователь ский режим. Вызов команды mount, которая переводит эти две файловые системы в рабочее состояние, упрятан в shell-процеду рах запуска системы. Независимо от того, вызывается ли команда mount явно или из процедуры, в результате ее выполнения имя указанного в ней дискового устройства, где находится файловая система, вместе с именем каталога заносится во внутреннюю таб- лицу системы UNIX (называемую таблицей смонтированных файловых систем /etc/mnttab). Например, команда |# mount /dev/dsk/sm0s3 /usr2 сообщает системе, что диск /dev/dsk/sm0s3 содержит файловую систему, которая начинается с каталога /usr2 Примечание Команда mount имеет и другие параметры. Подробнее о ней см. в Справочнике администратора. Если Вы попытаетесь при помощи команды cd сделать текущим ката- лог /usr2 до выполнения команды mount, то команда cd завершится сообщением об ошибке. До завершения команды mount система ниче- го не знает о подкаталогах каталога /usr2. Хотя каталог /usr2 имеется (он должен существовать в момент вызова mount), струк тура его файлов и подкаталогов остается скрытой для системы UNIX до тех пор, пока не выполнится mount. Небольшие файловые системы принято хранить целиком на одной дискете. Дискета вмещает около 800 Кб данных. Вы можете опреде- лять файловые системы на дискетах и использовать их либо дл сохранения данных, либо непосредственно для работы. Использова ние дискет непосредственно для работы имеет два недостатка: 1. Доступ к дискете не такой быстрый, как к жесткому диску. 2. Устройство НГМД нельзя использовать для других целей. Чаще всего пользователи предварительно копируют такие файловые системы на жесткий диск. Для того чтобы это сделать, нужно сна- чала смонтировать файловую систему. Пользователь, который пред- полагает работать с файловой системой, вводимой с дискеты, дол- жен завести для этого два каталога: на один из них файловая система будет монтироваться, а другой будет служить ее корневым каталогом. Допустим Вы создали эти два каталога. Пусть каталог для монтирования называется /hk, а корневой каталог - /myfs. Для перевода файловой системы с дискеты на жесткий диск вводит ся команда |# mount /dev /diskette /hk -r (опция -r означает монтирование только на чтение) |# cd /hk1 |# find . -print | cpio -pdm /myfs (см. описание команд find(1) и cpio(1), где объясняется смысл используемых опций) В команде размонтирования нужно указать только имя специального файла устройства. После того как файловая система скопирована, например, с дискеты, введитекоманду |# umount /dev/diskette для того чтобы освободить НГМД. Чаще всего команда размонтирования выполняется сразу же, прежде других команд работы с файловыми системами. Например, команда fsck(1М) для проверки и исправления и команда dcopy(1М) для ко- пирования и сжатия применяются к размонтированнным файловым системам. Размонтирование файловых систем также является важной составной частью процесса выключения системы. Заключение До сих пор мы рассматривали файловые системы абстрактно. Мы уз- нали кое-что о том, как они создаются, хранятся на дисках, как открыть к ним доступ или, наоборот, удалить из системы. Остав- шаяся часть этой главы посвящена вопросам поддержания работос- пособности активных файловых систем. ПОДДЕРЖКА ФАЙЛОВЫХ СИСТЕМ После того, как файловая система создана, и пользователи полу- чили к ней доступ, необходимо осуществлять постоянный контроль за ее использованием в данной организации. Дальнейшее изложение осложняется тем, что приходится проводить разграничение между файловой системой и ее файлами, а это часто приводит к путани- це. Администратор рассматривает обсуждаемые ниже вопросы прежде всего с точки зрения файловых систем, в то время как пользова- тели склонны мыслить и работать в терминах отдельных файлов. Говоря о деятельности администратора по обеспечению хорошей ра- ботоспособности файловых систем, мы должны быть готовы иметь дело как с индивидуальными файлами пользователей, так и с фай- ловой системой в целом. После того, как файловая система создана и начата ее регулярная эксплуатация на Вашем компьютере, для поддержания на должном уровне качества и надежности ее работы необходимо постоянно проводить определенные работы по ее обслуживанию. Можно выде- лить четыре основных процедуры: проверка корректности файловых систем контроль за использованием дискового пространства сжатие и реорганизация файловых систем сохранение и восстановление файловых систем Разработка принципов организации и обслуживания файловых систем Как и большинство других аспектов административной деятельности в системе UNIX, организация и обслуживание файловых систем должны опираться на определенные принципы, отвечающие интересам Вашей организации. Невозможно дать каких-либо однозначных реко- мендаций по таким вопросам, как выбор размеров файловых систем, число пользователей файловой системы, способ создания резервной копии, определение промежутков времени, в течение которых поль- зователи могут хранить в системе неактивные файлы, объем диско- вого пространства, отводимого для каждого пользователя. Все эти вопросы могут быть решены лишь применительно к условиям конк- ретной организации. Число пользователей, характер выполняемой ими работы, число файлов, которое им необходимо - все это пере- менные величины, и квалифицированный администратор должен сам определить, как наилучшим образом удовлетворить потребности своей организации. Shell-процедуры для управления файловыми системами После того, как основные принципы выработаны, многие рутинные работы, связанные с обслуживанием файловых систем, можно опи- сать в виде shell-процедур. Например, контроль за использовани- ем дискового пространства может осуществляться shell-процедура- ми, которые производят необходимые проверки, и, при обнаружении исключительных ситуаций, выдают сообщение на консоль. Несколько полезных соображений: Используйте shell-процедуру, выполняемую под управлением пр цесса cron, для подсчета числа свободных блоков и свободных описателей файлов с выдачей сообщений о файловых системах, для которых эти значения оказались ниже определенного миниму ма. Используйте shell-процедуры для автоматической "чистки" рас тущих файлов. Используйте shell-процедуры для выдачи сообщений о пользова- телях, занимающих чрезмерное количество дискового пространст- ва. Проверка корректности файловых систем Далее в этой главе имеется специальный раздел, посвященный ути- лите fsck(1М) проверки файловых систем. Тем не менее, мы сочли нужным упомянуть ее здесь, поскольку проверка файловых систем это основа всей деятельности администратора по поддержанию их нормального состояния. Контроль за использованием дискового пространства Контроль за уровнем занятого пространятва в файловых система необходим по следующим причинам. Если не следить за этим регулярно, то процент занятого прост- ранства на диске будет постоянно возрастать до полного его исчерпания. Когда свободного пространства на диске не остается, процессы либо вообще перестают выполняться, либо выполняются очень медленно, а система тратит время на выдачу сообщений о том, что пространство на диске исчерпано. Пользователи имеют обыкновение забывать о файлах, которые им больше не нужны, и такие файлы, оставаясь на диске, продолжа- ют занимать пространство. Некоторые файлы постоянно растут вследствие нормальной работы системы. В обязанности администратора входит следить за их размером и вовремя удалять ненужную информацию. В некоторых каталогах, таких как /tmp, в течение дня накапли- ваются файлы. При запуске системы в /tmp должно быть доста- точное число свободных блоков для хранения временных файлов до выключения системы [shutdown(1M)]. Существуют четыре вида работ по поддержанию порядка на диске 1. Контроль за процентом занятого дискового пространства. 2. Контроль за размерами растущих файлов и каталогов. 3. Выявление и удаление неиспользуемых файлов. 4. Выявление пользователей, потребляющих наибольшие объемы пространства. Перечисленные виды работ описаны в первой части в главе P5 ("Процедуры обслуживания файловых систем"). В процедурах эти работы выполняются при помощи подкоманд из меню администратора. В этом разделе содержатся дополнения к процедурам части 1 и описываются некоторые системные команды, которыми Вы можете пользоваться. Контроль за процентом занятого дискового пространства Контроль за использованием дискового пространства можно произ- водить в любое время, для того чтобы проверить, насколько близ- ко к предельному уровню находится Ваша система. До тех пор пока Вы не выработали для этого какого-либо подходящего постоянного распорядка, разумно выполнять проверку ежедневно. В данном при- мере используется команда df(1): |$ df -t Опция -t означает выдачу не только числа свободных блоков и описателей файлов. Если имена файловых систем не перечислены, то выдается информация обо всех смонтированных файловых систе- мах. Контроль за растущими файлами и каталогами Почти в каждой системе, если она ежедневно используется, есть несколько файлов, которые растут в результате нормальной работы системы: | +-------------------------+-----------------------------------------+ | | Файл | Назначение | | +-------------------------+-----------------------------------------| | | /etc/wtmp | записи обо всех фактах входа в систему | | | | | | | /usr/adm/sulog | записи о вызовах команды su | | | | | | | /usr/lib/cron/log | записи обо всех действиях, предприня- | | | | тых процессом /etc/cron | | | | | | | /usr/lib/help/HELPLOG | действия, предпринятые процессом | | | | /usr/bin/help | | | | | | | /usr/lib/spell/spellist | слова, не распознанные утилитой spell(1)| | +-------------------------+-----------------------------------------+ Частота, с которой следует проверять содержимое растущих фай- лов, зависит от того, насколько активно используется Ваша сис- тема и насколько остра для Вас проблема свободного пространства на дисках. Техника поддержания разумных размеров таких файлов состоит в сочетании команд tail(1) и mv(1): |$ tail -50 /usr/adm/sulog > /tmp/sulog |$ mv /tmp/sulog /usr/adm/sulog Эта последовательность команд сначала помещает последние 50 строк файла /usr/adm/sulog во временный файл, а затем перемеща- ет содержимое этого файла в /usr/adm/sulog; в результате в фай- ле остается лишь 50 последних записей. Выявление и удаление неиспользуемых файлов Одна из работ по чистке перегруженных файловых систем состоит в выявлении и удалении файлов, которые в последнее время не ис- пользовались. Команды, при помощи которых это делается, будут приведены ниже. Основные же вопросы, которые Вы должны для себя решить, следующие: По истечение какого срока неиспользуемый файл становится кан- дидатом на удаление? Следует ли предупреждать пользователей о наличии устаревших файлов, которые вот-вот будут удалены из системы? Следует ли постоянно удалять устаревшие файлы или сохранять их в архиве? Команда find(1) позволяет найти все файлы, которые не использо- вались в последнее время. Эта команда просматривает каталог, указанный в командной строке, выбирает в нем имена файлов, удовлетворяющих заданным условиям, и применяет к ним указанное действие. Предлагаемый пример демонстрирует полный спектр воз- можностей команды find: |$ find /usr -type f -mtime +60 -print > /tmp/deadfiles & Cмысл параметров в этом примере следующий: /usr Маршрутное имя каталога, в котором осуществля- ется поиск. Предполагается, что файловые систе- мы на Вашей машине организованы так, что неак- тивные файлы пользователей редко обнаруживаются в корневой файловой системе. -type Указывает, что поиск нужно производить только среди обычных файлов, игнорируя специальные файлы, каталоги и каналы. -mtime +60 Эта опция указывает, что Вас интересуют только файлы, которые не менялись в течение последних 60 дней. -print Указывает, что при обнаружении файла, удовлет- воряющего условиям -type и -mtime, его имя должно быть распечатано. > /tmp/deadfiles & Переадресация вывода во временный файл и указа- ние о том, что процесс вывода должен выполнять- ся как фоновый. Это весьма разумная предосто- рожность, если опыт подсказывает Вам, что объем вывода будет значительным. Для получения аналогичной информации можно воспользоваться так же командой sysadm fileage (1), (см. процедуру 5.3). Выявление пользователей, занимающих большой объем дискового пространства В данном случае также важен не выбор команд, позволяющих уз- нать, кто занимает слишком много пространства на диске, а выбор основных принципов для принятия решений о необходимых ограниче- ниях. Следующие вопросы являются ключевыми: Какой объем дискового пространства на одного пользователя следует считать разумным для Вашей системы? Если пользователь перерасходовал норму, скажем, на 25%, то не может ли это означать, что его работа действительно требует повышенного объема памяти? Ощущается ли в Вашей системе в целом недостаток дискового пространства? Не следует ли пересмотреть существующие нормы? Полезную информацию можно получить при помощи команд du(1) и все той же find(1). Команда du выдает значение счетчиков блоков для файлов и ката логов, перечисленных в командной строке. Например: |$ du /usr выводит значения счетчиков блоков для всех каталогов файловой системы /usr. При помощи опций можно отрегулировать форму выда чи желаемым образом. Например, можно для каждого входа выпол- нить команду du -s, чтобы проконтролировать объем памяти, зани маемый каждым пользователем. Команду find можно применять для выявления файлов, размер кото- рых превышает заданный предел: |$ find /usr -size +10 -print В данном случае будут выданы маршрутные имена всех файлов из каталогов файловой системы /usr, размер которых превышает 10 блоков (по 512 байт). Аналогичную информацию можно получить при помощи команды sysadm filesize, см. процедуру 5.3. Сохранение и восстановление файловых систем Очень часто значимость разработки и четкого выполнения плана работ по сохранению файловых систем не осознается в полной мере до тех пор, пока не возникла ситуация, когда данные утрачены и восстановить их невозможно. Сохранение файловых систем требует времени. Еще больше времени займут попытки восстановить пропав- шие или разрушенные данные с черновиков и распечаток или нау- гад. Ценность эффективного плана сохранения файловых систем заключается в том, что Вы получаете возможность легко восста навливать утраченные или разрушенные данные. Для выполнения полных и добавочных сохранений файловых систем на дискеты или ленты предусмотрены специальные разделы в меню администратора (см. процедуру 5.4). Копирование отдельных ката- логов и файлов на дискету или ленту можно произвести командой sysadm store или командой find(1) в сочетании с cpio(1). Пере- писать каталоги и файлы обратно на жесткий диск можно при помо- щи sysadm restore или команды cpio с соответствующими парамет- рами. Другой способ сохранения информации в системе UNIX - это копи- рование файловых систем по высокоскоростной линии передачи дан- ных на компьютер с большим объемом стабильной памяти. Пропуск- ная способность линии и объем стабильной памяти должны быть достаточны для регулярного выполнения процедуры копирования. Ваш план сохранения может включать все эти методы, или только некоторые из них. Главное, что Вы должны сделать - это оценить потребности сохранения файловых систем на Вашем компьютере и выработать соответствующий план. По мере изменения характера работы в системе план необходимо пересматривать. Имеется специ альное системное средство в помощь администратору, которое поз- воляет установить контроль за выполнением расписания работ по сохранению файловых систем; оно описано ниже в этой главе в разделе "Напоминания о плановых сохранениях файловых систем". Полное сохранение Процедура полного копирования, которая реализуется специальными административными средствами, производит копирование каталогов и файлов указанной смонтированной файловой системы на дискеты или ленту. Единая стратегия сохранения файловых систем формиру- ется на основе сочетания полных и дополнительных резервных ко- пий. Полные копии можно выполнять и без промежуточных дополн тельных копий, но дополнительным копиям должны предшествовать хотя бы одна полная, которая составляет их базу. Если сохранение идет на дискеты, то Вы должны иметь наготове достаточное их число для записи всех сохраняемых каталогов и файлов. Если сохранение идет на ленту, то следует иметь в виду, что лента может иметь объем от 45Мб до 155Мб в зависимости от тип имеющегося у Вас оборудования. Время сохранения на ленты су щественно меньше, чем на дискеты; запись 45-мегабайтной ленты идет около 20 мин. Дополнительные копии Процедура дополнительного копирования, производимая специальны- ми средствами администратора, копирует файлы, которые измени- лись с момента последнего сохранения, на дискеты или ленту. Примечание При дополнительном сохранении копируются не все изме нившиеся каталоги и файлы. В каталоге /etc/save.d/ex cept специфицируются файлы и каталоги, которые НЕ БУДУТ копироваться. Типичный пример файла /etc/save.d/except изображен на рис. 5-7. Дополнительная резервная копия создается быстрее, чем полная, по той очевидной причине, что выбираются только файлы, изменив- шиеся с момента последнего (полного или дополнительного) сохра- нения. Тем не менее, дополнительные сохранения хотя и позволя- ют сберечь время, но могут потребовать значительного числа до- полнительных дискет; а время, затрачиваемое на восстановление с дополнительных сохранений, может перекрыть всю достигнутую эко номию. Рис. 5-7. Пример файла /etc/save.d/except |# Patterns of filenames to be excluded from saving by savefiles. |# These are ed(1) regular expressions. |/.news_time$ |/.yesterday$ |/a.out$ |/core$ |/dead.answer$ |/dead.letter$ |/ed.hup$ |/nohup.out$ |/tmp/ |^/etc/mnttab$ |^/ets/save.d/timestamp/ |^/etc/utmp$ |^/etc/wtmp$ |^/usr/adm/ |^/usr/at/ |^/usr/crash/ |^/usr/dict/ |^/usr/games/ |^/usr/learn/ |^/usr/news/ |^/usr/spool/ |^/usr/tmp/ Ключевой вопрос в формировании стратегии сохранений - это опре- деление момента, когда следует сделать очередную полную копиию. Вот несколько соображений на этот счет. Если для копирования используются дискеты, то сколько дискет Вы хотите выделить для дополнительных копий? Пример для ил- люстрации: если дополнительные копии делаются ежедневно, а полные - раз в месяц, то на сохранение файловой системы в 20Мбайт при активном ее использовании уйдет более 40 дискет. Сколько времени Вы хотите выделить для создания полной копии? Чем меньше дискет отводится для поддержания библиотеки ре- зервных копий, тем чаще придется делать полные копии. Полные копии могут потребовать в 8-10 раз больше времени, чем одна дополнительная. Сколько времени Вы готовы затратить на восстановление всей файловой системы с дискет? Для полного восстановления файло- вой системы необходимо прочитать дискеты с одной полной копии и со всех дополнительных. (Это весьма сложный процесс - в идеале Вам никогда не придется восстанавливать всю файловую систему полностью.) Какова интенсивность модификации рассматриваемой файловой системы? Затрагивают ли изменения всю файловую систему или только небольшой процент файлов? Если изменения происходят часто и охватывают большую часть файловой системы, то разум- нее, по-видимому, запланировать более частые полные сохране- ния. Если изменения концентрируются на небольшом числе фай- лов, то возможно, следует включить в общий план сохранения ряд выборочных резервных копий. Выборочные резервные копии Отдельные каталоги и файлы можно быстро переписать на одну дис кету при помощи команд find(1) и cpio(1). Объем данных, копиру- емых на дискету, должен быть не более 800 блоков (по 1024 байт). Прежде чем копировать выбранные каталоги или файлы, про- верьте общее число блоков в них. Сочетание команд find и cpio можно использовать также для сох ранения каталогов и файлов на ленте. На ленте, в зависимости от типа Вашего оборудования, помещается от 45 000 до 150 000 бло- ков. Напоминания о плановых сохранениях файловых систем Специальный раздел в меню администратора FILE MANAGEMENT дае возможность предусмотреть напоминания для самого себя о плано вых сохранениях файловых систем. Средство подготовки напомина ний позволяет делать две вещи: 1. Предусмотреть выдачу напоминаний, т. е. дать системе указа- ние типа: "Если машина выключается в такое-то время, то пош- ли на консоль сообщение о том, что нужно сохранить такие-то и такие-то файловые системы." 2. Предусмотреть проверку напоминаний, т. е. дать системе ука зание типа: "Если подошло указанное время, а машина не была выключена, то просмотри файл напоминаний и выдай сообщения, которые были бы выданы в случае выключения системы". Данный механизм не освобождает Вас от необходимости разработки рационального распорядка сохранений. Он лишь напоминает Вам о запланированных Вами мероприятиях. О том, как применяется меха- низм напоминаний, подробно рассказано в процедуре 5.4. Для тех же целей можно воспользоваться услугами процесса cron(1M), пре- дусмотрев выдачу соответствующих напоминаний в файле cron- tab(1). Восстановление файловой системы с сохраненных копий С сохраненных копий файловой системы можно восстанавливать от дельные файлы, структуру каталогов или всю совокупность файлов. Для любого из трех типов восстановления можно применить команду sysadm restore(1) (см. примеры в процедуре 5.4). Восстановление можно провести и командами системы UNIX: сделай- те текущим нужный каталог и выполните |$ cpio -icdumv < /dev/rdiskette если ввод идет с НГМД. Дискеты должны быть те самые, на которые было сделано сохранение, и вставлять их нужно в том же порядке, как и при сохранении (см. обсуждение этого вопроса в разделе "Выборочное резервные копии"). ВОЗМОЖНЫЕ НЕПОЛАДКИ В ФАЙЛОВОЙ СИСТЕМЕ Причины, которые могут приводить к порче файловой системы, свя- заны в основном с ошибками при записи указателей или счетчиков на внешние носители. Это может произойти в результате аппаратных сбоев аварийного завершения программ ошибок пользователя или в результате комбинации аппаратных и программных ошибок и неверного выполнения процедур. Аппаратные сбои Эффективных способов, позволяющих предсказать когда случится аппаратный сбой, не существует. Лучшее, что Вы можете сделать - это четко следовать рекомендованным процедурам диагностики и ухода. На большинстве компьютеров имеется утилита, которая от- мечает дефектные блоки и при попытке записи в них обеспечивает использование вместо них блоков из области замещения (см. гл.4 "Обслуживание дисков и лент"). Аварийное завершение программ Ошибки, которые привели к аварийному завершению программы, мо- гут быть связаны с потерей каких-то данных. В целом, здесь трудно проводить обобщения поскольку спектр возможностей чрез- вычайно широк. Пожалуй единственный разумный совет - подвергай- те программы исчерпывающему тестированию, прежде чем приступ- рить к их применению для обработки ценной информации. Ошибки пользователя Как ни прискорбно это признавать, но, пожалуй, основные источ- ники порчи системы - ошибки пользователей. Приведем четыре пра- вила, которым должны следовать все, кто занимается обслуживани- ем файловых систем. 1. ВСЕГДА проверяйте файловую систему, прежде чем смонтировать ее. Ничто так не осложняет очистки и исправления испорченной файловой системы, как допуск к работе с ней после того, как она была испорчена. 2. НИКОГДА не удаляйте файловую систему физически, не размонти- ровав ее. 3. ВСЕГДА применяйте команду sync перед выключением системы и перед размонтированием файловой системы. 4. НИКОГДА физически не защищайте от записи монтируемую файло вую систему, если только Вы не собираетесь смонтировать ее только на чтение. Непредсказуемый характер возможных повреждений файловых систем подчеркивает важность установления и соблюдения практики регу- лярных сохранений. Это наиболее эффективная форма защиты от по- терь данных.