|
Анатомия файловой системы Linux
Статьи
→
Обзоры, аналитика, практические пособия по разработке ПО
Если говорить о файловых системах, Linux по сравнению с другими операционными системами напоминает швейцарский армейский нож. Linux поддерживает множество файловых систем, от журналируемых до кластерных и систем с шифрованием. Linux это замечательная платформа для использования стандартных и экзотических файловых систем, а также для разработки файловых систем. В этой статье рассматривается виртуальная файловая система (VFS) ядра Linux, которая иногда называется виртуальным коммутатором файловой системы, а также приводится обзор некоторых основных структур, связывающих файловые системы.
Базовая архитектура файловой системы
Архитектура файловой системы Linux являет собой интересный образец абстрагирования сложностей. Единый набор функций API позволяет поддерживать множество файловых систем на множестве устройств хранения. Возьмем, например, вызов функции read, которая позволяет считывать определенное количество байт из заданного дескриптора файла. Функция read ничего не знает о типах файловых систем, будь то ext3 или NFS. Она также не знает о носителе, на котором смонтирована файловая система, будь то диск, подключенный по интерфейсу ATA, последовательному интерфейсу SCSI (SAS) или последовательному интерфейсу ATA (SATA). И, несмотря на это, при вызове функции read для открытого файла мы получаем, как нам и хотелось, данные. В этой статье будет описано, как это достигается, а также будут рассмотрены основные структуры уровня файловой системы Linux.
Что такое файловая система?
Я начну с наиболее общего вопроса определения файловой системы. Файловой системой называется некоторая организация данных и метаданных на устройстве хранения. Вы понимаете, что при таком нечетком определении код, его реализующий, будет очень интересным. Как я уже упоминал, существует множество типов носителей и файловых систем. Стоит ожидать, что при таком многообразии интерфейс файловой системы Linux будет реализован с использованием многоуровневой архитектуры, отделяющей уровень интерфейса пользователя от реализации файловой системы и от драйверов, управляющих устройствами хранения.
| |
Файловые системы как протоколы
Альтернативный способ состоит в том, чтобы рассматривать файловую систему как протокол. Так же, как сетевые протоколы (например, IP) придают смысл потокам данных, передаваемым через Интернет, файловая система придает значение данным на определенном носителе. |
|
Монтирование
Процесс связывания файловой системы с устройством в Linux называется монтированием (mounting) . Для подключения файловой системы к существующей иерархии файловых систем (корню) используется команда mount. При монтировании указывается файловая система, ее тип и точка монтирования.
Чтобы продемонстрировать возможности уровня файловой системы Linux (и монтирования), создадим файловую систему в файле, расположенном в существующей файловой системе. Это можно сделать путем создания файла заданного размера с помощью dd (копирование файла из источника /dev/zero)другими словами, инициализируя файл нулями, как показано в листинге 1.
Листинг 1. Создание инициализированного файла
$ dd if=/dev/zero of=file.img bs=1k count=1000010000+0 records in10000+0 records out$
|
Теперь у нас есть файл file.img размером 10 МБ. Свяжем с файлом блочное устройство-заглушку (loop) с помощью команды losetup (чтобы он выглядел как блочное устройство, а не как обычный файл файловой системы):
$ losetup /dev/loop0 file.img$
|
Теперь, имея файл, который выглядит как блочное устройство (представлен /dev/loop0), создадим на этом устройстве файловую систему с помощью mke2fs. Эта команда создает новую файловую систему ext2 определенного нами размера, как видно из Листинга 2.
Листинг 2. Создание файловой системы ext2 на устройстве loop
$ mke2fs -c /dev/loop0 10000mke2fs 1.35 (28-Feb-2004)max_blocks 1024000, rsv_groups = 1250, rsv_gdb = 39Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)2512 inodes, 10000 blocks500 blocks (5.00%) reserved for the super user…$
|
Теперь файл file.img, представленный блочным устройством (/dev/loop0), смонтирован в точке /mnt/point1 с помощью команды mount. Обратите внимание, что указанный тип файловой системы ext2. После монтирования вы можете обращаться к точке монтирования как к новой файловой системе с помощью команды ls, как видно из Листинга 3.
Листинг 3. Создание точки монтирования и монтирование файловой системы посредством устройства loop
$ mkdir /mnt/point1$ mount -t ext2 /dev/loop0 /mnt/point1$ ls /mnt/point1lost+found$
|
Как показано в листинге 4, этот процесс можно продолжить, создавая новый файл в новой файловой системе, связывая его с устройством loop и создавая в нем еще одну файловую систему.
Листинг 4. Создание новой файловой системы loop в уже существующей
$ dd if=/dev/zero of=/mnt/point1/file.img bs=1k count=10001000+0 records in1000+0 records out$ losetup /dev/loop1 /mnt/point1/file.img$ mke2fs -c /dev/loop1 1000mke2fs 1.35 (28-Feb-2004)max_blocks 1024000, rsv_groups = 125, rsv_gdb = 3Filesystem label=…$ mkdir /mnt/point2$ mount -t ext2 /dev/loop1 /mnt/point2$ ls /mnt/point2lost+found$ ls /mnt/point1file.img lost+found$
|
Из этого простого примера легко понять, насколько большие возможности предоставляет файловая система (и устройство loop) в Linux. Аналогичным образом с помощью устройства loop можно создавать в файле файловые системы с шифрованием. Это может быть полезно для защиты ваших данных; при необходимости такой файл можно быстро смонтировать с помощью устройства loop.
Архитектура файловой системы
Теперь, когда вы увидели создание файловой системы в действии, давайте вернемся к архитектуре уровня файловой системы Linux. В этой статье файловая система Linux рассматривается с двух точек зрения. Первая точка зрения это высокоуровневая архитектура. Вторая точка зрения рассматривает уровень файловой системы глубже и шире, со стороны основных структур, составляющих его.
Архитектура высокого уровня
Хотя большая часть кода файловой системы реализована в ядре (за исключением файловых систем пространства пользователя, о которых я расскажу ниже), архитектура, показанная на рисунке 1, характеризует отношения между основными компонентами файловой системы, как в пространстве пользователя, так и в ядре.
Рисунок 1. Архитектурное представление компонентов файловой системы Linux
В пространстве пользователя размещаются приложения (в этом примере пользователь файловой системы) и библиотека GNU C (glibc), которые предоставляют интерфейс для вызова файловой системы (открытие, чтение, запись, закрытие). Интерфейс системных вызовов действует как коммутатор, направляющий системные вызовы из пространства пользователя в соответствующую точку пространства ядра.
VFS является основным интерфейсом к файловым системам нижнего уровня. Этот компонент экспортирует набор интерфейсов и после этого абстрагирует их в отдельные файловые системы, образ поведения которых может быть весьма различным. Для объектов файловой системы (узлов inodes и записей dentries) существуют два кэша, о которых я скоро расскажу. Каждый из них предоставляет пул недавно использованных объектов файловой системы.
Реализация каждой файловой системы, например, ext2, JFS и так далее, экспортирует общий массив интерфейсов, который используется (и ожидается) VFS. Буферный кэш буферизирует запросы между файловыми системами и блочными устройствами, которыми они могут управлять. Например, через буферный кэш проходят запросы на чтение и запись к драйверам устройств. Это позволяет кэшировать запросы для более быстрого доступа (вместо обращения к физическому устройству). Буферный кэш управляется набором списков последних использованных элементов (least recently used, LRU). Обратите внимание, что командой sync можно сбросить буферный кэш на носитель (принудительно отправить все незаписанные данные на драйверы устройств и, в дальнейшем, на устройства хранения).
| |
Что такое блочное устройство?
Блочным называется устройство, данные на которое и с которого передаются блоками (например, секторами диска), и которое поддерживает такие атрибуты, как буферизация и прямой доступ (устройство не требует последовательного доступа к блокам при чтении любой блок может быть доступен в любое время). К блочным устройствам относятся жесткие диски, CD-ROM и диски в оперативной памяти. Они являются противоположностью символьным устройствам, отличие которых состоит в том, что у них нет носителя с физической адресацией. К символьным устройствам относятся последовательные порты и ленточные устройства, в которых данные передаются посимвольно. |
|
Это был общий взгляд на компоненты файловой системы и VFS. Давайте теперь рассмотрим основные структуры, составляющие эту подсистему.
Основные структуры
В Linux все файловые системы рассматриваются с точки зрения общего набора объектов. К этим объектам относятся системные блоки, узлы inode, записи dentry и файлы. Корнем каждой файловой системы является системный блок, который описывает и поддерживает состояние файловой системы. Каждый объект, с которым работает файловая система (файл или директория) представлен в Linux узлом inode. Узел inode хранит в себе все метаданные для управления объектами файловой системы (в том числе и возможных операциях с ним). Другое множество структур, которое называют записями dentry, используется для осуществления преобразования между названиями и узлами inode, для чего существует кэш директорий, в котором хранятся последние использованные записи. В записях dentry также хранятся отношения между папками и файлами для обхода файловых систем. И, наконец, файл VFS представляет собой открытый файл (содержит состояние открытого файла, в том числе смещение для записи и т.п.).
Уровень виртуальной файловой системы
VFS действует как корневой уровень интерфейса файловой системы. VFS следит за всеми поддерживаемыми и всеми смонтированными на данный момент файловыми системами.
Файловые системы в Linux можно динамически добавлять и удалять с помощью нескольких функций регистрации. В ядре хранится список поддерживаемых файловых систем, который можно просмотреть из пространства пользователя посредством файловой системы /proc. В этом виртуальном файле также показаны устройства, связанные на текущий момент с файловыми системами. Для того, чтобы добавить новую файловую систему в Linux, вызывается register_filesystem. Эта команда имеет один аргумент ссылку на структуру файловой системы (file_system_type), которая определяет название файловой системы, набор атрибутов и две функции системных блоков. Файловая система также может быть незарегистрированной.
Регистрация новой файловой системы заключается в добавлении этой системы и относящейся к ней информации в список file_systems (см. рисунок 2 и linux/include/linux/mount.h). Этот список определяет поддерживаемые файловые системы. Просмотреть его можно, введя в командной строке cat /proc/filesystems.
Рисунок 2. Файловая система, зарегистрированная в ядре
Другой структурой, поддерживаемой VFS, являются смонтированные файловые системы (см. рисунок 3). Она предоставляет список смонтированных на данный момент файловых систем (см. linux/include/linux/fs.h). Она ссылается на структуру системного блока superblock, о котором я расскажу ниже.
Рисунок 3. Список смонтированных файловых систем
Системный блок
Системным блоком (superblock) называется структура, представляющая файловую систему. В нее входит информация, необходимая для управления файловой системой во время работы. К такой информации относится название файловой системы (например, ext2), размер файловой системы и ее состояние, ссылку на блочное устройство и информацию метаданных (например, списки свободных блоков и т.п.). Как правило, системный блок хранится на носителе, но если его нет, он может быть создан в реальном времени. Структуру системного блока (см. рисунок 4) можно найти в. /linux/include/linux/fs.h.
Рисунок 4. Структура системного блока и работа узлов inode
Одним из важнейших элементов системного блока является определение его операций. Эта структура определяет набор функций для управления узлами inodes файловой системы. Например, inodes могут выделяться с помощью alloc_inode и удаляться с помощью destroy_inode. Вы можете считывать и записывать inodes с помощью команд read_inode и write_inode и синхронизировать файловую систему с помощью команды sync_fs. Структура super_operations расположена в. /linux/include/linux/fs.h. В каждой файловой системе имеются собственные методы inode, которые реализуют работу и выполняют общую абстракцию на уровень VFS.
Узлы inode и dentry
Узел inode представляет объект файловой системы с уникальным идентификатором. Каждая файловая система предоставляет методы преобразования имен файлов в уникальные идентификаторы inode и затем в ссылки на inode. На рисунке 5 показана часть структуры inode вместе с несколькими связанными структурами. Обратите внимание, в частности, на inode_operations и file_operations. Каждая из этих структур ссылается на отдельные операции, которые могут выполняться с inode. Например, inode_operations определяет операции, которые работают напрямую с inode, а file_operations относится к методам, которые работают с файлами и директориями (стандартные системные вызовы).
Рисунок 5. Структура inode и связанные с ней операции
Последние использованные узлы inodes и записи dentries хранятся в кэше inode и кэше директорий соответственно. Обратите внимание, что каждому inode в кэше inode соответствует запись dentry в кэше директорий. Структуры inode и dentry определены в. /linux/include/linux/fs.h.
Буферный кэш
За исключением отдельных реализаций файловых систем (которые можно найти в. /linux/fs), в нижней части уровня файловой системы располагается буферный кэш. Здесь хранятся запросы на чтение и запись от отдельных файловых систем и физических устройств (посредством драйверов устройств). Из соображений производительности в Linux предусмотрен кэш запросов, позволяющий не обращаться по каждому запросу к физическому устройству. Вместо этого в нем кэшируются последние использованные буферы (страницы), которые могут быть быстро предоставлены отдельным файловым системам.
Интересные файловые системы
В этой статье не рассказывается о конкретных отдельных файловых системах, доступных в Linux, но здесь будет полезно их упомянуть, хотя бы мимоходом. Linux поддерживает множество файловых систем, начиная от самых старых MINIX, MS-DOS и ext2. Linux также поддерживает новые файловые системы с журналированием, к которым относятся ext3, JFS и ReiserFS. Кроме того, в Linux поддерживаются файловые системы с шифрованием, такие как CFS, и виртуальные файловые системы, такие как /proc.
И, наконец, отдельно стоит отметить файловую систему Filesystem in Userspace или FUSE. Это интересный проект, который позволяет вам направлять запросы к файловой системе через VFS обратно в пространство пользователя. Поэтому, если вы задумывались о создании собственной файловой системы, то это отличный шанс для того, чтобы начать.
Заключение
Несмотря на то, что реализация файловой системы отнюдь не тривиальна, она является отличным примером расширяемой и масштабируемой архитектуры. Архитектура файловой системы развивалась годами, при этом поддерживая множество типов файловых систем и множество типов устройств хранения. Будет интересно посмотреть на развитие в ближайшем будущем файловой системы Linux, использующей архитектуру дополнений с несколькими уровнями преобразования функций.
27.01.2008
Комментарии
Добавить комментарий (анонимные комментарии не публикуются!!!)
Новости и пресс-релизы СМ-Консалт
21.02.2012 12:42:20 Новая статья: IT и психология. Человеческий фактор в парном программировании: почему многие не получают желаемого от его внедрения?
Статья, находящаяся перед вами, открывает цикл статей о человеческом
факторе, Agile-практиках и других полезных приемах, используемых при
управлении командами в ИТ. Объединяет рассматриваемые практики и приемы
одно – они позволяют проявиться положительным эффектам, связанным с
человеческим фактором. И мы объясняем, почему с точки зрения психологии,
это происходит. Так сказать, подводим теоретическую и экспериментальную
базу под то, что себя уже давно зарекомендовало и работает. Или под то,
что работает не у всех, и потому является предметом оживленных споров и
дискуссий. И начинаем мы наши исследования с рассмотрения эффекта
парного программирования через призму экспериментов социальной
психологии.
Отдельную благодарность за рецензию и время, потраченное на прочтение
первого варианта статьи, выражаем Асхату Уразбаеву,
ценные замечания которого позволили не только улучшить данную статью,
но и позволили убедиться в необходимости и востребованности именно цикла
статей!
Читать -->
27.12.2011 16:15:27 Компания "СМ-Консалт" получила отзыв о работах в Федеральной Налоговой Службе (ГНИВЦ ФНС)
Специалистами ООО «СМ-Консалт» в 2010-2011г. был выполнен проект
по настройке и внедрению системы управления жизненным циклом разработки
программных систем в части управления изменениями и конфигурациями на
основе Microsoft Visual Studio Team Foundation Server 2010 для
Филиала Федерального государственного унитарного предприятия «Главный
научно-исследовательский вычислительный центр Федеральной налоговой
службы» в Приволжском Федеральном округе (Филиал ФГУП ГНИВЦ ФНС России в
ПФО).
28.11.2011 15:05:11 Новая статья: "Всегда ли «Да» – это «Да»? Или как нас вынуждают принимать решения"
Мы предлагаем вашему вниманию цикл статей, в основу которых положены
психологические практики и приемы, позволяющие влиять на решения,
принимаемые людьми. Эта идея была логическим продолжением ряда
выступлений с докладами о коммуникациях в проектах разработки и
внедрения ПО. Давайте, не откладывая в долгий ящик, начнем с самого
простого приема убеждения, с которым сталкиваемся ежедневно в магазинах,
в транспорте, в разговорах с коллегами… да мало ли где еще!
Авторы: Новичков Александр и Карабанова Галина.
Читать -->
10.10.2011 11:16:06 Компания «СМ-Консалт» открывает новое направление продаж - ПО Adobe Connect
Программное обеспечение Adobe Connect является гибкой системой
web-коммуникации с высоким уровнем информационной безопасности. Adobe
Connect предоставляет такие важнейшие функции корпоративного
взаимодействия, как деловое общение и совместная работа сотрудников на
уровне предприятий, дистанционное обучение, организация широкомасштабных
сетевых семинаров и презентаций. Система Adobe Connect базируется на
технологии Adobe Flash, а также Air, и поэтому позволяет подключать
сотрудников к единому пространству взаимодействия через web-браузер с
любых устройств.
17.09.2011 21:40:22 Новая статья: "Разработка прикладного программного обеспечения с использованием Rational Unified Process на Иркутском Авиационном заводе"

На сайте СМ-Консалт открыт новый раздел Статьи наших заказчиков об успешных внедрениях IBM Rational и Microsoft. Статьи для данного раздела пишутся нашими заказчиками и рассказывают о сути проектов внедрения технологий IBM и Microsoft. Первая статья, представленная вашему вниманию написана сотрудниками Иркутского Авиационного Завода (ИАЗ).
Иркутский авиазавод имеет длительный опыт разработки программного
обеспечения для информационной поддержки ключевых бизнес-процессов
предприятия. Однако, в связи с увеличивающейся сложностью и повышением
требований к разрабатываемому программному обеспечению, возникла
настоятельная необходимость усовершенствовать процесс разработки:
повысить качество разрабатываемых программных продуктов,
стандартизировать процесс с увеличением его эффективности.
С целью повышения качества программного обеспечения собственной
разработки и сокращения сроков разработки руководство Управления
информационных технологий (УИТ) Иркутского Авиационного Завода в 2006г. приняло решение о внедрении технологии разработки ПО на базе методологии Rational Unified Process и с использованием инструментов автоматизации IBM Rational.
13.09.2011 12:07:29 Новый тренинг «Коммуникации и психология межличностных отношений в ИТ-проектах»

Компания «СМ-Консалт» представляет новый тренинг, организуемый совместно с компанией «КарьерKаб» - «Коммуникации
и психология межличностных отношений в ИТ-проектах.
Тренинг позволит понять, насколько коммуникации в проектах важнее инструментов, что люди и их взаимоотношения зачастую оказываются решающим фактором, определяющим успех проекта. Если более пятидесяти процентов рабочего времени вы тратите на взаимодействие с заказчиком, если вам небезразлична судьба вашей команды и вы хотите, чтобы ваша команда работала как часы, реализуя проекты точно, вовремя и без перерасхода ресурсов - наш тренинг поможет в этом.
01.08.2011 17:44:25 Наша компания получила отзыв о сотрудничестве с ОАО «Нордеа Банк»

В 2010-2011 гг. наши специалисты провели в Нордеа Банке проект по предварительному обследованию, развертыванию инструментальных средств и ряд тренингов по обучению методологии и работе с продуктами IBM Rational: «Методология разработки программных систем IBM Rational Unified Process», «Управление требованиями с использованием IBM Rational RequisitePro», «Управление изменениями в IBM Rational ClearQuest».
24.06.2011 01:27:57 Бесплатный семинар-вебинар «Повышение эффективности IT подразделений и качества разрабатываемого ПО с использованием современных методологий и технологий»
Компании СМ-Консалт , Legal SoftWaveTM и DNA приглашают Вас посетить бесплатный семинар-вебинар, посвященный обзору технологий и методологий, которые позволяют повысить эффективность ИТ подразделений. На семинаре рассматриваются технологии IBM Rational, Microsoft TFS, а также системы аналитической обработки информации (Business Intelligence) (IBM SPSS, Deductor, QlikView и другие).
Планируемая продолжительность семинара - 8 академических часов.
Место проведения: Санкт-Петербург (очно) и Интернет (для всех желающих: приходите сами и приглашайте друзей!).
Дата и время: 14 июля 2011 в 9 00.
ВНИМАНИЕ: если вы не сможете очно приехать на семинар - это не страшно, так как семинар будет транслироваться через интернет в формате вебинара и к нему, после регистрации, смогут присоединиться все желающие. Трансляция будет осуществляться посредством технологии Adobe Connect Pro , это позволит Вам присоединяться к конференции без установки дополнительного ПО - только интернет браузер.
Смотреть программу -->
07.06.2011 13:02:44 Компания "СМ-Консалт" провела серию успешных семинаров для ГНИВЦ ФНС России

Проведенные семинары были посвящены средствам разработки и тестирования программного обеспечения компании Майкрософт для сотрудников ГНИВЦ ФНС России. Слушатели семинаров отметили высокую квалификацию тренеров компании "СМ-Консалт" по организации учебного процесса и повышению квалификации специалистов, прошедших обучение.
Индивидуальный подход при решении любых вопросов, возникающих в процессе обучения, оперативность принятия решений, гарантированное выполнение взятых на себя обязательств и профессионализм позволили провести обучение на самом высоком уровне.
07.12.2010 12:28:15 Мы идем в Твиттер!

Наша компания открыла аккаунт в системе микроблоггинга Twiter.Теперь все официальные и неофициальные новости будут появляться в нашей ленте в Twitter.
Там же возможно будет задать прямые вопросы специалистам СМ-Консалт, по всем вопросам, связанным как с деятельностью компании, так и с техническими аспектов продуктов IBM и собственных решений СМ-Консалт.
Следуйте за нами!
https://twitter.com/cmconscom
11.11.2010 14:14:14 Осенний марафон Microsoft ALM Road Show
Компания СМ-Консалт совместно с образовательным центром Careerlab провели серию семинаров в рамках мероприятий ALM Roadshow 2.0 в крупнейших городах, расположенных на Волге, – крупных научных центрах, в которых ИТ технологии находятся на высоком уровне. Семинары прошли в Самаре, Нижнем Новгороде и Казани. Cеминары были посвящены использованию новых инструментов MS Visual Studio Team System в проектах разработки ПО.
В семинарах принимали участие представители различных ролей процесса разработки ПО: от разработчиков до руководителей предприятий различного уровня. Темы, обсуждаемые в ходе семинара, вызвали большой интерес аудитории и немалое количество вопросов, на которые были предоставлены исчерпывающие ответы. В процессе семинара также было показано большое количество примеров, которые дают представление о возможностях инструментов MS Team System. Средняя оценка за семинар составила 4,6 балла по пятибальной шкале
08.09.2010 18:37:52 Скидки до 30% на программное обеспечение IBM Rational

Компания СМ-Консалт предлагает для всех желающих на льготных условиях приобрести программное обеспечение IBM Rational. Снижение цен связано с тем, что мы стараемся быть как можно ближе к нашим клиентам, многие из которых постепенно начали преодолевать последствия финансового кризиса.Наше предложение поможет с минимальными издержками приобрести ПО IBM Rational, что является хорошим капиталовложением.
Скидки до 1 декабря 2010 года:
- 20% скидки при покупке IBM Rational ClearCase, ClearQuest, CearCase LT, при приобретении пяти и более лицензий*;
- 30% скидки при покупке пяти любых продуктов IBM Rational + решение или тренинг СМ-Консалт*.
Для получения деталей обязательно свяжитесь с нашими менеджерами
|