Operating System

Вид материалаРеферат

Содержание


Обеспечение безопасности системы
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   36

Файловые системы в системах 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

* Phase

* Phase

* Phase

* Phase

1

2

3

4

5

Check Blocks and

Pathnames

Connectivity

Reference Counts

Check Free List

Sizes

Если на одном из этих этапов обнаружится поврежденный файл, команда спросит, следует ли его исправить или восстановить. Что­бы исправить запорченный файл, введите 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)

|

| 001002: 000000 (0)

|

| 001004: 070332 (28890)

|

(Клавиша используется для перехода от одного значения в

суперблоке к другому.) Выводятся следующие величины: адрес (в

восьмеричном виде), записанное по этому адресу значение (также в

восьмеричном виде) и его десятичный эквивалент (в скобках). Убе­диться в том, что вы находитесь в нужном месте суперблока, можно следующим образом: третья выведенная на экран величина (после второго нажатия клавиши ) - 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 -

Установка нормальных значений для fsize и isize

Теперь, когда вы знаете точное местоположение fsize и isize в суперблоке, вы можете использовать fsdb, чтобы перейти непос­редственно к соответствующему адресу, пройти суперблок по словам и присвоить адресу новое значение.

Замечание

Прежде чем пользоваться командой fsdb, убедитесь в том, что файловая система демонтирована.

Чтобы перейти к первому адресу суперблока, введите команду абсолютного адреса, который фиксирован для файловой системы (512 для файловых систем UNIX и 1024 для файловых систем XENIX). В следующем примере проверяется файловая система UNIX:

+--------------------------------------------------------------

| 512

| 001000: 000173 (123)

|

По умолчанию fsdb считывает адреса, вводимые вами в виде деся­тичных слов (512), а выводит адреса восьмеричными байтами (001000). Значение, хранящееся по заданному адресу, также выво­дится в восьмеричном виде (в скобках дается десятичный эквива­лент).

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

+--------------------------------------------------------------

| 002000: 000173 (123)

|

| 002002: 000000 (0)

|

| 002004: 007461 (3889)

|

В файловых системах UNIX для достижения значения fsize нужно дважды нажать , а в файловых системах XENIX - только один раз. (Это связано со способом хранения значений в супербло­ке для файловых систем UNIX.)

.

- 4-25 -

Замечание

Если при вводе начального адреса на экране появится следую­щее сообщение об ошибке:

block out of range (блок вне диапазона)

то это значит, что запорченное значение fsize настолько мало,

что программа fsdb решила, что вы не сможете продвинуться в су­перблоке так далеко. Чтобы отключить регистрацию ошибок, введите заглавную букву O. Теперь можно беспрепятственно вводить адрес.

В любой момент можно нажать клавишу INTERRUPT (DEL) или d, чтобы прекратить вывод адресов на экран.

Предположим, что при переходе ко второму значению в суперб­локе на экран выдано значение fsize, равное 0 (вместо нормально­го значения 3889):

+--------------------------------------------------------------

| 002000: 000173 (123)

|

| 002002: 000000 (0)

|

| 002004: 000000 (0)

|

Вы можете присвоить новое значение адресу, который вы види­те в данный момент, с помощью команды присваивания fsdb. (Перед тем, как вносить какие-либо изменения, убедитесь, что вы знаете, что вы собираетесь сделать. fsdb сразу пишет прямо на диск, не ожидая sync.) Введите знак равенства, и за ним - новое значение:

+--------------------------------------------------------------

| 002002: 000000 (0)

|

| 002004: 000000 (0)

| =3889

| 002004: 007461 (3889)

| q

|

Когда fsdb выдаст подтверждение на запрошенное вами измене­ние, выйдите из fsdb. Теперь снова можно попробовать выполнить fsck.

- 4-26 -

Замечание

Перед изменением isize не забудьте выполнить вычисления (деление на 16 и прибавление 2) для величины ISIZE, выданной ко­мандой fsdb во время нормальной работы системы. В случае fsize используйте значение FSIZE, выданное fsdb при нормальной работе системы, без каких-либо вычислений.

Глава 5

ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ СИСТЕМЫ

Введение 5-1

Что такое надежная система? 5-3

Концепции надежной системы 5-3

Работа надежной системы 5-7

Назначение административных ролей с помощью авторизаций 5-7

Административное управление подсистемами

с помощью sysadmsh 5-9

Назначение авторизаций ядра 5-9