Опубликован: 04.07.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Европейский Университет в Санкт-Петербурге
Лекция 6:

Файловая система

Структура файловых систем, соответствующих POSIX

Основные понятия: суперблок, метаданные, точка монтирования

Хотя стандарт POSIX (его свежайшей версией в настоящий момент является IEEE Std 1003.1, 2004 Edition) не предусматривает конкретной реализации структуры файловой системы, во всех известных нам файловых системах ОС UNIX (а все они отвечают стандарту POSIX) присутствуют три сущности: суперблок, метаданные и данные. При этом суперблок обязательно содержит данные, относящиеся к файловой системе в целом; метаданные состоят из атрибутов файлов, к которым непременно относится уникальный номер файла в файловой системе (его часто называют индексным дескриптором файла), а сами данные представляют собой файлы – поименованные объекты, расположенные на физическом или логическом носителе.

Эти сущности могут являться достаточно высоким уровнем абстракции: скажем, в файловой системе ZFS структуры, физически записанные на диске, заметно сложнее, чем упомянутые сущности, а в UFS суперблок, метаданные в виде таблицы индексных дескрипторов и файлы на самом деле размещаются на диске практически без дополнительных вспомогательных данных.

Дерево и ветвь до присоединения (монтирования) ветви

Рис. 6.3. Дерево и ветвь до присоединения (монтирования) ветви
Дерево после присоединения ветви

Рис. 6.4. Дерево после присоединения ветви

Общим понятием для всех файловых систем, соответствующих POSIX, также является точка монтирования. Это – каталог, в котором появляется содержимое логического или физического раздела файловой системы после его монтирования. Монтирование представляет собой операцию присоединения "ветви" к дереву файловой системы и выполняется автоматически программой автомонтирования или по команде mount.

Как видно из рис. 6.3, до того, как ветвь будет присоединена к файловой системе, должны существовать и файловая система, и ветвь. Проще говоря, если вы присоединяете новый носитель к существующей файловой системе, на этом носителе уже должны быть размечены разделы и содержаться файловая система известного операционной системе типа. Это происходит, например, когда вы вставляете DVD-диск в привод и желаете его прочесть.

Чтобы содержимое нового диска стало доступным для операционной системы, требуется произвести операцию "монтирования", т.е. сообщить операционной системе, в какой каталог существующей файловой системы следует поместить содержимое нового диска. Этот каталог называется "точкой монтирования" (на рис. 6.3 точка монтирования показана стрелкой). После монтирования файловая система приобретает целостный вид, и пользователю (или стороннему наблюдателю) кажется, что дерево файловой системы монолитно, хотя на самом деле оно может состоять из нескольких ветвей, каждая из которых присоединена в свою точку монтирования ( рис. 6.4).

Предположим, что для начала у нас есть только корень дерева (корневой раздел). Мы можем присоединить к нашей файловой системе другие разделы. Присоединим еще один раздел (в нем хранятся какие-то каталоги, но пока он не имеет имени в нашей файловой системе).

Для присоединения мы должны указать, в какое место существующей файловой системы (точку монтирования) следует смонтировать новый раздел. После монтирования все каталоги нового раздела будут доступны в качестве подкаталогов точки монтирования. При этом истинная структура файловой системы оказывается прозрачна для пользователя. После того, как раздел смонтирован, пользователь не отличит каталоги одного раздела от другого.

Посмотреть, какие разделы в какие точки монтирования присоединены, можно командой mount, которая в разных системах UNIX выдает сведения в разном формате. Ниже мы обсудим форматы трех систем – FreeBSD, Linux и Solaris.

Обратите внимание на то, что во всех файловых системах кроме ZFS справедливо следующее: если каталог является точкой монтирования, то он находится на отдельном разделе, а если нет – то он расположен на том же разделе, что и родительский каталог. Например, каталог /var в примерах ниже расположен на отдельном разделе, а каталог /etc – в том же разделе, что и каталог /.

Вот как выглядит информация, выдаваемая mount в разных системах UNIX:

FreeBSD:

mount
/dev/ad0s1a on / (ufs, local)
/dev/ad0s1e on /var (ufs, local, soft-updates)
/dev/ad0s1f on /cache (ufs, local, soft-updates)
/dev/ad0s1g on /usr (ufs, local, soft-updates)
procfs on /proc (procfs, local)

Linux:

mount
/dev/hda1 on / type ext2 (rw)
none on /proc type proc (rw)
/dev/hda5 on /usr type ext2 (rw)
/dev/hda6 on /var type ext2 (rw)

Solaris:

/ on /dev/dsk/c0d0s0 read/write/setuid/devices/intr/largefiles/logging/
xattr/onerror=panic/dev=1980000 on Пн янв. 14 23:48:38 2008
/devices on /devices read/write/setuid/devices/dev=4380000 on Пн янв.
14 23:48:21 2008
/dev on /dev read/write/setuid/devices/dev=43c0000 on Пн янв. 14
23:48:21 2008
/system/contract on ctfs read/write/setuid/devices/dev=4400001 on Пн
янв. 14 23:48:21 2008
/proc on proc read/write/setuid/devices/dev=4440000 on Пн янв. 14
23:48:21 2008
/etc/mnttab on mnttab read/write/setuid/devices/dev=4480001 on Пн янв.
14 23:48:21 2008
/etc/svc/volatile on swap read/write/setuid/devices/xattr/dev=44c0001 on
Пн янв. 14 23:48:21 2008
/system/object on objfs read/write/setuid/devices/dev=4500001 on Пн
янв. 14 23:48:21 2008
/usr on /dev/dsk/c0d0s6 read/write/setuid/devices/intr/largefiles/
logging/xattr/onerror=panic/dev=1980006 on Пн янв. 14 23:48:38 2008
/lib/libc.so.1 on /usr/lib/libc/libc_hwcap2.so.1 read/write/setuid/
devices/dev=1980006 on Пн янв. 14 23:48:35 2008
/dev/fd on fd read/write/setuid/devices/dev=4680001 on Пн янв. 14
23:48:38 2008
/var on /dev/dsk/c0d0s1 read/write/setuid/devices/intr/largefiles/
logging/xattr/onerror=panic/dev=1980001 on Пн янв. 14 23:48:39 2008
/tmp on swap read/write/setuid/devices/xattr/dev=44c0002 on Пн янв. 14
23:48:39 2008
/var/run on swap read/write/setuid/devices/xattr/dev=44c0003 on Пн янв.
14 23:48:39 2008
/opt on /dev/dsk/c0d0s5 read/write/setuid/devices/intr/largefiles/
logging/xattr/onerror=panic/dev=1980005 on Пн янв. 14 23:48:44 2008
/export/home on /dev/dsk/c0d0s7 read/write/setuid/devices/intr/
largefiles/logging/xattr/onerror=panic/dev=1980007 on Пн янв. 14
23:48:44 2008
/home/filip on /export/home/filip read/write/setuid/devices/dev=1980007
on Вт янв. 15 14:06:53 2008

В Solaris выдается значительно больше информации, чем в Linux и FreeBSD, и если вы привыкли к более короткому выводу, имеет смысл написать короткий скрипт, который и будет вызываться вместо mount каждый раз. Например, это можно сделать так:

mount -p | grep dsk | awk '{print $3' on '$1' ('$7')'}'
/ on /dev/dsk/c0d0s0 (rw,intr,largefiles,logging,xattr,onerror=panic)
/usr on /dev/dsk/c0d0s6 (rw,intr,largefiles,logging,xattr,onerror=panic)
/var on /dev/dsk/c0d0s1 (rw,intr,largefiles,logging,xattr,onerror=panic)
/opt on /dev/dsk/c0d0s5 (rw,intr,largefiles,logging,xattr,onerror=panic)
/export/home on /dev/dsk/c0d0s7 (rw,intr,largefiles,logging,xattr,
onerror=panic)
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Александр Гордеев
Александр Гордеев
Казахстан, Алматы, ТУРАН
Александр Даниленко
Александр Даниленко
Россия, Москва, 797, 1993