Монтирование файловой системы
Монтирование файловой системы
Прежде чем может состояться работа с файлами, соответствующая файловая система должна быть встроена в существующее иерархическое дерево.
Только после этого ядро сможет выполнять файловые операции, такие как создание, открытие, чтение или запись в файл. Эта операция встраивания получила название подключения или монтирования файловой системы.
Каждая подключенная файловая система представлена на независимом уровне в виде структуры vfs, аналоге записи таблицы монтирования дисковой файловой системы. Структуры vfs всех подключенных файловых систем организованы в виде односвязного списка, в совокупности обеспечивая информацию, необходимую для обслуживания всего иерархического дерева, а также информацию о реальной файловой системе, которые не изменяются на протяжении работы. Первой записью списка всегда является корневая файловая система. В дальнейшем, список vfs мы будем называть устоявшимся термином — таблица монтирования. Поля структуры vfs приведены в табл. 4.3.
Таблица 4.3. Поля структуры vfs
Поле vfs_data содержит указатель на данные реальной файловой системы. Например, для дисковой файловой системы s5fs, это поле указывает на суперблок, размещенный в памяти.
Поле vfs_op указывает на операции файловой системы, которые в терминах объектно-ориентированного подхода могут быть названы виртуальными методами объекта vfs. Возможные операции файловой системы приведены в табл. 4.4. Поскольку они существенным образом зависят от архитектуры и конкретной реализации, поля vfs_op заполняются указателями на соответствующие функции реальной файловой системы при ее монтировании.
Таблица 4.4. Операции файловой системы
int (*vfs_mount)() Подключает файловую систему. Обычно операция включает размещение суперблока в памяти и инициализацию записи в таблице монтирования. int (*vfs_unmount)() Отключает файловую систему. Операция включает актуализацию данных файловой системы на накопителе (например, синхронизацию дискового суперблока и его образа в памяти). int (*vfs_root)() Возвращает корневой vnode файловой системы. int (*vfs_statfs)() Возвращает общую информацию о файловой системе, в частности: размер блока хранения данных, число блоков, число свободных блоков, число inode. int (*vfs_sync)() Актуализирует все кэшированные данные файловой системы. int (*vfs_fid)() Возвращает файловый идентификатор (fid — file Identifier), однозначно адресующий файл в данной файловой системе. В качестве fid может, например, выступать номер inode реальной файловой системы. int (*vfs_vget)() Возвращает указатель на vnode для файла данной файловой системы, адресованного fid.Для инициализации и монтирования реальной файловой системы UNIX хранит коммутатор файловых систем (File System Switch), адресующий процедурный интерфейс для каждого типа файловой системы, поддерживаемой ядром. UNIX System V для этого использует глобальную таблицу, каждый элемент которой соответствует определенному типу реальной файловой системы, например s5fs, ufs или nfs. Элемент этой таблицы vfssw имеет поля, указанные в табл. 4.5.
Таблица 4.5. Коммутатор файловых систем
char *vsw_name Имя типа файловой системы int (*vsw_init)() Адрес процедуры инициализации struct vfsops *vsw_vfsops Указатель на вектор операций файловой системы long vsw_flag ФлагиВзаимодействие структур виртуальной файловой системы показано на рис. 4.9.
Рис. 4.9. Структуры данных виртуальной файловой системы
Монтирование файловой системы производится системным вызовом mount(2). В качестве аргументов передаются тип монтируемой файловой системы, имя каталога, к которому подключается файловая система (точка монтирования), флаги (например, доступ к файловой системе только для чтения) и дополнительные данные, конкретный вид и содержимое которых зависят от реализации реальной файловой системы. При этом производится поиск vnode, соответствующего файлу — точке монтирования (операция lookup() или namei() трансляции имени), и проверяется, что файл является каталогом и не используется в настоящее время для монтирования других файловых систем.
Затем происходит поиск элемента коммутатора файловых систем vfssw[], соответствующего типу монтируемой файловой системы. Если такой элемент найден, вызывается операция инициализации, адресованная полем vsw_init(). При этом выполняется размещение специфических для данного типа файловой системы данных, после чего ядро размещает структуру vfs и помещает ее в связанный список, подключенных файловых систем, как это показано на рис. 4.11. Поле vfs_vnodecovered указывает на vnode точки монтирования. Это поле устанавливается нулевым для корневой (root) файловой системы, элемент vfs которой всегда расположен первым в списке подключенных файловых систем. Поле vfs_op адресует вектор операций, определенный для данного типа файловой системы. Наконец, указатель на данный элемент vfs сохраняется в поле v_vfsmountedhere виртуального индексного дескриптора каталога — точки монтирования.
После этого вызывается операция vfs_mount() соответствующая данному типу файловой системы. Конкретные действия определяются реализацией файловой системы и могут существенно различаться. Например, операция монтирования локальной файловой системы ufs предусматривает считывание в память метаданных системы, таких как суперблок, в то время как монтирование удаленной NFS файловой системы включает передачу сетевого запроса файловому серверу. Однако монтирование предусматривает выполнение и ряда общих операций, включающих:
? проверку соответствующих прав на выполнение монтирования;
? размещение и инициализацию специфических для файловой системы данного типа данных, сохранение адреса этих данных в поле vfs_data элемента vfs;
? размещение vnode для корневого каталога подключаемой файловой системы, доступ к которому осуществляется с помощью операции vfs_root().
После подключения файловая система может быть адресована по имени точки монтирования. В частности, при отключении файловой системы с помощью системного вызова umount(2), в качестве аргумента ему передается имя точки монтирования. Адресация с помощью специального файла устройства, как это происходило раньше, нарушает унифицированный вид виртуальной файловой системы, так как некоторые типы вообще не имеют такого устройства (например, NFS).
Определение корневого vnode для подключенной файловой системы производится с помощью операции vfs_root(). Заметим, что в некоторых реализациях независимой файловой системы (например, в SCO UNIX, хотя там используется другая терминология) одно из полей записи таблицы монтирования явно указывало на корневой vnode. Подход, предложенный фирмой Sun Microsystems, позволяет не хранить корневой vnode постоянно, размещая его только при необходимости работы с файловой системой. Это минимизирует ресурсы, занимаемые подключенными файловыми системами, которые продолжительное время не используются.
На рис. 4.10 приведен вид логического файлового дерева до и после монтирования файловой системы А к каталогу /usr/local. На рис. 4.11 приведен вид виртуальной файловой системы после этой операции монтирования.
Рис. 4.10. Монтирование файловой системы А к корневой файловой системе
Рис. 4.11. Схема монтирования файловых систем различных типов
Исследовать описанные структуры данных можно с помощью утилиты crash(1M). Для этого применяются команды vfs и mode, отображающие содержимое соответствующих структур данных. Приведем пример такого исследования файлового дерева операционной системы Solaris 2.5:
# crash
dumpfile = /dev/mem, namelist = /dev/ksyms, outfile = stdout
> !mount
/ on /dev/dsk/c0t3d0s0 read/write on Tue Feb 25 15:29:11 1997
/usr/local on /dev/dsk/c0t0d0s0 read/write on Tue Feb 25 15:29:13 1997
/tmp on swap read/write on Tue Feb 25 15:29:13 1997
/dev/fd on fd read/write/setuid on Tue Feb 25 15:29:11 1997
/proc on /proc read/write/setuid on Tue Feb 25 15:29:11 1997
/cdrom/unnamed_cdrom on /dev/dsk/c0t6d0 ronly on Mon Mar 25 15:29:43 1997
> vfs
FSTYP BSZ MAJ/MIN FSID VNCOVERED PDATA BCOUNT FLAGS
ufs 8192 32,24 800018 0 f5b79b78 0 notr
ufs 8192 32,0 800000 f5c29ad0 f5c28c88 0 notr
tmpfs 4096 0,0 0 f5958d18 f5d16ee0 0 notr
fd 1024 158,0 2780000 f5c4f5d8 0 0
proc 1024 156,0 2700000 f5c4f718 0 283920
hsfs 2048 91,1 b9d02de5 f5f20698 f5b60d98 0 rd
Мы распечатали список подключенных файловых систем (команда mount(1M)) и элементы vfs таблицы монтирования. Рассмотрим подробнее vnode точки монтирования файловой системы раздела /dev/dsk/c0t0d0s0.
> vnode f5c29ad0
VCNT VFSMNTED VFSP STREAMP VTYPE RDEV VDATA VFILOCKS VFLAG
2 f5c25c60 f0286570 0 d - f5c29ac8 0 -
Удостоверимся, что поле v_vfsmountedhere (VFSMNTED) адресует элемент vfs подключенной файловой системы, а поле v_fsp (VFSP) указывает на элемент корневой файловой системы.
> vfs f5c25c60
FSTYP BSZ MAJ/MIN FSID VNCOVERED PDATA BCOUNT FLAGS
ufs 8192 32,0 800000 f5c29ad0 f5c28c88 0 notr
> vfs f0286570
FSTYP BSZ MAJ/MIN FSID VNCOVERED PDATA BCOUNT FLAGS
ufs 8192 32,24 800018 0 f5b79b78 0 notr
Наконец, посмотрим на содержимое inode файловой системы ufs, адресованного полем v_data (VDATA) виртуального индексного дескриптора:
> ui f5c29ac8
UFS INODE TABLE SIZE = 1671
SLOT MAJ/MIN INUMB RCNT LINK UID GID SIZE MODE FLAGS
- 32,24 7552 2 2 0 0 512 d---755 rf
Полученная информация показывает, что запись таблицы inode ufs адресует дисковый индексный дескриптор с номером 7552 (INUMB). Для того чтобы узнать имя файла, используем команду ncheck(1M):
> !ncheck -i 7552
/dev/dsk/c0t3d0s0:
7552 /usr/local
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
10.2.3. Идентификатор uid файловой системы
10.2.3. Идентификатор uid файловой системы В очень специальных случаях программе может понадобиться сохранять свои права root для всего, кроме доступа к файловой системе, при котором она использует пользовательский uid. Изначально использовавшийся в Linux NFS-сервер пространства
Архитектура виртуальной файловой системы
Архитектура виртуальной файловой системы Как было показано, различные типы файловых систем существенно отличаются по внутренней архитектуре. В то же время современные версии UNIX обеспечивают одновременную работу с несколькими типами файловых систем. Среди них можно
Целостность файловой системы
Целостность файловой системы Значительная часть файловой системы находится в оперативной памяти. А именно, в оперативной памяти расположены суперблок примонтированной системы, метаданные активных файлов (в виде системно-зависимых inode и соответствующих им vnode) даже
5.14.2 Демонтирование файловой системы
5.14.2 Демонтирование файловой системы Синтаксис вызова системной функции umount:umount(special filename);где special filename указывает демонтируемую файловую систему. При демонтировании файловой системы (Рисунок 5.27) ядро обращается к индексу демонтируемого устройства, восстанавливает
5.16.1 Целостность файловой системы
5.16.1 Целостность файловой системы Ядро посылает свои записи на диск для того, чтобы свести к минимуму опасность искажения файловой системы в случае системного сбоя. Например, когда ядро удаляет имя файла из родительского каталога, оно синхронно переписывает каталог на
5.18 СОПРОВОЖДЕНИЕ ФАЙЛОВОЙ СИСТЕМЫ
5.18 СОПРОВОЖДЕНИЕ ФАЙЛОВОЙ СИСТЕМЫ Ядро поддерживает целостность системы в своей обычной работе. Тем не менее, такие чрезвычайные обстоятельства, как отказ питания, могут привести к фатальному сбою системы, в результате которого содержимое системы утрачивает свою
Глава 4 Идеология файловой системы
Глава 4 Идеология файловой системы Одним из столпов операционной системы является файловая система. От ее архитектуры, возможностей, надежности во многом зависит работоспособность операционной системы. Помимо продуманной «родной» файловой системы крайне желательно,
4.13. Обслуживание файловой системы
4.13. Обслуживание файловой системы Обслуживание файловой системы в ОС Linux сводится к двум операциям:1. Проверка.2. Дефрагментация.Проверка и восстановление файловой системы Linux выполняется программой fsck. Перед проверкой файловая система должна быть смонтирована в режиме
2.2. Изнанка файловой системы
2.2. Изнанка файловой системы С точки зрения операционной системы, под файловой системой понимается внутренняя управляющая структура, заведующая хранением данных на физическом носителе, их поиском, извлечением и записью по запросам программ. Такие управляющие структуры
4.2.4. Проверка файловой системы
4.2.4. Проверка файловой системы Для проверки файловой системы используется программа fsck (сокращение от file system check). С помощью данной программы вы можете проверить не только файловые системы Linux, но и Windows-разделы (только vfat). Единственное требование - перед началом проверки
Ускорение файловой системы
Ускорение файловой системы Можно ускорить действие файловой системы, (если позволяет оперативная память) увеличив параметр типа DWORD °IoPageLockLimit° от заданных по умолчанию 512 КБ до 4 МБ и более в разделе HKLMSYSTEMCurrentControlSetControlSession ManagerMemory ManagementЭтот параметр представляет
Выбор файловой системы
Выбор файловой системы Файловая система необходима для систематизации файлов и управления ими. Термин FAT образовался от начальных букв словосочетания File Allocation Table (таблица размещения файлов). Файловая система создается при форматировании жесткого диска, который может
Работа с каталогами файловой системы
Работа с каталогами файловой системы Функция Краткое описание chdir изменение текущего рабочего каталога getcwd получить имя текущего рабочего каталога mkdir создать новый каталог rmdir удаление каталога Система программирования ТС предоставляет, кроме перечисленных,
12.4.5. Создание и монтирование файлов с файловой системой
12.4.5. Создание и монтирование файлов с файловой системой Иногда (например, для создания своего мини-дистрибутива) требуется создать файл, содержащий собственную файловую систему. Первым делом надо создать пустой файл, потом создать в нем файловую систему, а затем
Дефрагментация файловой системы
Дефрагментация файловой системы При интенсивной работе на компьютере пользователю часто приходится создавать, копировать, перемещать, удалять большое количество файлов, кроме того, сама операционная система создает и удаляет много временных файлов. Вскоре это может