Структура каталогов ОС Linux. Файловая система ОС Linux ext2fs, ext3fs
Полное дерево каталогов разделено на части, каждая из которых может располагаться на своем диске или в своем разделе в интересах упрощения системного администрирования и резервирования. Это позволяет работать в случае недостатка места на дисках. Главные части дерева каталогов: файловые системы root, /usr, /var и /home (рис.). Каждая часть имеет свою цель. Дерево каталогов было разработано так, чтобы оно хорошо работало в сети Linux-машин, которые могут совместно использовать некоторые части файловых систем устройств только для чтения (например, CD-ROM), или сети с NFS.
Роли различных частей дерева каталогов описаны ниже.
- Корневая файловая система специфична для каждой машины (обычно она хранится на локальном диске, хотя это мог бы быть ramdisk или сетевой диск) и содержит файлы, которые являются необходимыми для загрузки системы. Содержимого корневой файловой системы достаточно для загрузки в однопользовательском режиме. Именно эта файловая система используется при загрузке до тех пор, пока не будут смонтированы другие файловые системы. Она также содержит инструментальные средства для ремонта поврежденной системы и для восстановления потерянных файлов из резервных копий.
- Файловая система /usr содержит все команды, библиотеки, man-страницы, исходные тексты и другие неизменяемые файлы, необходимые для нормальной работы системы. Никакие файлы в /usr не должны быть специфическими для любой конкретной машины, и при этом они не должны измениться при нормальном использовании. Это позволяет файлам быть разделенными по сети, что может быть практично, так как это сохраняет дисковое пространство (могут легко иметься сотни мегабайт в /usr) и упрощает администрирование (только машина, на которой хранится /usr, должна быть изменена при модификации прикладной программы, а не каждая машина отдельно). Даже если файловая система находится на локальном диске, она может быть установлена только для чтения, что уменьшит возможность искажения в случае отказа.
- Файловая система /var содержит файлы, которые изменяются в ходе работы системы. Например, там лежат каталоги буферов для почты, новостей, печати и т.п., файлы протоколов, форматированных man-страниц и временные файлы.
- Файловая система /home содержит все домашние каталоги пользователей системы, то есть, все реальные данные системы. Отделение пользовательских каталогов от системы упрощает резервирование данных. Если пользователей много, эта файловая система может быть разделена на несколько (например, /home/students и /home/teacher).
Хотя различные части выше были названы файловыми системами, это не значит, что они фактически находятся на отдельных дисках. Они могут храниться на одном диске, если речь идет о небольшом сервере или личном однопользовательском компьютере. Дерево каталогов может быть также разделено по-другому, в зависимости от того, насколько большие диски использованы, и как распределено место на них для различных целей, тем не менее, важно, чтобы все стандартные имена работали; даже если, скажем, /var и /usr фактически на том же самом разделе, имена /usr/lib/libc.a и /var/log/messages должны работать, например, перемещая файлы из /var в /usr/var, и делая /var ссылкой на /usr/var.
Структура файловой системы в Unix группирует файлы по их назначению, то есть, все команды находятся в одном месте, все файлы данных в другом, документация в третьем и так далее. Альтернативный вариант группировал файлы согласно программе, которой они принадлежат, то есть, все Emacs-файлы были бы в одном каталоге, весь TeX в другом, и так далее. Проблема с последним подходом состоит в том, что это делает трудным совместно использовать файлы (каталог программ часто содержит статические, общие, изменяющиеся и личные файлы), и иногда даже находить файлы, например, man-страницы в огромном числе мест, благодаря чему поиск их программой просмотра сильно осложняется.
Корневая файловая система. Файловая система root должна быть небольших размеров, так как она содержит важные файлы и команды. Чем меньше объем файловой системы и чем реже она подлежит изменениям, тем меньше вероятность ее повреждения. Если система root повреждена, то обычно это означает, что начальная загрузка компьютера невозможна (кроме отдельных методов, например при помощи дискет). Файловая система дистрибутива имеет архитектуру классической файловой системы ОС Linux с единым корневым каталогом, обозначаемым символом обратной косой черты ("слэш") — /.
Ниже приведено описание основных каталогов верхнего уровня.
/home- В этом каталоге размещены домашние каталоги пользователей. Linux является многопользовательской системой и каждому пользователю присваивается имя и уникальный каталог для персональных файлов. Этот каталог называется "home" (домашним) каталогом пользователя.
/bin - В этом каталоге хранятся основные команды, необходимые пользователю для работы в системе. Например, такие как командные оболочки и команды файловой системы (ls, cp и т.д.). Каталог /bin обычно не изменяется после установки. Если изменяется, то обычно лишь при обновлениях пакетов программ, предоставленных разработчиками операционной системы.
/proc - Это специальный каталог не входящий в файловую систему. Каталог /proc представляет собой виртуальную файловую систему, которая предоставляет доступ к информации ядра. Различная информация, которую ядро может сообщить пользователям, находится в "файлах" каталога /proc. Например, в файле /proc/modules находится список загруженных модулей ядра. А в файле /proc/cpuinfo — информация о процессоре компьютера.
/usr - Это один из самых больших каталогов в системе. Практически всё остальное расположено здесь. Программы, документация, исходный код ядра и система X Window. Именно в этот каталог, чаще всего, устанавливаются программы.
/boot - В этом каталоге хранятся файлы, используемые загрузчиком ОС — LInux LOader (LILO). Этот каталог так же практически не изменяется после установки.
/lib - В этом каталоге находятся системные библиотеки, необходимые для основных программ: библиотека C, динамический загрузчик, библиотека ncurses, модули ядра и другое.
dev - В этом каталоге размещены описания устройств системы. В Linux всё рассматривается, как файл, даже различные устройства, такие как последовательные порты, жёсткие диски и сканеры. Для получения доступа к определённому устройству, необходимо чтобы существовал специальный файл, называемый device node. Все эти файлы находятся в каталоге /dev. Аналогично устроено большинство UNIX-подобных операционных систем.
/etc - Этот каталог содержит файлы настроек: всё, от конфигурационных файлов системы X Window, базы данных пользователей и до стартовых сценариев.
/var - В этом каталоге хранятся системные лог-файлы, кэш-файлы и файлы-замки программ. Это каталог для часто меняющихся данных.
Файловая система ext2fs, ext3fs. Ext2fs похожа на файловую систему FFS с небольшими изменениями. Вместо 10 прямых и 3х косвенных дисковых адресов используется 12 прямых и 3 косвенных. Длина дискового адреса увеличена до 4 байт, что позволяет поддерживать большие дисковые разделы. Ext2fs использует те же алгоритмы информации что и FFS.
Ext2fs резервирует несколько блоков для root что позволяет избежать админу нехватки места на диске в случае его заполнения другими пользователями. После добавления журналирующих функций в ext2 появилась новая журналирующая файловая система ext3fs. Основная функция этой ФС это обеспечить быстрое восстановление ФС в случае сбоев. Для этого применяются транзакции. Система ведет журнал в котором отображаются все действия с данными. В случае сбоя на основании журнала можно вернуть систему в безошибочное состояние.
19. Базовая файловая система s5fs.
Каждый жесткий диск состоит из одной или нескольких логических частей, называемых разделами (partitions). В UNIX разделы выступают в качестве независимых устройств, доступ к которым осуществляется как к различным носителям данных. Каждый раздел имеет свою файловую систему. Файловая система s5fs занимает раздел диска и состоит из трёх основных компонентов:
1. суперблок. Содержит общую информацию о файловой системе;
2. массив индексных дескрипторов (ilist).Содержит метаданные всех файлов файловой системы. Индексный дескриптор содержит статусную информацию о файле и указывает на расположение данных этого файла. Ядро обращается к inode по индексу в массиве ilist. Один inode является корневым (root) inode файловой системы, через него обеспечивается доступ к структуре каталогов и файлов. Размер массива ilist является фиксированным и задается при создании файловой системы. Таким образом, файловая система s5fs имеет ограничения по числу файлов, которые могут в ней храниться, независимо от размера этих файлов;
3. Блоки хранения данных – занимают большую часть дискового раздела, и их число определяет максимальный суммарный объем данной файловой системы. Размер блока кратен 512 битам.
Суперблок считывается в память при монтировании файловой системы и находится там до её отключения. Суперблок содержит следующую информацию: 1) Тип файловой системы (s_type); 2) Размер файловой системы в логических блоках, включая сам суперблок, ilist и блоки хранения данных (s_fsize); 3) Размер массива индексных дескрипторов (s_isize); 4) Число свободных блоков, доступных для размещения (s_tfree); 5) Число свободных inode, доступных для размещения (s_tinode); 6) Флаги (флаг модификации s_fmod, флаг режима монтирования s_fronly); 7) Размер логического блока (512, 1024, 2048); 8) Список номеров свободных inode; 9) Список адресов свободных блоков.
Индексные дескрипторы.Индексный дескриптор не содержит: 1) Имени файла, которое содержится в блоках хранения данных каталога; 2) Содержимого файла, которое размещено в блоках хранения данных.
При открытии файла ядро помещает копию дискового inode в память в таблицу, которая содержит несколько дополнительных полей. Основными полями дискового inode являются следующие:
· Di_mode – тип файла, дополнительные атрибуты выполнения и права доступа;
· Di_nlinks – число ссылок на файл, т.е. количество имён, которые имеет файл в файловой системе;
· Di_uid, di_gid – идентификаторы владельца-пользователя и владельца-группы;
· Di_size – размер файла в байтах;
· Di_atime – время последнего доступа к файлу;
· Di_mtime – время последней модификации;
· Di_ctime – время последней модификации inode кроме полей di_atime, di_mtime;
· Di_addr[13] – массив адресов дисковых блоков хранения данных.
Индексный дескриптор содержит информацию о расположении данных файла. Эта информация хранится в виде массива, каждый элемент которого содержит физический адрес дискового блока, а индексом массива является номер логического блока файла. Массив имеет фиксированный размер и состоит из 13 элементов. При этом первые 10 адресуют непосредственно блоки хранения данных файла. Одиннадцатый элемент адресует блок, в свою очередь содержащий адрес блоков хранения данных. Двенадцатый элемент указывает на дисковый блок, также хранящий адреса блоков, каждый из которых адресует блок хранения данных файла. Тринадцатый элемент используется для тройной косвенной адресации, когда для нахождения адреса блока хранения данных файла используется три дополнительных блока. Такой подход позволяет поддерживать работу с файлами с размером до десятка мегабайт. Для относительно небольших файлов (до 10 Кбайт при размере блока 1024 байт) используется прямая индексация, обеспечивающая максимальную производительность. Для файлов размер которых не превышает 266 Кбайт (10 Кбайт + 256*1024), достаточно простой косвенно адресации. При использовании тройной косвенной адресации можно обеспечить доступ к 16 777 216 блокам (256*256*256).