Страница:
другие способы получения данных с устройства:
$ cat /dev/hd01
$ cat < /dev/hd01
$ tail /dev/fd0
Если вы дампируете файл устройства, содержащего файловую систему,
то данные будут представлять собой неупорядоченные блоки по 512 байт.
В одном месте вы можете увидеть списки каталогов. Другими словами, од-
но и то же устройство может рассматриваться двумя совершенно разными
способами: как файловая система и как набор неструктурированных битов.
Хотя выполнение чтения двумя этими способами может быть поучительным,
в большинстве случаев у вас не возникнет желания выполнить ЗАПИСЬ ин-
формации на одно и то же устройство двумя способами, поскольку, напри-
мер, неструктурированное устройство не будет ничего знать о файловой
системе в данном разделе и может затереть данные, относящиеся к файло-
вой системе.
Теперь, когда вы знаете, как осуществить доступ к диску, мысленно
вернемся к главе 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
----------------------------------------------------
mntf Монтирование и размонтирование гибкого диска
Монтирует и размонтирует устройство гибкого диска в каталоге как
файловую систему с возможностью записи/чтения или только чтения.
mntf [-d] [-h] [-l] [-r] [-s]
Опции:
-d размонтирование гибкого диска из корневой
файловой системы
-h использование устройства с высокой плотностью
записи (а не с низкой)
-1 использование устройства 1, а не устройства 0
-r монтирование гибкого устройства как файловой
системы с возможностью только чтения
-s использование имен устройств, принятых в System V
По умолчанию выполняется монтирование гибкого диска 0 в каталог
/mnt.
mntf -d -1
Размонтирование гибкого диска на устройстве 1.
1 :
2 # @(#) mntf v1.0 Mount floppies Author: Russ Sage
Монтирование гибких дисков
4 CMD="/etc/mount"
5 DIR="/mnt"
6 DRIVE="0"
7 DENSITY="48ds9"
8 SYSTEM="xenix"
10 if [ $# -gt 0 ]
11 then for ARG in $*
12 do
13 case $ARG in
14 -d) CMD="/etc/umount"
15 DIR="";;
16 -h) DENSITY="96ds15";;
17 -1) DRIVE="1"
18 if [ -d /mnt1 ]
19 then DIR="/mnt1"
20 else echo "the directory /mnt1 does not exist" >&2
нет каталога /mnt1
21 echo "using the directory /mnt instead" >&2
используется каталог /mnt
22 fi;;
23 -r) DIR="$DIR -r";;
24 -s) SYSTEM="sysv";;
25 *) echo "mntf: invalid argument $ARG" >&2
26 echo "usage: mntf [-d] [-h] [-1] [-r] [-s]" >&2
27 echo " -d dismount" >&2
28 echo " -h high density" >&2
29 echo " -1 use drive 1" >&2
30 echo " -r read only" >&2
31 echo " -s System V device" >&2
32 echo " default: mount XENIX drive 0 48 tpi to " >&2
33 echo " /mnt as a read/write filesystem" >&2
34 exit 1;;
35 esac
36 done
37 fi
39 case $SYSTEM in
40 sysv) $CMD /dev/fp${DRIVE}21 $DIR;;
41 xenix) $CMD /dev/fd${DRIVE}${DENSITY} $DIR;;
42 esac
CMD Основная команда, подлежащая выполнению
DIR Каталог, в котором производится монтирование устройства
DENSITY Плотность записи в виде, указанном в имени устройства
DRIVE Номер устройства, начиная с 0
SYSTEM Тип имени устройства, принятый в UNIX'е
ОПИСАНИЕ
ЗАЧЕМ НАМ НУЖЕН КОМАНДНЫЙ ФАЙЛ mntf?
В машинах с гибким диском это устройство часто используется в
повседневных операциях. Оно применяется в качестве источника при
инсталляции системы и как обычный носитель для операций копирования.
Гибкие диски можно использовать в системе UNIX двумя способами.
Первый является неструктурированной последовательностью байтов, что
полезно для копирования магнитных лент и хранения архивов. Второй
способ - поблочный, ориентирован на поддержку файловой структуры. Для
второго способа существует мощная поддержка на уровне файловой систе-
мы, но некоторые функции мы должны реализовать самостоятельно.
Для того чтобы использовать гибкий диск как файловую систему в
UNIX, вам необходимо подготовить диск и смонтировать его как файловую
систему. Когда вы закончите работу, вы должны размонтировать гибкий
диск. Это отличается от системы DOS, в которой гибкие диски можно
вставлять и вынимать когда угодно, если только в этот момент на них не
идет запись.
Поскольку использование гибких дисков включает в себя взаимосвя-
занные шаги монтирования и размонтирования, то было бы вполне естест-
венным применять одну команду с соответствующими опциями для выполне-
ния монтирования и размонтирования. Однако UNIX так не делает. Наш ко-
мандный файл mntf объединяет эти две функции в одной команде для упро-
щения работы с гибким диском. Для того чтобы сделать нашу программу
более независимой, мы предусмотрели в ней поддержку устройств системы
XENIX наравне с устройствами System V. (Системы Berkeley (BSD) не так
часто используют гибкие диски, поэтому мы не пытались иметь с ними де-
ло.)
ЧТО ДЕЛАЕТ mntf?
Эта программа обеспечивает поддержку всех возможностей для монти-
рования и размонтирования гибких дисков. Она предоставляет все опции,
необходимые команде mount, акцентирует внимание на тех аспектах файло-
вой системы, которые относятся к гибким дискам, и уменьшает количество
нажатий на клавиши, необходимых для выполнения этой работы.
Действие программы по умолчанию заключается в монтировании гибко-
го диска низкой плотности записи, находящегося в устройстве 0, в ката-
лог /mnt. Имеется много опций, чтобы попросить программу mntf сделать
то, что вам нужно. Опция -h поддерживает диск высокой плотности (1.2
Мб). В машинах PC AT первое из устройств гибких дисков имеет 96 доро-
жек на дюйм, объем 1.2 мегабайта, но может также читать и писать гиб-
кие диски с более низкой плотностью. Второй гибкий диск является уст-
ройством низкой плотности с 48 дорожками на дюйм и объемом 360 кило-
байт.
Опция -1 (цифра один, а не буква l) выполняет монтирование гибко-
го диска в устройстве 1, а не 0. Опция -r монтирует файловую систему с
возможностью ТОЛЬКО ЧТЕНИЯ. Для РАЗМОНТИРОВАНИЯ диска вместо монтиро-
вания используется опция -d. Если применяется опция -s, имя устройства
изменяется таким образом, чтобы оно соответствовало системе System V,
а не XENIX. Это незначительная проблема, поскольку схемы именования не
очень отличаются. Данная программа создана для системы XENIX и обеспе-
чивает наилучшие возможности именно в ней.
Не все опции совместимы друг с другом, но проверка на совмести-
мость не выполняется. Например, команда "mntf -d -r" пытается размон-
тировать файловую систему с возможностью только чтения, а команда UNIX
unmount, которая выполняет эту операцию, отбрасывает ее, выдавая сооб-
щение об ошибке. В целях упрощения мы отказались от проверки соот-
ветствия опций, а вместо этого предоставили UNIX'у право выдавать
сообщения об ошибках для информирования пользователя о возникших проб-
лемах. Если вы хотите, чтобы эту программу мог применять относительно
неопытный пользователь, вам нужно вставить в нее выполнение таких про-
верок.
1. $ mntf -s
Монтирование гибкого диска как файловой системы с возможностью
записи-чтения и с использованием имен устройств, принятых в System V.
2. $ mntf -h -1 -r
Монтирование гибкого диска высокой плотности записи на устройстве
1 как файловой системы с возможностью только чтения и с использованием
формата имен устройств, принятого в XENIX. Эта команда должна закон-
читься неудачей (устройство 1 имеет низкую плотность).
3. $ mntf -d -h
Размонтирование файловой системы на устройстве 0 с высокой плот-
ностью записи и с использованием имен устройств, принятых в XENIX.
Для того чтобы максимально упростить программу, все фактически
выполняемые команды помещены в текстовые строки. Это позволяет достичь
большей гибкости при написании программы. Результатом анализа команд-
ной строки является формирование команды, которая выполняется в конце
программы mntf.
В строках 4-8 инициализируются установки по умолчанию. Переменная
CMD содержит команду UNIX, которая в итоге должна быть выполнена, по
умолчанию это команда mount. Переменная DIR указывает каталог, в кото-
рый должно быть смонтировано устройство, по умолчанию это каталог
/mnt. Переменная DRIVE является номером устройства (по умолчанию 0) и
используется для формирования корректного имени устройства. Переменная
DENSITY по умолчанию установлена для носителя низкой плотности, т.е.
48 дорожек на дюйм, двусторонняя дискета с 9 секторами на дорожку
(48ds9).
В строке 10 проверяется, указаны ли в командной строке какие-либо
аргументы. Если количество аргументов больше нуля, последовательно
проверяется каждый аргумент. Если какой-либо из аргументов соот-
ветствует образцам в строках 13-35, то он изменяет содержимое команд-
ной строки.
Строка 14 управляет опцией -d для размонтирования гибкого диска.
Переменная CMD изменяется на umount вместо mount. После этого перемен-
ной DIR присваивается нулевое значение, поскольку команде umount тре-
буется не каталог, а только имя устройства. Переменная DIR должна быть
частью строки с командой для того, чтобы мы могли использовать одну и
ту же "заготовленную" командную строку для всех вариантов. В данном
случае мы устанавливаем эту переменную в нуль, а shell при синтакси-
ческом разборе удаляет ее из командной строки.
В строке 16 выполняется изменение плотности записи используемого
носителя. Обращение к различным типам носителей выполняется по именам
файлов устройств. Каждое имя указывает драйвер устройства, который ра-
ботает с соответствующей аппаратурой. Устройство высокой плотности мо-
жет работать в режимах как высокой, так и низкой плотности записи. Од-
нако если вы укажете имя устройства с высокой плотностью записи, а на
самом деле оно имеет низкую плотность, то драйвер работать не будет
из-за ошибок чтения.
Ниже приводится список, полученный командой ls в каталоге dev для
машины XT, в которой нет устройств высокой плотности записи. Этот
список позволяет проиллюстрировать, каким образом осуществляется обра-
щение к именам устройств:
------------------------------
|
| 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd0
| 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd048
| 126 brw-rw-rw- 1 root root 2, 12 Feb 18 17:09 /dev/fd048ds8
| 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd048ds9
| 125 brw-rw-rw- 1 root root 2, 8 Feb 18 17:09 /dev/fd048ss8
| 127 brw-rw-rw- 1 root root 2, 0 Feb 18 17:09 /dev/fd048ss9
| 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd1
| 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd148
| 129 brw-rw-rw- 1 root root 2, 13 Feb 18 17:09 /dev/fd148ds8
| 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd148ds9
| 128 brw-rw-rw- 1 root root 2, 9 Feb 18 17:09 /dev/fd148ss8
| 130 brw-rw-rw- 1 root root 2, 1 Feb 18 17:09 /dev/fd148ss9
|
Крайнее слева число представляет собой номер индексного дескрип-
тора. Мы используем его как ссылку для определения уникального имени
файла. Как мы уже отмечали ранее, несколько имен устройств могут от-
носиться к одному и тому же файлу, рассматриваемому с различных точек
зрения. Например, в данном списке вы видите, что три устройства имеют
индексный дескриптор 32. Второе число слева представляет собой коли-
чество связей. Когда оно больше единицы, то это также указывает, что
несколько устройств являются на самом деле одним файлом, а следова-
тельно используют один и тот же индексный дескриптор. Следующие два
числа являются старшим и младшим номером. Старший номер относится к
драйверу устройства, а младший является уникальным номером одного из
устройств, управляемых одним и тем же драйвером.
Большинство из этих имен устройств соответствуют определенному
шаблону. Они состоят из символов fd (floppy disk - гибкий диск), цифры
0 или 1 (номер устройства), числа 48 (плотность, выраженная в виде ко-
личества дорожек на дюйм), символов ss или ds (single-sided - односто-
ронняя или double-sided - двусторонняя дискета) и цифры 8 или 9 (число
секторов).
Мы видим по индексным дескрипторам, что устройство fd0 связано с
устройствами fd048 и fd048ds9. Самым информативным именем (и самым
трудным при вводе с клавиатуры) является имя fd048ds9. Оно точно выра-
жает, к какому устройству и типу носителя мы обращаемся. Для того что-
бы упростить указание этого имени, устройство fd048ds9 связывается с
более короткими именами. Все три имени файла являются корректными.
Следующий список получен на машине AT, в которой имеется уст-
ройство высокой плотности:
----------------------------------
|
| 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd0
| 95 br--r--r-- 2 bin bin 2, 3 Jun 6 09:23 /dev/fd048
| 93 br--r--r-- 1 bin bin 2, 2 Jun 6 09:23 /dev/fd048ds8
| 95 br--r--r-- 2 bin bin 2, 3 Jun 6 09:23 /dev/fd048ds9
| 92 br--r--r-- 1 bin bin 2, 0 Jun 6 09:23 /dev/fd048ss8
| 94 br--r--r-- 1 bin bin 2, 1 Jun 6 09:23 /dev/fd048ss9
| 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd096
| 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd096ds15
| 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd1
| 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd148
| 97 br--r--r-- 1 bin bin 2, 10 Jun 6 09:23 /dev/fd148ds8
| 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd148ds9
| 96 br--r--r-- 1 bin bin 2, 8 Jun 6 09:23 /dev/fd148ss8
| 98 br--r--r-- 1 bin bin 2, 9 Jun 6 09:23 /dev/fd148ss9
| 103 brw-rw-rw- 2 bin bin 2, 15 Jun 6 09:23 /dev/fd196
| 103 brw-rw-rw- 2 bin bin 2, 15 Jun 6 09:23 /dev/fd196ds15
|
Если мы посмотрим на записи с индексным дескриптором 102, начиная
с середины списка, то увидим прогрессирующее упрощение имен по мере
продвижения к первой записи - устройству 0, которое имеет высокую
плотность записи по умолчанию. Для того чтобы обратиться к нему как к
устройству с низкой плотностью записи, необходимо использовать имя
fd048, а не fd0. Поскольку большинство используемых гибких дисков име-
ют низкую плотность записи, то имя fd048ds9 является умолчанием в
программе mntf.
Строка 17 соответствует опции -1 для указания устройства 1 вместо
устройства 0. Строки 18-22 проверяют, сиществует ли каталог для монти-
рования второго устройства. Если вы используете два гибких диска од-
новременно, то вы не можете монтировать их оба в один и тот же ката-
лог. Для разрешения этой проблемы программа mntf использует для монти-
рования устройства 1 каталог /mnt1, а не /mnt. Если каталог /mnt1 не
существует, по умолчанию используется каталог /mnt, и все хорошо, если
вы используете только устройство 1. Однако следует избегать монтирова-
ния одного гибкого диска на место второго. Вы можете получить непред-
виденные результаты. Если вы собираетесь монтировать два гибких диска,
убедитесь, что у вас есть и каталог /mnt, и /mnt1.
Строка 23 делает монтируемую файловую систему доступной только
для чтения в случае, если была указана опция -r, что выполняется до-
бавлением символов -r к имени каталога. Это не является частью имени
каталога, но когда shell выполняет обработку команды, пробела между
именем каталога и -r достаточно, чтобы распознать -r как опцию.
Строка 24 соответствует опции -s и присваивает переменной SYSTEM
значение sysv. Это означает, что нужно использовать другие соглашения
об именах устройств.
Строки 25-34 выполняют проверку на ошибки в командной строке. Лю-
бая опция, отличная от уже проверенных, является ошибкой, поэтому все,
что соответствует улавливающей ветке оператора case (*), считается не-
допустимой опцией. В этом случае выводится синтаксическая подсказка, и
программа завершается.
В строках 39-42 выполняется вся основная работа. Оператор case
действует в соответствии со значением переменной SYSTEM. Если оно рав-
но "sysv", выполняется строка 40. В противном случае выполняется стро-
ка 41 для системы XENIX. Обратите внимание, что в нашей версии команд-
ного файла mntf в строке sysv имеется только переменная с номером уст-
ройства. Если вы используете System V, вы можете добавить переменную
для указания плотности записи или другие параметры, которые вам нужны.
Строка 41 выполняет версию команды, рассчитанную на систему
XENIX. Переменная CMD содержит, как мы отмечали, команду монтирования
(mount) или размонтирования (umount). Последовательность символов
/dev/fd указывает файл устройства для гибкого диска. Переменная DRIVE
равна 0 или 1. Переменная DENSITY указывает устройство с высокой или
$ cat /dev/hd01
$ cat < /dev/hd01
$ tail /dev/fd0
Если вы дампируете файл устройства, содержащего файловую систему,
то данные будут представлять собой неупорядоченные блоки по 512 байт.
В одном месте вы можете увидеть списки каталогов. Другими словами, од-
но и то же устройство может рассматриваться двумя совершенно разными
способами: как файловая система и как набор неструктурированных битов.
Хотя выполнение чтения двумя этими способами может быть поучительным,
в большинстве случаев у вас не возникнет желания выполнить ЗАПИСЬ ин-
формации на одно и то же устройство двумя способами, поскольку, напри-
мер, неструктурированное устройство не будет ничего знать о файловой
системе в данном разделе и может затереть данные, относящиеся к файло-
вой системе.
Теперь, когда вы знаете, как осуществить доступ к диску, мысленно
вернемся к главе 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
----------------------------------------------------
mntf Монтирование и размонтирование гибкого диска
Монтирует и размонтирует устройство гибкого диска в каталоге как
файловую систему с возможностью записи/чтения или только чтения.
mntf [-d] [-h] [-l] [-r] [-s]
Опции:
-d размонтирование гибкого диска из корневой
файловой системы
-h использование устройства с высокой плотностью
записи (а не с низкой)
-1 использование устройства 1, а не устройства 0
-r монтирование гибкого устройства как файловой
системы с возможностью только чтения
-s использование имен устройств, принятых в System V
По умолчанию выполняется монтирование гибкого диска 0 в каталог
/mnt.
mntf -d -1
Размонтирование гибкого диска на устройстве 1.
1 :
2 # @(#) mntf v1.0 Mount floppies Author: Russ Sage
Монтирование гибких дисков
4 CMD="/etc/mount"
5 DIR="/mnt"
6 DRIVE="0"
7 DENSITY="48ds9"
8 SYSTEM="xenix"
10 if [ $# -gt 0 ]
11 then for ARG in $*
12 do
13 case $ARG in
14 -d) CMD="/etc/umount"
15 DIR="";;
16 -h) DENSITY="96ds15";;
17 -1) DRIVE="1"
18 if [ -d /mnt1 ]
19 then DIR="/mnt1"
20 else echo "the directory /mnt1 does not exist" >&2
нет каталога /mnt1
21 echo "using the directory /mnt instead" >&2
используется каталог /mnt
22 fi;;
23 -r) DIR="$DIR -r";;
24 -s) SYSTEM="sysv";;
25 *) echo "mntf: invalid argument $ARG" >&2
26 echo "usage: mntf [-d] [-h] [-1] [-r] [-s]" >&2
27 echo " -d dismount" >&2
28 echo " -h high density" >&2
29 echo " -1 use drive 1" >&2
30 echo " -r read only" >&2
31 echo " -s System V device" >&2
32 echo " default: mount XENIX drive 0 48 tpi to " >&2
33 echo " /mnt as a read/write filesystem" >&2
34 exit 1;;
35 esac
36 done
37 fi
39 case $SYSTEM in
40 sysv) $CMD /dev/fp${DRIVE}21 $DIR;;
41 xenix) $CMD /dev/fd${DRIVE}${DENSITY} $DIR;;
42 esac
CMD Основная команда, подлежащая выполнению
DIR Каталог, в котором производится монтирование устройства
DENSITY Плотность записи в виде, указанном в имени устройства
DRIVE Номер устройства, начиная с 0
SYSTEM Тип имени устройства, принятый в UNIX'е
ОПИСАНИЕ
ЗАЧЕМ НАМ НУЖЕН КОМАНДНЫЙ ФАЙЛ mntf?
В машинах с гибким диском это устройство часто используется в
повседневных операциях. Оно применяется в качестве источника при
инсталляции системы и как обычный носитель для операций копирования.
Гибкие диски можно использовать в системе UNIX двумя способами.
Первый является неструктурированной последовательностью байтов, что
полезно для копирования магнитных лент и хранения архивов. Второй
способ - поблочный, ориентирован на поддержку файловой структуры. Для
второго способа существует мощная поддержка на уровне файловой систе-
мы, но некоторые функции мы должны реализовать самостоятельно.
Для того чтобы использовать гибкий диск как файловую систему в
UNIX, вам необходимо подготовить диск и смонтировать его как файловую
систему. Когда вы закончите работу, вы должны размонтировать гибкий
диск. Это отличается от системы DOS, в которой гибкие диски можно
вставлять и вынимать когда угодно, если только в этот момент на них не
идет запись.
Поскольку использование гибких дисков включает в себя взаимосвя-
занные шаги монтирования и размонтирования, то было бы вполне естест-
венным применять одну команду с соответствующими опциями для выполне-
ния монтирования и размонтирования. Однако UNIX так не делает. Наш ко-
мандный файл mntf объединяет эти две функции в одной команде для упро-
щения работы с гибким диском. Для того чтобы сделать нашу программу
более независимой, мы предусмотрели в ней поддержку устройств системы
XENIX наравне с устройствами System V. (Системы Berkeley (BSD) не так
часто используют гибкие диски, поэтому мы не пытались иметь с ними де-
ло.)
ЧТО ДЕЛАЕТ mntf?
Эта программа обеспечивает поддержку всех возможностей для монти-
рования и размонтирования гибких дисков. Она предоставляет все опции,
необходимые команде mount, акцентирует внимание на тех аспектах файло-
вой системы, которые относятся к гибким дискам, и уменьшает количество
нажатий на клавиши, необходимых для выполнения этой работы.
Действие программы по умолчанию заключается в монтировании гибко-
го диска низкой плотности записи, находящегося в устройстве 0, в ката-
лог /mnt. Имеется много опций, чтобы попросить программу mntf сделать
то, что вам нужно. Опция -h поддерживает диск высокой плотности (1.2
Мб). В машинах PC AT первое из устройств гибких дисков имеет 96 доро-
жек на дюйм, объем 1.2 мегабайта, но может также читать и писать гиб-
кие диски с более низкой плотностью. Второй гибкий диск является уст-
ройством низкой плотности с 48 дорожками на дюйм и объемом 360 кило-
байт.
Опция -1 (цифра один, а не буква l) выполняет монтирование гибко-
го диска в устройстве 1, а не 0. Опция -r монтирует файловую систему с
возможностью ТОЛЬКО ЧТЕНИЯ. Для РАЗМОНТИРОВАНИЯ диска вместо монтиро-
вания используется опция -d. Если применяется опция -s, имя устройства
изменяется таким образом, чтобы оно соответствовало системе System V,
а не XENIX. Это незначительная проблема, поскольку схемы именования не
очень отличаются. Данная программа создана для системы XENIX и обеспе-
чивает наилучшие возможности именно в ней.
Не все опции совместимы друг с другом, но проверка на совмести-
мость не выполняется. Например, команда "mntf -d -r" пытается размон-
тировать файловую систему с возможностью только чтения, а команда UNIX
unmount, которая выполняет эту операцию, отбрасывает ее, выдавая сооб-
щение об ошибке. В целях упрощения мы отказались от проверки соот-
ветствия опций, а вместо этого предоставили UNIX'у право выдавать
сообщения об ошибках для информирования пользователя о возникших проб-
лемах. Если вы хотите, чтобы эту программу мог применять относительно
неопытный пользователь, вам нужно вставить в нее выполнение таких про-
верок.
1. $ mntf -s
Монтирование гибкого диска как файловой системы с возможностью
записи-чтения и с использованием имен устройств, принятых в System V.
2. $ mntf -h -1 -r
Монтирование гибкого диска высокой плотности записи на устройстве
1 как файловой системы с возможностью только чтения и с использованием
формата имен устройств, принятого в XENIX. Эта команда должна закон-
читься неудачей (устройство 1 имеет низкую плотность).
3. $ mntf -d -h
Размонтирование файловой системы на устройстве 0 с высокой плот-
ностью записи и с использованием имен устройств, принятых в XENIX.
Для того чтобы максимально упростить программу, все фактически
выполняемые команды помещены в текстовые строки. Это позволяет достичь
большей гибкости при написании программы. Результатом анализа команд-
ной строки является формирование команды, которая выполняется в конце
программы mntf.
В строках 4-8 инициализируются установки по умолчанию. Переменная
CMD содержит команду UNIX, которая в итоге должна быть выполнена, по
умолчанию это команда mount. Переменная DIR указывает каталог, в кото-
рый должно быть смонтировано устройство, по умолчанию это каталог
/mnt. Переменная DRIVE является номером устройства (по умолчанию 0) и
используется для формирования корректного имени устройства. Переменная
DENSITY по умолчанию установлена для носителя низкой плотности, т.е.
48 дорожек на дюйм, двусторонняя дискета с 9 секторами на дорожку
(48ds9).
В строке 10 проверяется, указаны ли в командной строке какие-либо
аргументы. Если количество аргументов больше нуля, последовательно
проверяется каждый аргумент. Если какой-либо из аргументов соот-
ветствует образцам в строках 13-35, то он изменяет содержимое команд-
ной строки.
Строка 14 управляет опцией -d для размонтирования гибкого диска.
Переменная CMD изменяется на umount вместо mount. После этого перемен-
ной DIR присваивается нулевое значение, поскольку команде umount тре-
буется не каталог, а только имя устройства. Переменная DIR должна быть
частью строки с командой для того, чтобы мы могли использовать одну и
ту же "заготовленную" командную строку для всех вариантов. В данном
случае мы устанавливаем эту переменную в нуль, а shell при синтакси-
ческом разборе удаляет ее из командной строки.
В строке 16 выполняется изменение плотности записи используемого
носителя. Обращение к различным типам носителей выполняется по именам
файлов устройств. Каждое имя указывает драйвер устройства, который ра-
ботает с соответствующей аппаратурой. Устройство высокой плотности мо-
жет работать в режимах как высокой, так и низкой плотности записи. Од-
нако если вы укажете имя устройства с высокой плотностью записи, а на
самом деле оно имеет низкую плотность, то драйвер работать не будет
из-за ошибок чтения.
Ниже приводится список, полученный командой ls в каталоге dev для
машины XT, в которой нет устройств высокой плотности записи. Этот
список позволяет проиллюстрировать, каким образом осуществляется обра-
щение к именам устройств:
------------------------------
|
| 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd0
| 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd048
| 126 brw-rw-rw- 1 root root 2, 12 Feb 18 17:09 /dev/fd048ds8
| 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd048ds9
| 125 brw-rw-rw- 1 root root 2, 8 Feb 18 17:09 /dev/fd048ss8
| 127 brw-rw-rw- 1 root root 2, 0 Feb 18 17:09 /dev/fd048ss9
| 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd1
| 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd148
| 129 brw-rw-rw- 1 root root 2, 13 Feb 18 17:09 /dev/fd148ds8
| 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd148ds9
| 128 brw-rw-rw- 1 root root 2, 9 Feb 18 17:09 /dev/fd148ss8
| 130 brw-rw-rw- 1 root root 2, 1 Feb 18 17:09 /dev/fd148ss9
|
Крайнее слева число представляет собой номер индексного дескрип-
тора. Мы используем его как ссылку для определения уникального имени
файла. Как мы уже отмечали ранее, несколько имен устройств могут от-
носиться к одному и тому же файлу, рассматриваемому с различных точек
зрения. Например, в данном списке вы видите, что три устройства имеют
индексный дескриптор 32. Второе число слева представляет собой коли-
чество связей. Когда оно больше единицы, то это также указывает, что
несколько устройств являются на самом деле одним файлом, а следова-
тельно используют один и тот же индексный дескриптор. Следующие два
числа являются старшим и младшим номером. Старший номер относится к
драйверу устройства, а младший является уникальным номером одного из
устройств, управляемых одним и тем же драйвером.
Большинство из этих имен устройств соответствуют определенному
шаблону. Они состоят из символов fd (floppy disk - гибкий диск), цифры
0 или 1 (номер устройства), числа 48 (плотность, выраженная в виде ко-
личества дорожек на дюйм), символов ss или ds (single-sided - односто-
ронняя или double-sided - двусторонняя дискета) и цифры 8 или 9 (число
секторов).
Мы видим по индексным дескрипторам, что устройство fd0 связано с
устройствами fd048 и fd048ds9. Самым информативным именем (и самым
трудным при вводе с клавиатуры) является имя fd048ds9. Оно точно выра-
жает, к какому устройству и типу носителя мы обращаемся. Для того что-
бы упростить указание этого имени, устройство fd048ds9 связывается с
более короткими именами. Все три имени файла являются корректными.
Следующий список получен на машине AT, в которой имеется уст-
ройство высокой плотности:
----------------------------------
|
| 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd0
| 95 br--r--r-- 2 bin bin 2, 3 Jun 6 09:23 /dev/fd048
| 93 br--r--r-- 1 bin bin 2, 2 Jun 6 09:23 /dev/fd048ds8
| 95 br--r--r-- 2 bin bin 2, 3 Jun 6 09:23 /dev/fd048ds9
| 92 br--r--r-- 1 bin bin 2, 0 Jun 6 09:23 /dev/fd048ss8
| 94 br--r--r-- 1 bin bin 2, 1 Jun 6 09:23 /dev/fd048ss9
| 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd096
| 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd096ds15
| 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd1
| 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd148
| 97 br--r--r-- 1 bin bin 2, 10 Jun 6 09:23 /dev/fd148ds8
| 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd148ds9
| 96 br--r--r-- 1 bin bin 2, 8 Jun 6 09:23 /dev/fd148ss8
| 98 br--r--r-- 1 bin bin 2, 9 Jun 6 09:23 /dev/fd148ss9
| 103 brw-rw-rw- 2 bin bin 2, 15 Jun 6 09:23 /dev/fd196
| 103 brw-rw-rw- 2 bin bin 2, 15 Jun 6 09:23 /dev/fd196ds15
|
Если мы посмотрим на записи с индексным дескриптором 102, начиная
с середины списка, то увидим прогрессирующее упрощение имен по мере
продвижения к первой записи - устройству 0, которое имеет высокую
плотность записи по умолчанию. Для того чтобы обратиться к нему как к
устройству с низкой плотностью записи, необходимо использовать имя
fd048, а не fd0. Поскольку большинство используемых гибких дисков име-
ют низкую плотность записи, то имя fd048ds9 является умолчанием в
программе mntf.
Строка 17 соответствует опции -1 для указания устройства 1 вместо
устройства 0. Строки 18-22 проверяют, сиществует ли каталог для монти-
рования второго устройства. Если вы используете два гибких диска од-
новременно, то вы не можете монтировать их оба в один и тот же ката-
лог. Для разрешения этой проблемы программа mntf использует для монти-
рования устройства 1 каталог /mnt1, а не /mnt. Если каталог /mnt1 не
существует, по умолчанию используется каталог /mnt, и все хорошо, если
вы используете только устройство 1. Однако следует избегать монтирова-
ния одного гибкого диска на место второго. Вы можете получить непред-
виденные результаты. Если вы собираетесь монтировать два гибких диска,
убедитесь, что у вас есть и каталог /mnt, и /mnt1.
Строка 23 делает монтируемую файловую систему доступной только
для чтения в случае, если была указана опция -r, что выполняется до-
бавлением символов -r к имени каталога. Это не является частью имени
каталога, но когда shell выполняет обработку команды, пробела между
именем каталога и -r достаточно, чтобы распознать -r как опцию.
Строка 24 соответствует опции -s и присваивает переменной SYSTEM
значение sysv. Это означает, что нужно использовать другие соглашения
об именах устройств.
Строки 25-34 выполняют проверку на ошибки в командной строке. Лю-
бая опция, отличная от уже проверенных, является ошибкой, поэтому все,
что соответствует улавливающей ветке оператора case (*), считается не-
допустимой опцией. В этом случае выводится синтаксическая подсказка, и
программа завершается.
В строках 39-42 выполняется вся основная работа. Оператор case
действует в соответствии со значением переменной SYSTEM. Если оно рав-
но "sysv", выполняется строка 40. В противном случае выполняется стро-
ка 41 для системы XENIX. Обратите внимание, что в нашей версии команд-
ного файла mntf в строке sysv имеется только переменная с номером уст-
ройства. Если вы используете System V, вы можете добавить переменную
для указания плотности записи или другие параметры, которые вам нужны.
Строка 41 выполняет версию команды, рассчитанную на систему
XENIX. Переменная CMD содержит, как мы отмечали, команду монтирования
(mount) или размонтирования (umount). Последовательность символов
/dev/fd указывает файл устройства для гибкого диска. Переменная DRIVE
равна 0 или 1. Переменная DENSITY указывает устройство с высокой или