ОС Linux. Руководство системного администратора
====================================================================
Версия 0.3
Август 1995
Ларс Виржениус (Lars Wirzenius)
.
- 2 -
Содержание
Глава 1 Введение 4
1.1 Проект Документирования Системы Linux 6
Глава 2 Обзор Системы Linux 8
2.1 Различные составляющие операционной системы 8
2.2 Важные составляющие ядра 9
2.3 Основные функции UNIX системы 10
2.3.1 init 10
2.3.2 Подключение к системе с терминалов 11
2.3.3 Syslog 11
2.3.4 Периодическое выполнение команд: cron и at 11
2.3.5 Графический интерфейс пользователя 12
2.3.6 Работа с сетью 12
2.3.7 Подключение к системе через сеть 13
2.3.8 Сетевые файловые системы 13
2.3.9 Почта 14
2.3.10 Печать 14
2.4 Структура файловой системы 15
Глава 3 Запуск Системы и Перезагрузка 16
3.1 Обзор 16
3.2 Процесс запуска при близком рассмотрении 17
3.3 Завершение работы и выключение системы 20
3.4 Перезагрузка системы 23
3.5 Однопользовательский режим работы 23
3.6 Дискеты для экстенной загрузки 23
Глава 4 Использование Дисков и Других Устройств 25
4.1 Типы устройств 26
4.2 Жесткие диски 27
4.3 Гибкие диски 30
4.4 Форматирование 31
4.5 Дисковые разделы 34
4.5.1 MBR, загрузочные сектора и таблица разделов 35
4.5.2 Расширенные и логические разделы 35
4.5.3 Типы разделов 37
4.5.4 Разделение жесткого диска 38
4.5.5 Файлы устройств и разделы 39
4.6 Файловые системы 39
4.6.1 Что такое файловая система 39
4.6.2 Типы файловых систем 41
- 3 -
4.6.3 Какую файловую систему устанавливать 44
4.6.4 Установка файловой системы 44
4.6.5 Монтирование и демонтирование 46
4.6.6 Поддержка работоспособности файловых систем 50
4.7 Диски без файловых систем 52
4.8 Распределение дискового пространства 53
4.8.1 Схемы разделения дисков 53
4.8.2 Требования к дисковому пространству 54
4.8.3 Примеры распределения жесткого диска 55
4.8.4 Использование дополнительного дискового пространства 55
4.8.5 Методы сохранения дискового пространства 55
Глава 5 Обзор Структуры Каталогов 57
5.1 Введение 57
5.2 Файловая система root 59
5.2.1 Каталог /etc 60
5.2.2 Каталог /dev 62
5.3 Файловая система /usr 63
5.4 Файловая система /var 64
5.5 Файловая система /proc 65
Глава 6 Упpавление Памятью 68
6.1 Что такое виpтуальная память 68
6.2 Создание swap области 69
6.3 Использование swap пpостpанства 70
6.4 Разделение swap областей с дpугими опеpационными 71
6.5 Размещение swap пpостpанства 72
6.6 Дисковый буфеp 73
Глава 7 Подключение и Выход из Системы 76
7.1 Подключение к системе чеpез теpминалы 76
7.2 Подключение к системе чеpез сеть 77
7.3 Что выполняет пpогpамма login 78
7.4 X и xdm 79
7.5 Контpоль доступа 79
7.6 Запуск оболочки 80
.
- 4 -
Глава 1 Введение
В этой книге рассматриваются аспекты системного
администрирования операционной системы Linux. В первую очередь
данное руководство предназначено для тех, кто практически ничего
не знает о системном администрировании, но ознакомлен с основами
работы с системой Linux, которые рассмотрены в книге "Руководство
Пользователя Системы Linux". В данном руководстве не уделяется
внимания проблемам, связанным с установкой системы (исчерпывающую
информацию можно получить из книги "Установка и Запуск Системы
Linux"). Во многих руководствах из серии LDP (Linux Documentation
Project) рассматриваются одни и те же вопросы с разных точек
зpения. Ниже содержится более подробная информация о руководствах
по системе Linux.
Что же называется системным администрированием Это все то,
что требуется для поддержки работоспособности компьютерной системы
(например, создание резервных копий некоторых файлов, установка
новых программ, создание и удаление пользователей, проверка
целостности файловой системы и т.д.). Если сравнивать компьютер с
домом, то системное администрирование можно назвать содержанием
этого дома, включающее в себя уборку, устранение различных
неисправностей и т.д. Но системное администрирование не называют
содержанием, так как тогда это было бы слишком просто.
Руководство составлено таким образом, что главы не зависят
друг от друга и могут быть рассмотрены отдельно. Например, для
получения информации по созданию резервных копий Вы можете
прочитать только одну главу. Это очень удобно и позволяет
использовать книгу в качестве справочного пособия, а также
избежать чтения всего руководства вместо нескольких разделов.
Однако, прежде всего это книга, а затем уже справочник.
Конечно, в этой книге не содержится всей необходимой
информации по системному администрированию, хотя много полезного
можно найти и в другой документации по системе Linux. В конце
- 5 -
концов, системный администратор это просто пользователь с
привелигированными правами доступа и определенными обязанностями.
Также много полезной и важной информации можно узнать из
встроенных описаний к программам (при помощи команды 'man').
В то время как эта книга рассчитана на использование
операционной системы Linux, она может быть расмотрена и по
отношению к другим UNIX-подобным операционным системам. Так как
разные версии системы UNIX сильно различаются (особенно в вопросах
системного администрирования), то довольно сложно охватить весь
материал, касающийся каждой модификации. Даже рассмотрение всех
особенностей ОС Linux - сложная задача, так как она сейчас
находится в стадии развития. На данный момент не существует
официальной версии Linux, поэтому у разных людей она установлена
по разному. В книге указаны различия между такими системами и
рассмотрены некоторые альтернативы, где это возможно. Также в
книге содержится много информации, которая не каждому может
потребоваться. Такие моменты специально отмечены и могут быть
пропущены, если используется уже сконфигурированная система.
Также как и другие разработки, связанные с операционной
системой Linux, книга была написана на добровольных началах.
Однако, как и в любой добровольной работе, существует предел
предпринимаемым усилиям, а также знаниям и опыту автора. Это
означает, что данное руководство не обязательно также хорошо
написано, как если бы оно было написано на коммерческой основе.
Следует отметить, что в этой книге не полностью охвачены
многие проблемы, которые рассмотрены в других свободно
распространяемых руководствах и документациях. Особенно это
относится к описаниям к различным программам, например, к
особенностям использования mkfs(8). В данном руководстве описано
только назначение этой программы в объеме, необходимом для
использования в книге. Для получения более подробной информации
имеются ссылки к другим руководствам и документациям, которые
обычно являются частью полного набора документации по системе
Linux.
- 6 -
У автора есть стремление развивать и улучшать эту разработку.
Просьба направлять все замечания (ошибки, новые идеи, информация о
различиях между различными версиями системы UNIX и т.д.) либо по
адресу электронной почты lars.wirzenius@helsinki.fi, либо обычной
почтой по адресу:
Lars Wirzenius / Linux docs
Hernesaarentie 15 A 2
00150 Helsinki
Finland
Автор хочет поблагадорить следующих людей, оказавших
поддержку при создании этой книги: Matt Welsh, Andy Oram, Olaf
Kirch, Adam Richter и других.
H.Peter Anvin, Remy Card, Theodore Ts'o и Stephen Tweedie
позволили использовать часть их работ в книге. Stephen Tweedie
также позволил использовать его сравнение файловых систем xia и
ext2.
В дополнение к выше сказанному, автор благодарит Mark
Komarinski за публикацию в 1993 году его работ и других статей,
имеющих отношение к системному администрированию, в журнале Linux
Journal.
Автор выражает благодарность Erik Troan из Red Hat за
создание версии руководства в формате plain text, а также
следующим людям: Paul Caprioli, Ales Cepek, Marie-France
Declerfayt, Olaf Flebbe, Helmut Geyer, Larry Greenfield, Stephen
Harris, Jyrki Havia, Jim Haynes, York Lam, Timothy Andrew Lister,
Jim Lynch, Dan Poirier, Daniel Quinlam, Philippe Steindl.
1.1 Проект Документирования Системы Linux
Проект документирования системы Linux или LDP (Linux
Documentation Project), это свободная команда писателей,
корректоров и редакторов перед которыми стоит цель создания полной
- 7 -
документации по операционной системе Linux. Главным координатором
проекта является Matt Welsh, который был назначен Lars'ом
Wirzenius и Michael'ом K. Johnson.
Данное руководство является одним из набора распространяемых
руководств проекта LDP, который включает в себя "Руководство
Пользователя Системы Linux", "Руководство Системного
Администратора Системы Linux", "Руководство Сетевого
Администратора Системы Linux" и "Руководство Взломщика Ядра
Linux". Эти книги доступны в исходном формате LaTeX, .dvi формате
и в формате postscript через FTP:
ftp://sunsite.unc.edu/pub/Linux/docs/LDP
ftp://tsx-11.mit.edu/pub/linux/docs/guides
Для того, чтобы связаться с LDP, нужно послать письмо Matt'у
Welsh по указанному ниже адресу:
mdw@sunsite.unc.edu
.
- 8 -
Глава 2 Обзор Системы Linux
В этой главе дается обзор операционной системы Linux. Прежде
всего рассматриваются основные функции системы. Затем следует
описание программ, реализующих эти функции. Цель главы - дать
понимание системы в целом, поэтому каждый раздел рассматривается
более подробно позже.
2.1 Различные составляющие операционной системы
Любая UNIX-подобная операционная система состоит из ядра и
некоторых системных программ. Также существуют некоторые
прикладные программы для выполнения какой-либо задачи. Ядро
является сердцем операционной системы. Оно размещает файлы на
диске, запускает программы и переключает процессор и другое
оборудование между ними для обеспечения мультизадачности,
распределяет память и другие ресурсы между процессами,
обеспечивает обмен пакетами в сети и т.п. Ядро само по себе
выполняет только маленькую часть общей работы, но оно
предоставляет средства, обеспечивающие выполнение основных
функций. Оно также предотвращает использование прямого доступа к
аппаратным средствам предоставляя специальные средства для
обращения к периферии. Таким образом ядро позволяет контролировать
использовние аппаратных средств различными процессами и
обеспечивать некоторую защиту пользователей друг от друга.
Средства, предоставляемые ядром, используются через системные
вызовы (см. раздел 2 руководства для более подробной информации по
этому вопросу).
Системные программы используют средства, предоставляемые
ядром для обеспечения выполнения различных функций операционной
системы. Системные и все остальные программы выполняются 'на
поверхности ядра', в так называемом пользовательском режиме.
Существует некотоpая разница между системными и прикладными
программами. Прикладные программы предназначены для выполнения
какой-либо определенной задачи, в то время как системные программы
- 9 -
используются для поддержания работы системы. Текстовый процессор
является прикладной программой, а программа telnet - системной,
хотя зачастую граница между ними довольно смутная.
Довольно часто операционная система содержит компиляторы и
соответствующие им библиотеки (GCC и C библиотеки для Linux), хотя
не обязательно все языки программирования должны быть частью
операционной системы. Документация, а иногда даже игры, могут
являться ее частью. Обычно состав операционной системы
определяется содержимым установочного диска или ленты, хотя дело
обстоит несколько сложнее, так как различные части операционной
системы разбросаны по разным FTP серверам во всем мире.
2.2 Важные составляющие ядра
Ядро системы Linux состоит из нескольких основных частей:
блок управления процессами, блок управления памятью, драйверы
устройств, драйверы файловых систем, блок управления сетью а также
другие небольшие процедуры.
Наиболее важные составляющие ядра (обеспечивающие
жизнеспособность системы) - это блок управления памятью и
процессами. Блок управления памятью обеспечивает распределение
областей памяти и swap-областей между процессами, составляющими
ядра и для кэш-буфера. Блок управления процессами создает новые
процессы и обеспечивает многозадачность путем переключения задач.
На самом нижнем уровне ядро содержит драйверы устройств для
каждого типа поддерживаемого оборудования. Существует довольно
большой набор различных драйверов, так как постоянно
разрабатываются новые типы устройств. Существует довольно много
одинаковых устройств, которые различаются только тем, как
происходит взаимодействие между самим устройством и драйвером.
Такое сходство позволяет использовать классы драйверов,
поддерживающих одинаковые операции. В каждом члене такого класса
используется однотипный интерфейс для ядра, но различные схемы
взаимодействия с устройством. Например, все драйверы жесткого
диска представляются для ядра абсолютно одинаково, то есть у них у
- 10 -
всех имеются такие операции как 'инициализация жесткого диска',
'чтение сектора N', 'запись сектора N'.
Некоторые функции, предоставляемые ядром, имеют одинаковые
свойства. Например, различные сетевые протоколы объединены в один
программный интерфейс - BSD socket библиотеку. Вот другой пример -
различные файловые системы, поддерживаемые системой Linux. Ядро
содержит виртуальную файловую систему (Virtual File System - VFS)
которая включает в себя все функции, используемые для работы
системы, а также драйвер для каждой поддерживаемой файловой
системы. При попытке доступа к какой-либо файловой системе запрос
проходит через VFS, откуда перенаправляется к соответствующему
драйверу файловой системы.
2.3 Основные функции UNIX системы
В этом разделе достаточно поверхностно рассматриваются
некоторые наиболее важные функции UNIX системы. Более подробно они
рассмотрены в следующих главах.
2.3.1 init
Единственную и самую важную функцую в UNIX системе
предоставляет пpоцесс init. Он запускается в любой UNIX системе
как самый первый процесс, а также завершает процедуpу загрузки
системы. При запуске init, продолжается процесс загрузки
(проверяются и устанавливаются файловые системы, запускаются
различные программы-демоны и т.д.).
Точный список того, что выполняется при запуске init, зависит
от версии программы. Обычно init предоставляет
однопользовательский режим, при котором никто не может
подключиться к системе. Обычный режим - это многопользовательский.
Некоторые версии используют понятие 'уровень запуска'. Например,
однопользовательский и многопользовательский режимы - это разные
уровни запуска. Также существуют дополнительные уровни, например
для запуска X-windows.
- 11 -
При работающей системе, две самые важные задачи программы
init - это удостоверится, что все программы-демоны getty работают
(т.е. имеется возможность подключения к системе) и адаптирование
orphan-процессов (т.е. процессов, чей родительский процесс был
уничтожен; в системе UNIX все процессы должны принадлежать одному
дереву процессов, поэтому orphan-процессы должны быть
адаптированы).
При завершении работы системы и перезапуске, init уничтожает
все оставшиеся процессы, демонтирует файловые системы и
останавливает процессор.
2.3.2 Подключение к системе с терминалов
Подключение к системе с терминалов (через последовательные
линии) и с главной консоли (если не запущены X) обеспечивается
программой getty. init запускает отдельный процесс getty для
каждого терминала. getty считавает имя пользователя и запускает
программу login, которая считывает пароль. Если имя и пароль
соответствуют одному пользователю, то login запускает оболочку.
При выходе из оболочки, то есть при выходе из системы, или при
завершении программы login в случае если имя пользователя и пароль
не подходят, init запускает новый процесс getty. Ядро не
контролирует подключения к системе, а только выполняет системные
программы.
2.3.3 Syslog
Иногда при работе ядра или различных системных программ
возникают ошибки, предупреждения и другие сообщения. Программа
syslog записывает все сообщения в файл так, что он может быть
впоследствии просмотрен. Syslog можно сконфигурировать так, что
сообщения будут сортироваться и записываться в разные файлы по
приоритету. Например, сообщения ядра часто направляются в
отдельный файл, так как эти сообщения наиболее важные и должны
регулярно просматриваться во избежание серьезных проблем.
2.3.4 Периодическое выполнение команд: cron и at
- 12 -
Как отдельныем пользователям, так и системному администратору
иногда требуется периодически запускать определенные команды.
Например, системному администратору может потребоваться
периодически запускать команду для очистки каталогов от временных
файлов (/tmp и /var/tmp), для предотвращения переполнения диска.
Для этого используется функция cron. У каждого пользователя
имеется файл crontab, в котором содержится список команд,
представленных к выполнению и количество раз, которое они должны
быть выполнены. Программа-демон crond обеспечивает своевременное
выполнение указанных команд.
Функция at идентична функции cron, только команда запускается
один раз в указанное время и запуск больше не повторяется.
2.3.5 Графический интерфейс пользователя
Как в системе UNIX так и в Linux, пользовательский интерфейс
не встраивается в ядро системы. Вместо этого он представляется
программами пользовательского уровня. Это применяется как к
текстовым, так и к графическим оболочкам.
Такой стандарт делает систему более гибкой, хотя и имеет свои
недостатки. Например, это легко позволяет создавать новые
интерфейсы для программ, что затрудняет изучение системы.
Первоначально используемой с системой Linux графической
оболочкой была система X Window System (сокращенно X). X не
реализует пользовательский интерфейс, а только оконную систему,
т.е. средства, с помощью которых может быть реализован графический
интерфейс. Три наиболее популярных версии графических интерфейсов
на основе X - это Athena, Motif и Open Look.
2.3.6 Работа с сетью
Сеть - это средство, позволяющее соединяться двум или более
компьютерам между собой.
- 13 -
UNIX-подобные операционные системы имеют широкий спектр
сетевых возможностей. Большинство базовых функций (файловые
системы, печать, создание резервных копий и т.д.) могут быть
реализованы посредством сети. Это может значительно облегчить
работу системного администратора, так как позволяет использовать
централизованное администрирование.
Однако, в этой книге поверхностно рассмотрены вопросы работы
с сетью. Для более подробной информации см. книгу "Руководство
Сетевого Администратора Системы Linux".
2.3.7 Подключение к системе через сеть
Подключение к системе через сеть работает несколько иначе,
чем обычное подключение. Существуют отдельные физические
последовательные линии для каждого терминала, через которые и
происходит подключение. Для каждого пользователя, подключающегося
к системе, существует отдельное виртуальное сетевое соединение и
их может быть любое количество. Однако не представляется возможным
запустить отдельный процесс getty для каждого возможного
виртуального соединения. Существуют также и другие способы
подключения к системе посредством сети. Например, telnet и rlogin
- основные службы в TCP/IP сетях.
При использовании сети для подключения к системе, кроме
большого количества процессов getty используется отдельная
программа-демон (при использовании как telnet так и login
используются различные программы-демоны), которая отслеживает все
попытки соединения с компьютером. Если опpеделяется попытка
соединения, то программа создает новый процесс - создает сама себя
для обработки этого соединения - а затем продолжает отслеживание
новых соединений. Создаваемый процесс идентичен программе getty.
2.3.8 Сетевые файловые системы
Одна из наиболее полезных функций, которая может быть
реализована с помощью сети, это разделение файлов через сетевую
- 14 -
файловую систему. Обычно используется система, называемая Network
File System или NFS, которая разработана корпорацией Sun.
При работе с сетевой файловой системой любые операции над
файлами, производимыми на локальном комьютере, передаются через
сеть на удаленную машину. При работе сетевой файловой системы
программа считает, что все файлы на удаленном компьютере находятся
на компьютере, где она запущена. Таким образом разделение
информации посредством такой системы не требует внесения
каких-либо изменений в программу.
2.3.9 Почта
Электронная почта является самым важным средством связи между
компьютерами. Электронные письма хранятся в одном файле в
специальном формате. Для чтения и отправления писем применяются
специальные программы.
У каждого пользователя имеется отдельный "почтовый ящик"
(т.е. файл, где информация хранится в специальном формате), в
котром хранится приходящая почта. Если на комьютер приходит
письмо, то программа обработки почты находит файл почтового ящика
соответвующего пользователя и добавляет туда полученное письмо.
Если же почтовый ящик пользователя находится на другом компьютере,
то письмо перенаправляется на этот компьютер, где проходит его
последующая обработка.
Почтовая система состоит из множества различных программ.
Доставка писем к локальным или удаленным почтовым ящикам
производится одной программой (например, sendmail или smail), в то
время как для обычной отправки или просмотра писем применяется
большое количетсво различных программ (например, Pine или elm).
Файлы почтовых ящиков обычно хранятся в каталоге /var/spool/mail.
2.3.10 Печать
В один момент времени принтером может пользоваться только
один пользователь. Поэтому для того, чтобы принтером могли
- 15 -
пользоваться сразу несколько пользователей, используется
специальная программа, которая обеспечивает обслуживание очереди к
принтеру. Все задания для принтера помещаются в буфеp. Когда
принтер заканчивает обработку одного задания, следуещее передается
к нему автоматически. Это значительно упрощает работу с принтером.
Программа обслуживания очереди к принтеру помещает
информацию, которая должна быть распечатана, на диск, то есть
текст располагается на диске, в то время как задание находится в
очереди. Это позволяет прикладным программам достаточно быстро
распечатывать тексты, помещая их в очередь, так как для
продолжения работы приложению не требуется дожидаться окончания
распечатки.
2.4 Структура файловой системы
Файловая система разделяется на несколько частей: файловая
система root, состоящая из каталогов /bin, /lib, /etc, /dev и
некоторых других, файловая система /usr, где хранятся различные
программы и данные не подлежащие изменению, файловая система /var,
где содержатся изменяемые файлы (такие как log файлы и др.) и
файловая система /home, которая состоит из личных каталогов
пользователей. Разделение может существенно отличатся от выше
указанного в зависимости от работы системного администратора и
конфигурации аппаратного обеспечения.
В главе 5 сруктура файловой системы рассматривается более
подробно (см. также Linux Filesystem Standard).
.
- 16 -
Глава 3 Запуск Системы и Перезагрузка
В этой главе описывается то, что происходит в системе Linux
при ее запуске и перезагрузке и как это правильно сделать.
3.1 Обзор
Процесс включения компьютера и загрузки операционной системы
называется запуском. Во время запуска сначала загружется небольшая
программа, называемая начальнам загрузчиком, которая в свою
очередь загружет в память и запускает операционную систему.
Начальный загрузчик обычно находится в определенном месте на
жестком диске или дискете. Потому как Linux это довольно сложная и
большая система, ее запуск производится в два этапа, хотя первично
загружаемый код должен быть достаточно маленьким (несколько сотен
байт).
На разных компьютерах начальная загрузка производится по
разному. На персональных компьютерах сначала считывется первый
сектор дискеты или жесткого диска (посредством процедур BIOS),
который назывется загрузочным сектором. В этом секторе находится
начальный загрузчик, который затем загружает операционную систему,
которая может быть расположена в другом месте на диске или
где-либо еще.
После загрузки Linux, инициализируются драйверы устройств, а
затем запускается init(8), который в свою очередь запускает другие
процессы, позволяющие подключаться к системе и обеспечивающие
нормальную работу. Этот этап рассмотрен ниже более подробно.
Для перезапуска системы сначала все процессы должны быть
завершены (т.е. закрыты все используемые ими файлы и др.), затем
демонтируются файловые системы и swap-области и, в конце концов,
на экран выдается сообщение о том, что питание может быть
отключено. Если же такая процедура не будет произведена, то могут
произойти серьезные сбои в последующей работе системы. Например,
- 17 -
информация, хранящаяся в кэш буфере файловой системы, будет
утеряна, нарушится целостность файловой системы и, следовательно,
она будет не пригодна к использованию.
3.2 Процесс запуска при близком рассмотрении
Linux может быть запущена как с дискет, так и с жесткого
диска. В книге "Установка и запуск Linux" подробно описан запуск
системы.
При включении компьютера, сначала BIOS производит
тестирование оборудования, а затем запуск операционной системы.
Сначала выбирается устройство, с которого будет производится
запуск (обычно первый дисковод, если в него вставлена дискета, в
противном случае - первый жесткий диск, если он установлен, хотя
порядок выбора может быть настроен) и считывается самый первый
сектор, который называется загрузочным. Его также называют MBR
(Master Boot Record), так как у жесткого диска может быть
несколько разделов и у кажодого может быть свой загрузочный
сектор.
В загрузочном секторе находится небольшая программа
(относительно небольшая чтобы она могла разместится в одном
секторе), которая загружает и запускает операционную систему. При
загрузке с дискеты, в загрузочном секторе находится код, который
обеспечивает только считывание ядра системы в определенную заранее
область памяти. Загрузочная дискета для Linux не содержит никаких
файловых систем. Ядро записано на дискете как последовательность
блоков, так как это значительно упрощает процесс загрузки. Однако,
вполне можно загружаться с дискеты, на которой установлена
какая-нибудь файловая система, используя загpузчик LILO.
При загрузке с жесткого диска, код, расположенный в MBR,
проверяет таблицу разделов (также расположенную в MBR), определяет
активный раздел (раздел, используемый при загрузке), считывает
загрузочный сектор этого раздела и запускает считанный код. Код,
расположенный в загрузочном секторе активного раздела жесткого
диска, выполняет те же функции, что и код, находящийся в
- 18 -
загрузочном секторе дискеты: он считывает ядро из выбранного
раздела, а затем запускает его. Однако здесь существует много
тонкостей, так как использование отдельного раздела диска только
для хранения кода ядра неэффективно, поэтому код, расположенный в
загрузочном секторе раздела, не просто последовательно считывает
информацию с диска, а использует считывание по секторам.
Существует несколько способов решения этой проблемы, но наиболее
простым из них является использование LILO загрузчика (информацию
по установке и настройке LILO см. в документации по LILO).
При загрузке с использованием LILO обычно сразу же
загружается и запускается ядро, заданное по умолчанию, однако
можно сконфигурировать LILO так, чтобы можно было бы загрузить
одно из нескольких возможных ядер или даже другую операционную
систему (в добавление к Linux). Также можно указать требуемое ядро
или операционную сиситему во время загрузки. При нажатии клавиши
ALT, SHIFT или CTRL (после загрузки LILO) будет выдан запрос, где
можно указать ядро или систему. Однако при конфигурировании можно
установить опцию, при которой LILO будет всегда выдвать такой
запрос, а также указать время, по истечении которого загружается
ядро, установленное по умолчанию.
Существуют и другие загрузчики, подобные LILO, однако у него
есть несколько полезных функций, которых нет в других загрузчиках,
так как он был написан специально для Linux. Например, имеется
возможность передачи ядру параметров во время загрузки или
изменения некоторых опций, встроенных в ядро. Среди подобных
загрузчиков (bootlin, bootactv и др.) LILO является наилучшим
выбором.
Загрузка системы как с жесткого диска, так и с дискет имеет
свои преимущества, хотя загрузка с жесткого диска считается лучше
и быстрее, так как она позволяет избежать неудобства, связанные со
сменой дискет. Однако в некоторых случаях загрузка с дискет более
удобна. Например, при установке системы или при повреждении
файловой системы.
После того, как ядро системы загружено в память (с жесткого
- 19 -
диска или с дискет) и запущено, выполняются приблизительно
следующие действия:
Так как ядро Linux установлено в запакованном виде, то прежде
всего оно само себя распаковывает. Это выполняет небольшая
программа, расположенная в самом начале кода.
Если на компьютере установлена видеоплата sVGA,
поддерживающая нестандартные текстовые режимы (такие как 100x40),
выдается запрос для указания требуемого режима. При компиляции
ядра можно сразу указать используемый режим, чтобы он не
запрашивался системой во время загрузки. Режим также может быть
установлен при помощи LILO или rdev(8).
Затем ядро тестирует аппаратное обеспечение (жесткие диски,
дисководы, сетевые адаптеры и др.) и конфигурирует соответствующие
драйверы устройств. Во время этого процесса на экран выдаются
подсказывающие сообщения. Вот примерно то, что происходит во время
загрузки:
LILO boot:
Loading linux.
Console: colour EGA+ 80x25, 8 virtual consoles
Serial driver version 3.94 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
lpinit: lp1 exists (0), using polling driver
Memory: 7332k/8192 available (300k kernel code, 384k reserved, 176k data)
Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M
Loopback device init
Warning WD8013 board not found at i/o = 280
Math coprocessor using irq13 error reporting
Partition check:
hda: hda1 hda2 hda3
VFS: Mounted root (ext filesystem)
Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20
Хотя текст сообщений довольно сильно различается на разных
- 20 -
системах и зависит от аппаратного обеспечения, версии Linux и
конфигурации.
После этого, ядро пытается смонтиpовать файловую систему
root. Место, куда она будет смонтирована, устанавливается во время
компиляции или с помощью rdev или LILO. Тип файловой системы
определяется автоматически. Если система root не монтиpуется,
например по причине того, что ядро не содержит драйвер
соответствующей файловой системы, то система зависает.
Файловая система root обычно монтиpуется в режиме read-only
(это устанавливается таким же образом как и узел монтиpования).
Это делает возможным проверку файловой системы в то время как она
смонтиpована, хотя проверка файловой системы, установленной в
режиме read-write не рекомедуется.
Затем ядро запускает программу init(8) в фоновом режиме (она
расположена в каталоге /sbin/init) которая становится главным
процессом. init выполняет различные функции, требуемые при
установке системы.
В конце концов init запускает программу getty(8) для
виртуальных консолей и последовательных линий. Эта программа
позволяет подключаться к системе посредством виртуальных консолей
и терминалов, подключенных через последовательные порты. init
может быть сконфигурирована также для запуска и других программ.
После этого процесс запуска системы считается завершенным и
система готова к работе.
3.3 Завершение работы и выключение системы
При выключении системы Linux необходимо выполнять некоторые
процедуры. Если этого не сделать, то файловые системы и файлы
могут повредиться. Это происходит по причине наличия в Linux
дискового кэша, информация из которого записывается на диск только
через некоторые промежутки времени. Это значительно повышает
производительность системы, но также означает, что если просто
- 21 -
выключить питание компьютера, то в дисковом кэше может находится
большое количество информации и файловая система может быть
частично повреждена, так как на диск обычно сбрасывается только
часть информации.
Другой причиной для этого является мультизадачность системы,
где одновременно может выполняться несколько процессов и
выключение питания может быть гибельным для системы. Особенно это
касается компьютеров, на которых одновременно работает несколько
пользователей.
Существуют команды, предназначенные для правильного
выключения системы - это shutdown(8) и halt(8), расположенные в
каталоге /sbin. Есть два обычных способа их применения.
Если система установлена на компьютере, где работает один
пользователь, то обычно завершают работу всех программ, работу
всех виртуальных консолей, входят в систему под пользователем root
(или остаются подключенными под этим пользователем, только в этом
случае нужно перейти в корневой каталог во избежание проблем с
демонтированием файловых систем), затем выполняется команда halt
или shutdown -h now (при желании можно установить задержку,
которая устанавливается заменой параметра now на знак '+' и числом
минут, по истечении которых будет завершена работа системы) или
просто halt.
Если на копьютере, на котором установлена система, работает
одновременно несколько пользователей, то возможно использование
команды shutdown в следующем формате:
shutdown -h +time message,
где time это время, по истечении которого работа системы будет
завершена, а message - сообщение, в котором объясняется причина
выключения. Напpимеp,
root# shutdown -h +10 'We will install a new disk. System should
> be back on-line in three hours.'
- 22 -
Выполнение этой команды предупредит каждого пользователя,
работающего в системе, что она будет выключена через 10 минут.
Сообщение выдается на каждый терминал, где работают пользователи,
включая xterm.
Broadcast message from root (ttyp0) Wed Aug 2 01:03:25 1995...
We will install a new disk. System should
be back on-line in three hours.
The system is going DOWN for system halt in 10 minutes !!
Выдача сообщения автоматически повторяется несколько раз
перед прекращением работы системы и каждый раз с более коротким
интервалом. При использовании halt нельзя установить задержку,
поэтому эта программа редко применяется на многопользовательских
системах.
Замечание: файл /etc/inittab содержит команды, выполняющиеся
при выключении системы.
После запуска процесса прекращения работы системы,
демонтируются все файловые системы (кроме системы root),
завершается выполнение всех процессов и программ-демонов, затем
демонтируется файловая система root и вся работа завершается.
После этого выдается сообщение, в котором говорится, что можно
отключить питание. Только после этого питание компьютера может
быть отключено.
В некоторых случаях невозможно завершить этот процесс
соответствующим образом. Например, при повреждении кода ядра в
памяти, нарушается его работа или система зависает и просто нет
возможности ввести новую команду можно только надеяться, что
ничего не повредится и выключить питание. Если же неполадки не
такие серьезные (например вышла из строя клавиатура), а ядро и
программа update работают нормально, то наилучшим вариантом будет
подождать несколько минут, пока update(8) не сохранит на диске
информацию, хранящуюся в кэш-буфере и только после этого выключить
- 23 -
питание.
Некоторые выключают копьютер после трехкратного выполнения
команды sync(8), которая сбрасывает на диск содержимое буфера, и,
после прекращения обращения к диску, выключают компьютер. Если в
момент выключения работа всех программ была завершена, то эта
процедура почти идентична выполнению команды shutdown. Однако,
файловые системы не демонтируются, что может привести к некоторым
проблемам, связанным с флагом 'clean filesystem' системы ext2fs. В
любом случае использование этого способа не рекомендуется.
3.4 Перезагрузка системы
Процесс перезагрузки может быть достигнут путем прекращения
работы системы, выключения питания и включения снова. Более
простой способ - это указать команде shutdown перезагрузить
систему установив опцию -r. Например, для этого можно использовать
команду shutdown -r now. Также можно использовать команду reboot.
3.5 Однопользовательский режим работы
Команда shutdown может также использоваться для перевода
системы в однопользовательский режим, в котором к системе никто не
может подключится кроме пользователя root, который использует для
работы главную консоль. Это иногда применяется для
административных целей, для выполнения которых не может быть
использована нормально работающая система.
3.6 Дискеты для экстенной загрузки
Не всегда имеется возможность загрузки системы с жесткого
диска. Например, при неправильных установках в LILO загрузчике
систему невозможно будет загрузить. В таких случаях должен быть
другой способ загрузки. Для персональных компьютеров обычно она
выполняется с дискет.
Большинство распространяемых версий Linux позволяют во время
установки системы создать загрузочную дискету. Однако многие такие
- 24 -
дискеты содержат только ядро и, предполагается, что для устранения
неполадок будут использоваться программы, находящиеся на
установочных дисках. Иногда этих программ бывает недостаточно,
например, когда требуется восстановить некоторые файлы, созданные
с помощью программ, которых нет на этих дисках.
Поэтому может возникнуть необходимость в создании специально
настроенного диска. В документации "Bootdisk HOWTO" содержится
необходимая информация для создания подобного диска.
При загрузке со специально настроенного диска нельзя
использовать привод, на котором смонтирована эта дискета, для
каких-либо других целей. Это может создать некоторые неудобства,
если в компьютере имеется только один дисковод. Однако, если
компьютер имеет достаточный объем памяти, можно загрузить этот
диск в RAM диск (для этого ядро, расположенное на дискете должно
быть сконфигурировано соответствующим образом). Это позволяет
использовать дисковод для других целей.
.
- 25 -
Глава 4 Использование Дисков и Других Устройств
Хранения Информации
При установке системы или изменении ее конфигурации обычно
возникает много проблем с дисками. Нужно установить файловые
системы на дисках так, чтобы на них могли хранится файлы, а также
зарезервировать пространство для других частей операционной
системы.
В этой главе рассматриваются все эти вопросы. Обычно, если
система уже установлена, то каких-либо проблем с дисками в
дальнейшем быть не должно, кроме pаботы с дискетами. При установке
нового диска или его настройке следует обращаться к этой главе.
При администрировании дисков могут возникнуть следующие
проблемы:
Форматирование диска (в настоящее время форматирование
является необязательной процедурой для многих типов дисков).
Разделение диска, если диск будет использоваться для разных
целей. Одна из причин разделения - это хранение разных
операционных систем на одном диске. Другая причина - хранение
пользовательских и системных файлов в pазных pазделах, что
упрощает резервное копирование и восстановление, а также защиту
системных файлов от повреждений.
Создание файловой системы на соответствующем диске или
разделе. В системе Linux диск ничего не значит, пока на нем не
установлена файловая система. Только после этого возможна работа с
файлами.
Монтирование различных файловых систем для формирования
единой структуры каталогов, как автоматически так и вручную
(файловые системы, монтируемые вручную, должны быть вpучную
демонтированы).
- 26 -
В главе 6 рассматриваются вопросы буфеpизации дисков и работы
с виртуальной памятью, что также нужно знать при работе с дисками.
В этой главе рассматриваются вопросы, которые необходимо
знать при работе с жесткими и гибкими дисками. К сожалению здесь
не рассматривается использование ленточных накопителей и приводов
для компакт дисков.
4.1 Типы устройств
В системе UNIX, а следовательно и Linux, существует два типа
устройств: блочные устройства с прямым доступом (такие как диски)
и символьные устройства (такие как ленточные накопители и
последовательные порты), некоторые из них могут быть
последовательными, а некоторые - с прямым доступом. Каждое
поддерживаемое устройство представляется в файловой системе файлом
устройства. При выполнении операций чтения или записи с подобным
файлом, происходит обмен данными между устройством, на которое
указывает этот файл. Такой способ доступа к устройствам позволяет
не использовать специальные программы (а также специальные методы
програмирования, такие как работа с прерываниями). Например, для
распечатки файла на принтере, используется следующая команда:
ttyp5 root $ cat filename > /dev/lp1
ttyp5 root $
Однако, для распечатки файлов используется специальная
программа (обычно lpr(1)), которая контролирует поток поступающих
файлов во избежание возникновения конфликтных ситуаций, например,
при попытке распечатать на одном принтере одновpеменно несколько
разных файлов. По мере распечатки, новые файлы поступают
автоматически. По подобной схеме работает большинство устройств.
Однако с файлами устройств проблемы возникают очень редко.
Так как устройства отображаются как файлы в файловой системе
(в каталоге /dev), несложно обнаружить с помощью команды ls(1)
какие существуют файлы устройств. После выполнения команды ls -l
- 27 -
на экран выводится список файлов, причем в первой колонке
содержится тип файла и права доступа к нему. Например, для
просмотра файла, соответствующего последовательному порту,
используется следующая команда:
ttyp5 root $ ls -l /dev/cua0
crw-rw-rw- 1 root uucp 5, 64 Nov 30 1993 /dev/cua0
ttyp5 root $
Первый символ в первой колонке, т.е. 'c', показывает тип
файла, в данном случае символьное устройство. Для обычных файлов
используется символ '-', для каталогов - 'd', для блочных
устройств - 'b' (см. pуководство к команде ls(1) для более
подробной информации).
Наличие большого количества файлов устройств совсем не
означает, что эти устройства на самом деле установлены. Наличие
файла /dev/sda ни о чем не говорит и совсем не означает, что в
компьютере установлен жесткий диск SCSI. Это предусмотрено для
облегчения установки программ и нового оборудования (нет
необходимости искать нужные параметры и создавать файлы для новых
устройств).
4.2 Жесткие диски
В этом разделе рассматриваются термины, связанные с
использованием жестких дисков.
Жесткий диск состоит из одной или нескольких круглых пластин,
одна или обе стороны которой покрыты магнитным материалом,
используемым для хранения информации. Для каждой стороны
предусмотрена головка, позволяющая считывать или записывать
информацию. Пластины вращаются на одной оси обычно со скоростью
3600 оборотов в минуту, хотя в более быстрых пpиводах используются
более высокие скорости. Головки перемещаются вдоль радиуса
поверхности пластин, что позволяет получить доступ к любой точке
поверхности.
- 28 -
Центральный процессор (CPU) и жесткий диск обмениваются
информацией через дисковый контроллер. Это упрощает схему
обращения и работы с диском, так как контроллеры для разных типов
дисков могут быть построены с использованием одного интерфейса для
связи с компьютером. Поэтому, например, для считывания сектора
можно воспользоваться всего лишь одной командой вместо сложных
последовательностей электрических сигналов для того, чтобы
переместить головки к нужной позиции, синхронизировать вращение
диска и считывание или запись данных и др. (на самом деле,
интерфейс между компьютером и контроллером тоже достаточно сложен,
но не на столько, на сколько он был бы без использования
контроллера). Котроллер также выполняет и некоторые другие
функции, такие как буфеpизация информации или автоматическая
замена плохих секторов.
Существуют еще некоторые понятия, знание которых необходимо
для понимания работы жесткого диска. Обычно поверхности делятся на
концентрические кольца, называемые дорожками или трэками, которые,
в свою очередь, делятся на сектора. Такое разделение нужно для
указания нужных позиций на диске и для распределения дискового
пространства на файлы. Для нахождения нужной информации на диске
достаточно примерно следующих данных: "поверхность 3, дорожка 5,
сектор 7". Обычно количество секторов на дорожке одинаково для
всех дорожек на диске, хотя в некоторых устройствах на внешних
трэках размещается большее количество секторов (все сектора имеют
один и тот же физический размер, поэтому на более длинных дорожках
помещается больше секторов). Стандартный размер сектора равен 512
байт. Диск не может оперировать данными, объем которых менее
одного сектора.
Каждая поверхность разделена на дорожки (и сектора) таким
образом, что при перемещении головки одной поверхности к
какой-либо дорожке, головки остальных поверхностей будут
установлены на этой же дорожке. Совокупность всех таких дорожек
называется цилиндром. Для перемещения головок от одной дорожки
(цилиндра) к другой требуется какое-то количество времени. Таким
образом, если разместить данные, доступ к которым чаще всего
производится сразу (например, файл), в одном цилиндре, то
- 29 -
необходимость в перемещении головок отпадает. Это повышает
производительность работы диска. Не всегда представляется
возможным разместить файл подобным образом. Файлы, которые
хранятся в разных местах на диске, называются фрагментированными.
Количество поверхностей (или головок, что в принципе одно и
то же), цилиндров и секторов сильно различается у разных
устройств. Совокупность таких параметров называется структурой
диска, которая хранится в специальной памяти, для питания которой
используются аккумуляторы. Эта память называется CMOS RAM, откуда
операционная система может считывать информацию во время ее
загрузки или во время установки драйвера.
К сожалению, BIOS построен так, что не представляется
возможным указать дорожку, номер которой превышает 1024, для
записи в CMOS RAM, что является серьезным ограничением для дисков
больших объемов. Для решения этой проблемы контроллер жесткого
диска передает заведомо неправильную информацию о структуре диска
и преобразует данные, представляемые компьютером, в нечто,
соответсвующее реальности. Например, жесткий диск может состоять
из 8 головок, 2048 дорожек с 35 секторами в каждой. В то время как
контроллер может утверждать, что диск имеет 16 головок и 1024
дорожки с 35 секторами в каждой, не превышая предела на хранение в
CMOS RAM числа дорожек и преобразуя адресацию уменьшая номер
головки вдвое и удваивая номер дорожки. Преобразование адресов
искажает представление операционной системы о структуре диска, что
усложняет размещение требуемой информации на одном цилиндре для
увеличения производительности.
Преобразование используется только для IDE дисков. В SCSI
дисках используется доступ с применением последовательного номера
сектора (который контроллер преобразует в номер головки, цилиндра
и сектора диска) и другой метод обмена информацией с процессором.
Однако, процессор может не иметь представления о реальной
структуры диска.
Так как системе Linux часто не известна информация о
структуре диска, то в файловых системах не используется размещение
- 30 -
отдельных файлов в пределах одного цилиндра. Вместо этого
применяется размещение файлов в цепочках последовательно
расположенных секторов, что дает приблизительно одинаковую
производительность. Хотя проблема усложняется за счет
использования специальных возможностей контроллера, таких как
внутреннее кэширование и других автоматических функций.
Каждый жесткий диск представлен отдельным файлом. Для IDE
дисков обычно существует только два таких файла. Они известны как
/dev/hda и /dev/hdb соответственно. Для SCSI дисков используются
файлы /dev/sda и /dev/sdb и т.д. Подобные обозначения применяются
и для других типов дисков. Файлы устройств для жестких дисков
предоставляют доступ к целому диску, не рассматривая разделы
(которые будут описаны ниже) и поэтому не составляет труда
перепутать разделы диска или информацию в них, если не быть
достаточно осторожным. Файлы жестких дисков обычно используются
для доступа к информации в MBR (которые также рассмотрены ниже).
4.3 Гибкие диски
Гибкий диск состоит из мягкой пластины, покрытой с одной или
обоих сторон материалом, подобным тому, которым покрыты пластины в
жестком диске. У самой дискеты нет никаких головок, они
установлены в приводе. Дискету можно сравнить с одной пластиной,
установленной в жестком диске, только дискета является съемной и
привод может использоваться для работы с различными дисками, в то
время как жесткий диск является одним неделимым устройством.
Также как жесткий диск, дискета делится на дорожки и сектора
(а две соответствующие дорожки на разных сторонах составляют
цилиндр), но их намного меньше, чем на жестком диске.
Дисковод может работать с несколькими типами дискет.
Например, привод на 3.5 дюйма может работать с дисками на 720 Кб и
1.44 Мб. Так как при использовании разных типов дисков, работа
самого привода немного различается, к тому же операционная система
должна иметь представление об объеме диска, существует множество
файлов устройств для работы с приводами для гибких дисков.
- 31 -
Напpимеp, файл /dev/fd0H1440 соответствует первому приводу (fd0)
формата 3.5 дюйма с дискетой на 3.5 дюйма высокой плотности (H)
объемом 1440 Кб (1440), т.е. позволяет pаботать с обычными
дискетами на 3.5 дюйма.
Имена файлов для приводов гибких дисков довольно сложные,
поэтому в системе Linux существует специальный тип устройства,
который автоматически определяет тип используемого гибкого диска.
Метод определения заключается в последовательном чтении первого
сектора вставленной дискеты с пpименением различных способов
чтения, до тех пор, пока он не будет правильно считан.
Естественно, диск должен быть сначала отформатирован.
Автоматическими устройствами являются /dev/fd0, /dev/fd1 и т.д.
Параметры для автоматических устройств, которые используются
для доступа к диску, могут быть установлены с помощью программы
setfdprm(8). Это может быть полезно в некоторых случаях, например,
если используются дискеты нестандартного объема (т.е. дискета
имеет нестандартное количество секторов в дорожке) или если
определение типа диска по какой-либо причине не работает и
соответствующий файл устройства отсутствует.
4.4 Форматирование
Форматирование - это процесс записи специальных отметок на
магнитную поверхность, которые используются для разделения дорожек
и секторов. Перед форматированием диска его поверхность состоит из
смеси различных магнитных сигналов. При форматировании эти сигналы
упорядочиваются и происходит формирование дорожек и секторов. В
действительности, все намного сложнее и выходит за рамки этой
книги. Нужно знать только то, что диск не может использоваться, до
тех пор пока он не будет отформатирован.
При работе в MS-DOS, форматирование также включает в себя
процесс создания файловой системы. Там часто эти два процесса
совмещены, особенно при работе с гибкими дисками. Но если нужно
сделать разграничение, то действительным форматированием называют
форматированием на низком уровне, а создание файловой системы -
- 32 -
форматированием на высоком уровне. При работе в системе UNIX (а
также в этой книге) вместо этих двух понятий будут использоваться
понятия форматирование и, соответственно, формирование файловой
системы.
Для IDE и некоторых SCSI дисков форматирование производится
при их изготовлении и, обычно, не требуется повторения этой
процедуры, поэтому большинство людей редко об этом задумываются. В
действительности, форматирование диска может привести к ухудшению
его работы, например, по причине того, что диск должен быть
отформатирован специальным образом для обеспечения возможности
замены плохих секторов.
Форматируемые диски часто поставляются со специальной
программой, потому как внутренние интерфейсы у разных приводов
различны. Эта программа обычно раположена в микросхеме BIOS
контроллера или поставляется отдельно как программа для MS-DOS. Ни
одни из них не могут быть использованы для системы Linux.
Во время форматирования могут быть обнаружены плохие блоки
или сектора, которые не должны быть использованы при дальнейшей
работе. Эти функции возлагаются на файловую систему. Хотя можно
создать небольшой раздел диска, который включает в себя только
плохие блоки. Это эффективно при большом количестве плохих блоков,
так как при работе файловой системы могут возникнуть некоторые
трудности, связанные с размером неиспользуемой области.
Для форматирования дискет используется программа fdformat(8).
В качестве параметра указывается файл устройства. Например,
следующая команда используется для форматирования обычной дискеты
размером 3.5 дюйма высокой плотности в первом приводе для гибких
дисков:
ttyp5 root $ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
ttyp5 root $
- 33 -
Если для форматирования используется автоматическое
устройство (например, /dev/fd0), то сначала нужно указать
параметры этого устройства с помощью программы setfdprm(8). Для
получения такого же результата, как в предыдущем примере, нужно
выполнить следующие действия:
ttyp5 root $ setfdprm /dev/fd0 1440/1440
ttyp5 root $ fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
ttyp5 root $
Обычно проще указать точный файл устройства, который
соответствует типу форматируемого диска.
Программа fdformat также используется для выявления плохих
блоков. Она обрабатывает плохой блок несколько раз. Если проблема
не очень серьезна (загрязненная рабочая поверхность
считывающих/записывающих головок, плохой контакт в разъеме
контроллера), то fdformat продолжит свою работу, но возникновение
реальной ошибки прервет процесс проверки. Ядро отображает
появление каждой ошибки на терминале. Если используется syslog, то
сообщение поступает в файл /usr/adm/messages. fdformat не сообщает
специфику ошибки (обычно это не имеет значения, так как дисководы
это довольно дешевые устройства и их замена не составляет
проблем).
ttyp5 root $ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... read: Unknown error
ttyp5 root $
- 34 -
Команда badblocks(8) используется для поиска плохих блоков на
любом диске или разделе диска (включая гибкие диски). Она не
форматирует диск, поэтому может быть использована для проверки
даже существующих файловых систем. В следующем примере
рассматривается проверка 3.5 дюймовой дискеты с двумя плохими
блоками.
ttyp5 root $ badblocks /dev/fd0H1440
718
719
ttyp5 root $
Программа выводит номера найденных плохих блоков. Во многих
файловых системах есть средства, позволяющие избежать
использования таких блоков. Для таких целей существует список
известных плохих блоков, который инициализируется при установке
файловой системы и может быть модифицирован в дальнейшем.
Первичный поиск плохих блоков производится при выполнении команды
mkfs (которая инициализирует файловую систему), в последующем
проверка производится с помощью программы badblocks, а модификация
списка - при помощи команды fsck. Эти команды будут рассмотрены
ниже.
4.5 Дисковые разделы
Весь жесткий диск может быть разбит на несколько разделов,
причем каждый раздел представлен так, как если бы это был
отдельный диск. Разделение используется, например, при работе с
двумя операционныи системами на одном диске. При этом каждая
операционная система использует для работы отдельный раздел и не
взаимодействует с другими. Таким образом, две различные системы
могут быть установлены на одном жестком диске. Без использования
разделов в данном случае возникла бы необходимость в приобритении
второго диска.
Для гибких дисков разделы не предусмотрены. В большинстве
случаев для этого нет необходимости, так как их объем достаточно
мал.
- 35 -
4.5.1 MBR, загрузочные сектора и таблица разделов
Информация о разделении жесткого диска находится в первом
секторе (т.е. в первом секторе первой дорожки первого диска). Этот
сектор называется MBR (сокращение от Master Boot Record) этого
диска. При загрузке компьютера BIOS загружает его в память и
выполняет. MBR содержит небольшую программу, которая считывает
таблицу разделов, находит активный раздел (т.е. раздел, отмеченный
как загрузочный) и считывает первый сектор этого раздела, который
называется загрузочным сектором (MBR также является загрузочным
сектором, но он выполняет специальные функции и поэтому имеет
отдельное название). Этот сектор содержит другую небольшую
программу, которая, в свою очередь, считывает начальную часть
операционной системы, расположенной в этом разделе, а затем
выполняет ее.
Схема разделения не встроена в оборудование или даже в BIOS.
Это только стандарт, которого придерживается большое количество
операционных систем. Не все системы поддерживают его, но они
являются исключениями. Некоторые системы поддерживают разделение,
но они занимают всего один раздел на диске и используют свою
внутреннюю схему разделения в пределах используемого раздела.
Такие операционные системы нормально работают с другими системами
(включая Linux), которые находятся на том же диске. Но те
операционные системы, которые не поддерживают разделы, не могут
быть установлены вместе с другими системами на одном диске.
Из мер предосторожности следует записать таблицу разделов.
Если эта таблица каким-либо образом повредится, то все файлы
останутся в сохранности (испорченная таблица разделов может быть
исправлена при помощи программы fdisk).
4.5.2 Расширенные и логические разделы
Изначально, в схеме разделения жесткого диска в PC
допускалось использование только четырех разделов. Но вскоре этого
оказалось недостаточно, частично по причине того, что многим для
- 36 -
работы требуется более четырех операционных систем (например,
Linux, MS-DOS, OS/2, Minix, FreeBSD, NetBSD, Windows/NT и т.д.),
но в осн