Operating System
Вид материала | Реферат |
СодержаниеОбеспечение безопасности системы |
- The design of the unix operating system by Maurice, 9215.6kb.
- Уровни рассмотрения, 314.07kb.
- Курс по операционным системам (на примере ос windows) Основан на учебном курсе Windows, 29.21kb.
- Выполнил ученик 11 «А» класса, 443.51kb.
- Ос лекция 1 (2-й семестр – временно), 101.4kb.
- 1. ms sql server. Общие сведения, 66.03kb.
- Лекция Сущность, цели и задачи финансового менеджмента, 126.51kb.
- Лекция 10. Файловые системы Unix, 116.79kb.
- Д. В. Серебряков по изданию: advanced selling strategies (The Proven System of Sales, 3304.13kb.
- 1. ао «Казахстанская компания по управлению электрическими сетями» (Kazakhstan Electricity, 243.17kb.
Файловые системы в системах 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)
|
(Клавиша
суперблоке к другому.) Выводятся следующие величины: адрес (в
восьмеричном виде), записанное по этому адресу значение (также в
восьмеричном виде) и его десятичный эквивалент (в скобках). Убедиться в том, что вы находитесь в нужном месте суперблока, можно следующим образом: третья выведенная на экран величина (после второго нажатия клавиши
Со значением 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 нужно дважды нажать
.
- 4-25 -
Замечание
Если при вводе начального адреса на экране появится следующее сообщение об ошибке:
block out of range (блок вне диапазона)
то это значит, что запорченное значение fsize настолько мало,
что программа fsdb решила, что вы не сможете продвинуться в суперблоке так далеко. Чтобы отключить регистрацию ошибок, введите заглавную букву O. Теперь можно беспрепятственно вводить адрес.
В любой момент можно нажать клавишу INTERRUPT (DEL) или
Предположим, что при переходе ко второму значению в суперблоке на экран выдано значение 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