- 4-4 - ТИПЫ ФАЙЛОВЫХ СИСТЕМ Система может быть настроена на работу с четырьмя различны- ми типами файловых систем: * XENIX * UNIX * DOS * AFS (Acer Fast Filesystem) Внутренние структуры файловых систем UNIX и XENIX немного различаются, но это не приводит к серьезным последствиям. По умолчанию принимается быстрая файловая система типа AFS (Acer Fast Filesystem), которая работает значительно быстрее и не доступна в других системах UNIX. В каждой из этих файловых сис- тем размер блока принимается равным 1К. Файловые системы DOS об- суждаются в главе "Использование DOS и OS/2" настоящего руко- водства. Преобразование файловых систем UNIX в AFS Файловую систему UNIX можно в любое время преобразовать в файловую систему AFS. Для этого используется опция Ъ2-Cclustersize команды fsck(ADM), которая обычно применяется для проверки и восстановления файловых систем. Опция -C изменяет размер класте- ра, чтобы заменить формат файловой системы на формат AFS. Аргу- мент clustersize должен быть степенью числа 2 и меньше 16 (реко- мендуется значение 8). Реальные преимущества файловой системы AFS наглядно прояв- ляются при использовании новой файловой системы. Будет очевидным увеличение скорости работы преобразованной файловой системы AFS; оно проявится только при добавлении новых файлов к файловой сис- теме. Преобразование файловой системы, которая почти заполнена, не влечет никаких или почти никаких выгод; если до заполнения не хватает нескольких блоков, преобразование просто не выполнится. (Полное описание команды fsck см. в разделе "Целостность файло- вой системы".) Замечание Перед выполнением команды fsck следует демонтировать файло- вую систему. - 4-5 - Формат команды: Ъ2fsck -s -Cclustersize device Здесь device - имя устройства файловой системы в /dev. Сле- дует отметить, что должна присутствовать также и опция -s. . - 4-6 - ОБЕСПЕЧЕНИЕ СВОБОДНОГО ПРОСТРАНСТВА В ФАЙЛОВОЙ СИСТЕМЕ Сопровождение файловой системы (это одна из важнейших задач администратора системы) обеспечивает нормальную работу операци- онной системы и чистоту файловых систем, а также гарантирует на- личие достаточного пространства для всех пользователей. Для соп- ровождения файловых систем администратор системы должен отслежи- вать свободное пространство в каждой файловой системе и выпол- нять корректирующие действия в случаях, когда свободного прост- ранства становится слишком мало. В данной главе описываются команды сопровождения файловой системы. Эти команды сообщают, сколько пространства использует- ся, определяют редко используемые файлы и удаляют или восстанав- ливают испорченные файлы. Система UNIX работает лучше всего, когда в каждой файловой системе имеется по крайней мере 15% свободного пространства. В любой системе объем свободного пространства зависит от размера диска, содержащего файловую систему, и от количества файлов на диске. Поскольку каждый диск имеет фиксированный объем прост- ранства, важно контролировать число записанных на диске файлов. Если в файловой системе меньше 15% свободного пространства, работа системы обычно замедляется. Если нет доступного свободно- го пространства, система прекращает все попытки записи в файло- вую систему. Это означает прекращение обычной работы пользовате- ля на компьютере (создание новых файлов и расширение существую- щих). Единственное спасение для файловой системы, в которой мень- ше 15% свободного пространства, состоит в удалении одного или нескольких файлов из файловой системы. В следующих разделах опи- сываются стратегии обеспечения доступного свободного пространс- тва. Стратегии обеспечения свободного пространства Администратор системы должен регулярно проверять количество свободного пространства во всех смонтированных файловых системах и напоминать пользователям о том, что не следует оставлять в своих каталогах неиспользуемые файлы. Такое напоминание можно включить в файл сообщения текущего дня /etc/motd. Кроме того, система выполняет команду cleantmp(ADM) для очистки каталога /tmp. Можно отредактировать файл /etc/default/cleantmp, чтобы определить, как часто следует очи- щать от файлов ключевые каталоги (по умолчанию /tmp). Подробнос- ти см. в странице руководства, касающейся cleantmp(ADM). . - 4-7 - Если доля свободного пространства опускается ниже 15%, ад- министратор системы должен сделать следующее: 1) послать пользователям общесистемное сообщение с просьбой удалить неиспользуемые файлы; 2) выявить чрезмерно большие каталоги и файлы и передать по почте их владельцам просьбу удалить ненужные файлы; 3) отыскать и удалить временные файлы и файлы с именем core; 4) очистить содержимое файлов системного журнала; 5) уменьшить фрагментацию диска: сделать полную копию фай- ловой системы, удалить все файлы и затем снова восстановить их с резервной копии; 6) если системе хронически не хватает свободного пространс- тва, возможно понадобится создать и смонтировать дополнительную файловую систему. Эти действия подробно описаны в последующих разделах. Вывод на экран величины свободного пространства С помощью команды df ("disk free" - "свободный диск") можно узнать, сколько свободного пространства имеется в конкретной файловой системе. Эта команда выводит на экран количество "бло- ков", доступных в данной файловой системе. Блок состоит из 512 символов (или байтов) данных. Формат команды df: Ъ2df specialfile @ Пользователи sysadmsh выбирают System->Report->Disk В качестве specialfile можно задать имя специального файла UNIX, который соответствует дисководу, содержащему файловую сис- тему. Если имя специального файла не задано, то будет выдано свободное пространство всех нормально смонтированных файловых систем. Например, чтобы вывести информацию о свободном пространстве корневой файловой системы /dev/root, следует ввести df /dev/root и нажать клавишу <Return>. На экран выйдет имя специального фай- ла и количество свободных блоков. Можно узнать процентное содер- жание свободного пространства по отношению к полному объему пространства в системе с помощью команды df -v . - 4-8 - Общесистемное сообщение Если свободного пространства мало, можно послать общесис- темное сообщение всем пользователям системы, используя команду wall ("write to all" - "писать всем"). Эта команда копирует со- общения, которые вы вводите со своего терминала, на терминалы всех пользователей, зарегистрированных в данный момент. Чтобы послать сообщение, нужно ввести wall и нажать <Return>. Введите сообщение; если нужно начать новую строку, нажмите <Return>. После того, как сообщение введено, нажмите <CTL>d. Сообщение появится на экранах всех терминалов в системе. Чтобы выйти из среды команды wall, нажмите <CTL>d; в результате связь с другими терминалами прервется. Вывод на экран информации об использовании диска С помощью команды du можно вывести на экран количество бло- ков, используемых в каталоге. Эта команда полезна для выявления чрезмерно больших каталогов и файлов. Формат команды du: Ъ2du directory Необязательный параметр directory может быть именем катало- га в смонтированной файловой системе. Если имя каталога не зада- но, на экран выйдет число блоков в текущем каталоге. Например, чтобы вывести количество блоков, используемых в каталоге /usr/johnd, введите du /usr/johnd и нажмите <Return>. На экране появятся имена всех файлов и под- каталогов каталога /usr/johnd, а также число используемых блоков. . - 4-9 - Вывод на экран блоков по владельцам С помощью команды quot ("quota" - "доля") можно вывести на экран список пользователей и количество принадлежащих каждому из них блоков. Формат команды: quot specialfile В качестве specialfile нужно задать имя специального файла, который соответствует дисководу, содержащему файловую систему. Например, чтобы вывести список владельцев файлов файловой системы, находящейся на жестком диске /dev/hdl, введите quot /dev/hdl и нажмите <Return>. На экране появится список пользователей, имеющих файлы в этой файловой системе, и число блоков в этих файлах для каждого пользователя. Передача пользователю сообщения по почте Если у какого-либо пользователя обнаруживаются слишком большие каталоги или файлы, ему можно послать персональное сооб- щение с помощью команды mail. Чтобы начать посылку сообщения по почте, введите Ъ2mail login-name и нажмите <Return>. В качестве login-name должно быть задано ре- гистрационное имя получателя. Чтобы послать сообщение, введите его, нажмите <Return> и затем нажмите <CTL>d. Если сообщение состоит более чем из одной строки, в конце каждой строки нажи- майте <Return>. Команда mail скопирует сообщение в почтовый ящик пользователя, где пользователь может его посмотреть с помощью команды mail. Подробности см. в документе "Руководство пользова- теля" (User's Guide). Поиск файлов С помощью команды find можно найти все файлы с заданным именем, размером, датой создания, владельцем и/или датой послед- него доступа. Эта команда полезна для выявления редко используе- мых и слишком больших файлов. Формат команды find: find directory parameters . - 4-10 - В качестве directory нужно задать имя первого просматривае- мого каталога. (Команда find также просматривает все подкаталоги этого каталога.) Параметрами (parameters) являются специальные имена и значения, которые предписывают команде, что нужно ис- кать. Все подробности см. в описании find(C) в документе "Спра- вочник пользователя" (User's Reference). Наиболее часто исполь- зуются следующие параметры: Ъ2-name file Ъ2-atime number -print Параметр -name заставляет команду искать указанный файл file. Параметр -atime задает поиск файлов, к которым не было доступа в течение заданного количества дней. Параметр -print за- дает вывод на экран местоположения всех обнаруживаемых файлов. Например, чтобы найти все файлы с именем temp в каталоге /usr, введите find /usr -name temp -print и нажмите <Return>. На экран будут выведены местоположения всех файлов, найденных командой. Поиск файлов core и временных файлов С помощью команды find можно отыскивать файлы core и вре- менные файлы. Файл core содержит копию прекращенной программы. Система UNIX иногда создает такой файл, если программа привела к ошибке, которую не в состоянии исправить. Временный файл содержит дан- ные, созданные в качестве промежуточного этапа в процессе выпол- нения программы. Этим файлом можно воспользоваться, если в прог- рамме оказалась ошибка или она была преждевременно остановлена пользователем. Имя временного файла зависит от создавшей его программы. В большинстве случаев пользователю не нужны ни файлы core, ни временные файлы, и их можно спокойно удалять. Для отыскания файлов core или временных файлов можно задать поиск файлов, к которым за некоторый период времени не было дос- тупа. Например, для поиска всех файлов core в каталоге /usr, к которым не было доступа в течение недели, введите find /usr -name core -atime +7 -print и нажмите <Return>. . - 4-11 - Очистка журнальных файлов В системе UNIX предусмотрено несколько файлов, называемых журнальными, которые содержат информацию об использовании систе- мы. Когда генерируется новая информация, система автоматически присоединяет ее в конец соответствующего файла, сохраняя преды- дущее содержимое файла. Это значит, что размер каждого файла растет по мере добавления новой информации. Поскольку журнальные файлы могут быстро стать довольно большими, необходимо периоди- чески очищать их, удаляя их содержимое. Для очистки журнального файла введите Ъ2cat < /dev/null > filename где filename - полное имя пути для журнального файла, который нужно очистить. Обычно в журнальный файл поступает информация, используемая одной и только одной программой, поэтому его имя обычно отсылает к этой программе. Аналогично формат файла зави- сит от использующей его программы. В некоторых случаях очистка файла влияет на последующий вы- вод соответствующей программы. Например, очистка файла /etc/ddate приведет к тому, что следующее дублирование будет пе- риодическим дублированием. Удаление и восстановление файловой системы Если ваша система была некоторое время в работе, постоянное создание и удаление файлов приводит к ситуации, называемой фраг- ментацией диска. Это означает, что файлы файловой системы запи- сываются на жесткий диск маленькими частями. Когда файл пишется на более чем одну часть диска, используется небольшой объем пространства диска. Можно восстановить пространство файловой системы (обычно от 5 до 10 процентов), если, предварительно сде- лав полную копию всех файлов файловой системы, удалить все файлы с жесткого диска и затем восстановить их с резервной копии. Что- бы сделать полную резервную копию системных файлов, прочитайте главу "Дублирование файловых систем" настоящего руководства, где приводятся инструкции по дублированию и восстановлению файловых систем. (Фрагментация диска - это проблема производительности; подробнее см. главу "Настройка производительности системы" нас- тоящего руководства.) . - 4-12 - Так как файлы целиком переписываются на диск, каждый файл записывается одним куском, и фрагментация уменьшается. Будет восстановлен небольшой объем пространства. Было бы неплохо вы- полнять эту процедуру примерно раз в год для интенсивно исполь- зуемых систем, и немного реже - для умеренно используемых сис- тем. Перед началом этих работ убедитесь в наличии полной, точной и читаемой копии, чтобы не потерять файлы. Расширение файловой системы Если свободного пространства хронически мало, может ока- заться полезным расширить объем памяти системы, включив второй жесткий диск, как описано выше в данной главе. Как только он смонтирован, можно использовать эту новую файловую систему для работы, или даже копировать в нее пользовательские или системные каталоги. Хроническая нехватка пространства обычно вызывается тем, что в системе больше пользователей, чем текущий жесткий диск в состоянии нормально обработать, или что имеется слишком много каталогов или файлов. В обоих случаях создание новой файловой системы позволяет перевести некоторых пользователей или ка- кие-либо каталоги с жесткого диска, освобождая значительное ко- личество пространства существующей файловой системы и улучшая функционирование системы. . - 4-13 - ФАЙЛОВЫЕ СИСТЕМЫ И БОЛЬШИЕ КАТАЛОГИ Рекомендуется избегать использования каталогов, размер ко- торых больше, чем необходимо. Следует знать несколько специаль- ных размеров. Каталог, содержащий строки для не более чем 30 файлов (плюс обязательные строки . и ..), вмещается в один блок на диске, и его просмотр весьма эффективен. Каталог, содержащий до 286 строк, по-прежнему считается небольшим; каталог большего размера, используемый как рабочий, - это обычно катастрофа. Осо- бенно важно, чтобы были небольшими каталоги регистрации, жела- тельно не больше блока. Заметим, что, как правило, каталоги не сжимаемы. Очень важно это уяснить, так как если ваш каталог пре- вышает пороговое значение 30 или 286, поиск становится неэффек- тивным; более того, если удалить файлы таким образом, что их число окажется меньше соответствующего порогового значения, сис- тема по-прежнему будет неэффективно работать с каталогом. . - 4-14 - ИЗМЕНЕНИЕ/ДОБАВЛЕНИЕ ФАЙЛОВЫХ СИСТЕМ НА ПЕРВИЧНОМ ЖЕСТКОМ ДИСКЕ Всегда полезно заранее спланировать компоновку жесткого диска, как описано в документе Installation Guide. Если вы реши- ли изменить число файловых систем на жестком диске, вам следует сделать резервную копию вашей системы и выполнить повторную ус- тановку, как описано в главе "Повторная установка и модификация системы" документа Installation Guide. В процессе установки вос- пользуйтесь ручным управлением компоновки и перераспределите пространство на диске, как требуется. Важно понять, что нельзя использовать резервные копии, созданные утилитой xbackup(ADM). Копиями, создаваемыми этой утилитой, нельзя пользоваться для восстановления файловых систем, которые имели больший размер, чем файловые системы, в которые вы планируете их восстановить. Это остается в силе, даже если резервная файловая система была не полна. Например, если вы сделали копию 20-мегабайтной файло- вой системы, заполненной лишь на 50 процентов, вы не сможете восстановить тома с резервной копией в 15-мегабайтную файловую систему. В главе, посвященной повторной установке, поясняется, что для дублирования системы следует воспользоваться утилитами, основанными на cpio(C) (такими, как выбор Backups->Create в sysadmsh). . - 4-15 - ЦЕЛОСТНОСТЬ ФАЙЛОВОЙ СИСТЕМЫ Уже упоминалось, что файловая система - это раздел операци- онной системы. В обязанности операционной системы входит обеспе- чение целостности данных файловой системы. Действительная потеря данных - большая редкость; файловые системы UNIX очень устойчивы к порче данных. Это вызвано наличием некоторой избыточности в специальных структурах, невидимых пользователю. Именно эти структуры обеспечивают целостность файловой системы. Например, если при работе системы выходит из строя питание, теряется очень мало информации. Любое нарушение обычно затрагивает один или два файла, делая их недоступными. Почти во всех случаях операционная система может исправить любое повреждение файлов. Очень редко повреждение делает недоступной всю файловую систему. Для исправления поврежденных файловых систем операционная система пользуется программой fsck ("filesystem check" - "про- верка файловой системы"). Эта программа проверяет совместимость файловой системы. В случаях потери содержимого файла (что бывает редко) единственный способ восстановить потерянные данные - вос- пользоваться резервной копией файловой системы. Программа 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 и нажмите <Return>. Программа проверит файловую систему и выдаст следующие сообщения о ходе своей работы: +-------------------------------------------------------------- | ** 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, прежде чем вся файловая система будет очище- на. Полный список сообщений об ошибках можно найти в странице Руководства, соответствующей fsck(ADM). . - 4-20 - Краткое описание этапов fsck Команда fsck просматривает и проверяет каждую из вышеупомя- нутых структур. На каждом этапе выполняется сравнение компонен- тов и проверка согласованности этих компонентов друг с другом. На этапе 1 проверяются блоки и размеры. Команда fsck читает список индексных дескрипторов файлов, чтобы определить размеры и отыскать блоки, используемые каждым из файлов. Эти дескрипторы файлов проверяются на действительность (проверка типа и размера дескриптора, проверка на равенство нулю счетчика связей) и на на- личие дефектных или дублированных блоков. (Дефектными являются блоки, значения которых выходят за границы файловой системы.) Когда fsck спрашивает, следует ли чистить дескриптор файла, это означает обнуление в нем дефектной информации. В итоге файл или каталог, соответствующий этому дескриптору, будет удален. Дубли- рованный блок означает, что два дескриптора указывают один и тот же блок на диске. Команда fsck пытается определить оригинальный дескриптор, чтобы скорректировать дубликат на этапе 2. На этапе 2 проверяются имена путей. Должны быть удалены эле- менты каталога для файлов, удаленных на этапе 1. На этапе 2 исп- равляются ошибки, вызванные неправильным состоянием индексных дескрипторов файлов, выходом указателей этих дескрипторов за пре- делы диапазона; исправляются каталоги, указывающие на дефектные дескрипторы файлов, как описано выше. В случае файлов с дублиро- ванными блоками, обнаруженными на этапе 1, fsck попытается уда- лить оба файла (это одна из немногих ситуаций, требующих вмеша- тельства администратора системы). На этапе 3 проверяются связи. На этапе 2 удалены каталоги, не указывающие на действительные файлы. На этапе 3 восстанавли- ваются связи с файлами, которые выпали из структуры каталога. Все действительные файлы, на которые нет ссылки, помещаются в специальный каталог под названием lost+found. Поскольку каталог был отсоединен, имя файла теряется; в каталоге lost+found файлу присваивается номер. На этапе 4 проверяются счетчики обращений. Команда fsck про- веряет счетчик связей для каждого элемента, благополучно прошед- шего этапы 2 и 3. В некоторых случаях файлы, на которые не было указателя в структуре каталога, но которые все же обладают ин- дексными дескрипторами, могут быть вновь связаны с файловой системой по каталогу lost+found. На этапе 5 проверяется свободный список. Команда fsck изу- чает список свободных блоков, составляемый файловой системой, и разрешает отсутствующие или неназначенные блоки, которые были ранее назначены или удалены. При обнаружении нарушения целост- ности fsck выдает приглашение перестроить список. На этапе 6 восстанавливается свободный список. Система ре- конструирует список свободных блоков в соответствии с измененной файловой системой, если это было определено на этапе 5. . - 4-21 - Автоматическая проверка файловой системы Иногда операционная система во время старта выдает запрос на проверку файловой системы. Обычно это имеет место после не- нормального останова (например, в результате потери мощности в питании). После проверки файловой системы все файлы, разрушенные в процессе останова, восстанавливаются. Исправление файловой системы с помощью команды fsdb Если после фатального сбоя суперблок файловой системы ока- зывается настолько поврежден, что fsck не в состоянии его вос- становить, можно с помощью команды fsdb ("filesystem debugger" - "отладчик файловой системы") вручную исправить суперблок, наста- вив "заплат". С большой вероятностью команда fsdb понадобится, если fsck аварийно прекращается или выдает слишком много ошибок. Так как fsdb - очень мощное средство, позволяющее не- посредственно изменять суперблок (который содержит важную инфор- мацию о файловой системе), использовать его следует с величайшей осторожностью. Почти во всех случаях, когда требуется применить fsdb, приходится менять только одну или две ячейки суперблока, представляющие fsize и isize; им возвращаются значения, обычные для вашей файловой системы. fsize - общее число блоков в файловой системе; isize - количество индексных дескрипторов файлов, назна- ченных файловой системе. Далее приводятся порядок использования fsdb в целях измене- ния значений fsize и isize. 1. Получите нормальные значения fsize и isize в вашей файло- вой системе. Вы должны были записать их согласно инструкции в конце процедуры установки, описанной в документе Installation Guide. Если вы этого не сделали, можно получить размер файловой системы с помощью divvy и оценить число индексных дескрипторов файлов. Для определения размера файловой системы воспользуйтесь командой divvy -b 1 -c 1 Размеры файловых систем выводятся на экран в виде диапазона но- меров блоков. Нужно вычесть номер начального блока из номера последнего, и получится размер файловой системы. Приблизительное число индексных дескрипторов файлов равно размеру, умноженному на .125. 2. Убедитесь в том, что fsize и isize вашей файловой систе- мы запорчены. 3. Найдите fsize и isize в суперблоке. 4. Установите fsize и isize равными их нормальным значениям. . - 4-22 - Все эти шаги подробно описаны в последующих разделах. В странице Руководства, соответствующей fsdb(ADM), приведено нес- колько других способов применения fsdb для просмотра и обработки суперблока; однако эти возможности рекомендуется использовать только опытным администраторам системы. Проверка нарушения значений fsize и isize При проверке файловой системы после фатального сбоя команда fsck считывает из суперблока размер файловой системы. Если зна- чения fsize и isize, хранящиеся в этот момент в суперблоке, не являются нормальными значениями для файловой системы, fsck выда- ет на экран результаты проверки размера и заканчивает работу, как показано в следующем примере: +-------------------------------------------------------------- | # fsck /dev/root | /dev/root | /dev/root File System: / Volume: root | Size check: fsize 0 isize 0 | # | Сравните значения fsize и isize, выданные командой fsck (в нашем примере - 0), с нормальными значениями вашей файловой сис- темы. Если они отличаются, придется выполнить fsdb, чтобы заме- нить значения в суперблоке на нормальные значения файловой сис- темы. Иногда неправильной оказывается только одна из этих вели- чин, хотя информация, выданная fsck, показывает нарушение обоих значений. При выполнении fsdb вы увидите фактические значения fsize и isize, записанные в суперблоке, и поймете, сколько зна- чений вам придется менять - одно или оба. Для выполнения fsdb введите следующую команду, задав в качестве filesystem имя фай- ловой системы: Ъ2fsdb /dev/filesystem Полученный в результате вывод будет аналогичен приведенно- му в следующем примере: +-------------------------------------------------------------- | # fsdb /dev/root | /dev/root(/): 1K byte Block File System | FSIZE = 1895959976, ISIZE = 7216 | В данном примере fsdb показывает, что некорректно только значение fsize (хотя fsck выдала некорректность обоих). fsdb всегда работает аккуратнее. . - 4-23 - Поиск fsize и isize в суперблоке Чтобы заново установить значения fsize и/или isize, нужно уметь отыскивать эти значения в суперблоке. Это можно сделать, перейдя к первому адресу суперблока и проверив первые два значе- ния, которые и есть суть fsize и isize. В файловых системах UNIX суперблок начинается по адресу 512, а в файловых системах XENIX - по адресу 1024. Вот пример для файловой системы UNIX: +-------------------------------------------------------------- | # fsdb /dev/root | /dev/root(/): 1K byte Block File System | FSIZE = 28890, ISIZE = 7216 | 512 | 001000: 000705 (453) | <Return> | 001002: 000000 (0) | <Return> | 001004: 070332 (28890) | (Клавиша <Return> используется для перехода от одного значения в суперблоке к другому.) Выводятся следующие величины: адрес (в восьмеричном виде), записанное по этому адресу значение (также в восьмеричном виде) и его десятичный эквивалент (в скобках). Убе- диться в том, что вы находитесь в нужном месте суперблока, можно следующим образом: третья выведенная на экран величина (после второго нажатия клавиши <Return>) - fsize - должна совпадать со значением, выведенным командой fsdb при ее запуске (FSIZE). За- метим, что fsdb выдает значения в блоках по 1К. Если вы возьмете размер файловой системы у команды df, то он окажется ровно вдвое больше размера, сообщаемого командой fsdb. Это связано с тем, что df выдает ответы в 512-байтных блоках. Если вам нужно изме- нить значение FSIZE, имея размер, выданный командой df, его сле- дует разделить на два. Если же вы использовали номер из команды divvy, его преобразовывать не надо, так как divvy, как и fsdb, пользуется блоками 1К. Со значением ISIZE дело обстоит иначе. Это значение, выдан- ное командой fsdb, нужно преобразовать, прежде чем сравнивать со значением первой величины в суперблоке (isize). Значение isize, записанное в суперблоке, является адресом первого блока, расположенного после блоков, которые выделены для индексных дескрипторов файлов. Чтобы сделать значение isize более выразительным, fsdb преобразует этот адрес в число назначенных индексный дескрипторов файлов (ISIZE). Это число нужно преобразо- вать обратно в адрес блока путем деления ISIZE на 16 (число деск- рипторов в блоке) и сложения с 2 (для учета первых блоков файло- вой системы, которые используются для других целей: блок началь- ной загрузки и суперблок). Результат (isize) должен равняться числу, выведенному на экран в качестве первого адреса в супербло- ке. . - 4-24 - Устан