мер, неструктурированное устройство не будет ничего знать о файловой
системе в данном разделе и может затереть данные, относящиеся к файло-
вой системе.
Теперь, когда вы знаете, как осуществить доступ к диску, мысленно
вернемся к главе 2 и программам копирования. Командный файл cpiobr
использует для копирования файлов неструктурированное дисковое уст-
ройство /dev/rfd0, в то время как autobkp использует файловую систему.
Большинство из этих способов работы с устройствами могут пока-
заться несколько экзотичными и предназначенными в основном для шутки и
обучения. Однако часто шутка помогает продуктивно работать. Ведь пыта-
ясь заставить систему сделать то или иное, вы можете открыть для себя
новые возможности системы. Ситуация с аппаратурой очень похожа. Появ-
ляются новые устройства, и требуются годы для разработчиков программ-
ного обеспечения, чтобы обнаружить все возможности машины. Система
UNIX существует в том или ином виде уже более десяти лет, но пользова-
тели до сих пор открывают ее новые и удивительные способности.
Итак, поскольку вы обычно должны выбрать тот или иной метод
использования раздела диска, то ничто не мешает вам завести на уст-
ройстве все разделы одинакового типа. Обычным подходом является созда-
ние файловых систем во всех возможных разделах, чтобы они могли содер-
жать файлы. Тем не менее, вы можете сочетать файловую систему с "нест-
руктурированными" разделами любым способом, который вам нравится. Од-
ной из возможных схем является использование одного раздела (fd01) в
качестве неструктурированного устройства для копирования файлов коман-
дой "cpio -o". Этот раздел занимает почти весь диск, но какая-то часть
отводится для размещения второго раздела с файловой системой (fd02).
Распределенное пространство содержит некоторые справочные (help) файлы
и текстовый файл с именами файлов, находящихся в неструктурированном
разделе. Такое разбиение на разделы использует преимущества обоих
способов. Для того чтобы получить данные, скопированные командой cpio,
вы вводите команду "cpio -i < /dev/rfd01". Для получения данных из
второго раздела, вы вводите команду "mount /dev/fd02 /mnt", а затем
используете команды ls, file, grep и другие, которые относятся к фай-
ловой системе. В этом случае раздел с файловой системой служит для до-
кументирования неструктурированного раздела.
ЗАГРУЖАЕМЫЙ ДИСК И АВТОНОМНЫЙ shell (SASH)
Инсталляция системы UNIX на жесткий диск обычно выполняется с по-
мощью автономного shell (SASH, standalone shell). Иногда эта операция
выполняется с магнитной ленты, но легче всего использовать гибкий
диск. Возникает вопрос: "Как загрузить UNIX с гибкого диска?"
Картина следующая: гибкий диск имеет один раздел или даже может
быть разделен на корневой раздел и раздел пользователей. В любом слу-
чае гибкий диск имеет файловую систему, созданную другой системой и
помещенную на диск. Первый блок файловой системы является загружаемой
записью, которая размещается на носителе с помощью команды dd. Команда
dd копирует байты, начиная с самого начала устройства. Загрузочная за-
пись содержит код, необходимый для запуска системы UNIX с диска.
Второй блок - это суперблок, своего рода главный каталог файловой
системы. В нем находятся индексные дескриптооы файлов, содержащие ин-
формацию о каждом файле, а также список доступных свободных блоков.
Корневая файловая система имеет также вариант ядра для гибкого диска,
который загружается и запускает shell точно так же, как это делает его
старший брат (ядро системы для жесткого диска) для всей системы в це-
лом. Вы даже можете смонтировать инсталляционный диск на жесткий диск
с другой системой и выполнять команды копирования. Ограничивающим фак-
тором является размер одного инсталляционного диска. Самый большой
объем гибкого диска на машинах PC - 1.2 Мб (используется на PC AT),
что вполне достаточно. Можно уместить почти всю программу загрузки,
которая необходима для запуска многопользовательской системы с гибкого
диска.
Как только ядро системы с гибкого диска загружено, имеется полная
файловая система со всеми файлами устройств. Ядро монтирует раздел
жесткого диска (предполагается, что жесткий диск был разбит на разде-
лы) и копирует на него файлы в формате файловой системы. Вот как это
выглядит:
# mount /dev/hd01 /mnt <-вызов с гибкого диска для монтирования
первого раздела жесткого диска
# copy /unix /mnt <-копирование ядра жесткого диска в раздел
жесткого диска
ОБНОВЛЕНИЕ ФАЙЛОВОЙ СИСТЕМЫ
Мы описали суперблок как запись с ключевой информацией о размере
и содержимом файловой системы. Причиной разрушения файловой системы
обычно являются проблемы, возникающие в суперблоке. Команда sync(1)
выполняет запись образа суперблока на диск, тем самым обновляя его.
Иногда эта операция должна выполняться автоматически и постоянно для
того, чтобы образы суперблока на диске и в памяти были одинаковы. В
настоящее время в System V включена программа update, которая запуска-
ется из загрузочного файла /etc/rc. Она живет в системе и исполняет
команды sync и sleep. В результате информация о состоянии файловой
системы на диске хранится со всеми текущими изменениями, произведенны-
ми с самой файловой системой. Если у вас нет такой программы, вы може-
те написать командный файл на языке shell, которая работает в цикле,
вызывая команду sync через соответствующие интервалы команды sleep.
Запустите этот командный файл в фоновом режиме, чтобы поддерживать це-
лостность файловой системы.
МОНТИРОВАНИЕ ФАЙЛОВЫХ СИСТЕМ
Давайте рассмотрим, что происходит, когда файловая система монти-
руется в древовидной структуре системы. На рис. 7 -3 показано, как
взаимодействуют между собой индексные дескрипторы (inodes) двух файло-
вых систем.
Рис. 7-3
Монтирование одной файловой системы в другую
---------------------------------------------------------------------------
+------------------------------+
|Раздел| Физическое| Логическое|
|диска | имя | имя |
|------------------------------|
| 1 | /dev/hd01 |/dev/root |
| 2 | /dev/hd02 |/dev/usr |
+------------------------------+
+----+
| |
Раздел 1 | / |inode 2 (ls -lia /)
/ / | | \ \ \
/ / +----+ \ \ \
/ / / | \ \ \ \
/ / / | \ \ \ \
/ / / | \ \ \ \
+---+ +---+ +---+ +---+ +-----+ +---+ +---+ +---+
|bin| |dev| |etc| |lib| |lost+| |mnt| |tmp| |usr| inode 245
| | | | | | | | |found| | | | | | +---+
+---+ +---+ +---+ +---+ +-----+ +---+ +---+ +-| |
/ | \ / | \ / |\ / | \ / | | \ | |
/ | \ +---+
/|\ /|\ /|\ /|\
|
/----------------+
/
КОМАНДА /
# /etc/mount /dev/hd02 /usr /
+-----+
| |
Раздел 2 | / | inode 2 (ls -lia /usr)
| |
+-----+ \ \ \
/ / / | \ \ \ \ \
/ / / | \ \ \ \ \
/ / / | \ \ \ \ \
/ / / | \ \ \ \ \
/ / / | \ \ \ \ \
+---+ +---+ +-------+ +---+ +-----+ +-----+ +-----+ +---+ +---+
|adm| |bin| |include| |lib| |lost+| |pre- | |spool| |sys| |tmp|
| | | | | | | | |found| |serve| | | | | | |
+---+ +---+ +-------+ +---+ +-----+ +-----+ +-----+ +---+ +---+
/ | \ / | \ / | | \ / | \ /|\ / || \ / | \
/ / | \ / | \ \
/ / | \ / | \ \
/|\ /|\ /|\ /|\ / | \ /|\ /|\ /|\
---------------------------------------------------------------------------
В примере, показанном на рис. 7-3, файловая система из раздела 2
монтируется в корневой файловой системе (раздел 1) в каталог /usr. Од-
нако мы помним, что каждая файловая система имеет свой собственный
корневой каталог. В каждой файловой системе нумерация индексных деск-
рипторов файла начинается с числа 2, поэтому номера индексных дескрип-
торов дублируются в двух файловых системах. Это и является причиной,
по которой не могут быть образованы связи между файлами, находящимися
в разных файловых си бразованы связи между файлами, находящимися
Одним из атрибутов корневого каталога является то, что номер его
индексного дескриптора равен 2. Это значение может быть проверено в
корневом каталоге командой "ls -lid /". Каталог /usr - это просто еще
один файл (а именно каталог) в корневой файловой системе. Этот каталог
может содержать файлы и подчиненные каталоги, которые хранятся в раз-
деле 1. После выполнения команды "mount /dev/hd02 /usr" корневой ката-
лог раздела 2 (индексный дескриптор 2) помещается в каталог /usr (ин-
дексный дескриптор 245). Если какие-либо файлы существуют в каталоге
/usr в разделе 1, они остаются там, но получить доступ к ним вы не мо-
жете. Единственным способом увидеть их является размонтирование файло-
вой системы, которая была смонтирована на их место. Хитрость команды
mount заключается в том, что она представляет новый раздел как бы при-
надлежащим реальному корневому разделу. В сущности, это позволяет
иметь безграничную файловую систему.
Механизмом, который позволяет производить это, является таблица
смонтированных устройств, находящаяся внутри ядра системы. Когда вы-
полняется обращение к файлу, его индексный дескриптор определяет марш-
рут, по которому находится данный файл. Если в таблице смонтированных
устройств имеется запись, то этот маршрут ведет на другой раздел диска
или в другую файловую систему. Для того чтобы убедиться, что вновь
смонтированная файловая система уникальна, посмотрите индексный деск-
риптор каталога /usr сначала из корневого каталога (командой "ls -li
/", индексный дескриптор 245), а затем из другой файловой системы (ls
-ldi /usr, индексный дескриптор 2).
КАК ПОЛУЧИТЬ ПОБОЛЬШЕ ИНФОРМАЦИИ О ФАЙЛОВОЙ СИСТЕМЕ?
Как указывалось ранее, файловая система размещается внутри разде-
ла на диске. Файловые системы создаются командой mkfs(1), поддержива-
ются командой fsck(1), отлаживаются командой fsdb(1), а первый доступ
к ним осуществляется командой mount(1). Каталог /usr/include содержит
все включаемые файлы для использования в программах на языке Си, реа-
лизующих эти команды. Таким образом, этот каталог представляет собой
прекрасную возможность для поиска информации о файловой системе,
поскольку включаемые файлы содержат глобальные определения, используе-
мые подпрограммами файловой системы. В документации Bell Labs (в руко-
водстве программиста) также описаны некоторые внутренние таблицы,
используемые файловой системой.
Теперь мы готовы рассмотреть программные средства для автоматиза-
ции рутинной работы с файловой системой.
---------------------------------------------------------------------------
ИМЯ: mntf
---------------------------------------------------------------------------