1.5. Файловые системы операционной системы Linux
В Linux долгое время была одна файловая система Ext2fs – вторая расширенная файловая система. Система определяется как расширенная по сравнению с файловой системой операционной системы Minix, послужившей прототипом Linux (до сих пор используемой на отформатированных в этой операционной системе дискетах). Вторая – означает, что ранние версии Linux базировались на Extfs с более ограниченными возможностями.
По способу организации хранения данных Extfs напоминает файловую систему Unix. Отличительные особенности:
- дробление дискового раздела на группы блоков;
- наличие нескольких копий суперблока, что повышает надежность хранения данных;
- наличие эффективного механизма кэширования дисковых операций, что обеспечивает их быстродействие;
- относительно слабая устойчивость при аварийном завершении работы (вследствие мертвого зависания или отказа питания).
Проблема нарушения целостности файловой системы при некорректном завершении работы характерна и для всех операционных систем семейства Unix. Потому для реализации механизма восстановления стали разрабатывать журналируемые файловые системы. Журнал представляет собой log-файл дисковых операций, в котором фиксируются не выполненные, а только предстоящие манипуляции с файлами. Журналирование направленно на обеспечение целостности файловой системы, но не гарантирует сохранности пользовательских данных.
В большинстве журналируемых файловых систем фиксируются будущие операции только над метаданными изменяемых файлов, что достаточно для сохранения целостности файловой системы и предотвращения долговременных проверок, но не предотвращает потери данных в аварийных ситуациях. В некоторых файловых системах журналирование распространяется и на область данных файла, однако повышение надежности снижает быстродействие системы.
Текущие версии ядра Linux поддерживают в качестве альтернативных четыре журналируемые файловые системы: ReiserFS, Ext3fs и XFS, JFS (результаты импортирования в Linux файловых систем, разработанных первоначально для рабочих станций под операционные системы Irix (SGI) и AIX (IBM), соответственно).
Журналируемая файловая система ReiserFS разработана специально для Linux фирмой Namesys (http://www.namesys.com) и поддерживается ее ядром (http://www.kernel.org), начиная с первых версий ветви 2.4.x. В ReiserFS осуществляется журналирование только операций над метаданными файлов, что при определенном снижении надежности, обеспечивает высокую производительность. Кроме этого, ReiserFS обладает уникальной (и по умолчанию задействованной) возможностью оптимизации дискового пространства, занимаемого мелкими, менее одного блока, файлами. Они хранятся в своих inode, без выделения блоков в области данных. Весте с экономией места это способствует росту производительности, так как данные и метаданные (в терминах ReiserFS – stat -data) файла хранятся в непосредственной близости и могут быть считаны одной операцией ввода/вывода.
Хвосты файлов (их конечные части), меньшие по размеру, чем один блок, могут быть подвергнуты упаковке. Этот режим (tailing) включается по умолчанию при создании ReiserFS, обеспечивая около 5% экономии дискового пространства, но несколько снижает быстродействие. ReiserFS не совместима с Ext2fs на уровне утилит обслуживания файловой системы, но соответствующий инструментарий, разрешающий проблему, объединен в пакет reiserfsprogs и включен в штатный комплект современных дистрибутивов. Распространенные загрузчики Linux иногда не способны загрузить ядро Linux с раздела ReiserFS, поэтому ReiserFS не рекомендуется к употреблению на загрузочном разделе.
Ext3fs – представляет собой журналируемую надстройку над классической Ext2fs, разработанной в компании Red Hat и поддерживаемой ядром Linux, начиная с версии 2.4.16. Она сохраняет со своей прародительницей полную совместимость, в том числе и на уровне утилит обслуживания (начиная с версии 1.21, пакета e2fsprogs). Переход от Ext2fs к Ext3fs осуществляется добавлением файла журнала без переформатирования раздела и рестарта машины. Ext3fs является системой, в которой возможно журналирование операций не только с метаданными, но и с данными файлов, так как предусмотрено три режима работы: полное журналирование (full data journaling); журналирование с обратной записью (writeback); последовательное журналирование, задействуемое по умолчанию (ordered).
Режим полного журналирования распространяется на метаданные и на данные файлов. Все их изменения сначала пишутся в файл журнала и только после этого фиксируются на диске. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние. Данный механизм гарантирует от потерь данных, однако является медленным.
В режиме отложенной записи в файл журнала записываются только изменения метаданных файлов и нет гарантии сохранности данных, однако обеспечивается наибольшее быстродействие. В последовательном режиме также физически журналируются только метаданные файлов, но связанные с ними блоки данных логически группируются в единый модуль (транзакцию, transaction) и записываются перед записью на диск новых метаданных, что способствует сохранности данных. Данные режим при меньших накладных расходах по сравнению с полным журналированием, обеспечивает промежуточный уровень быстродействия.
Файловая 64-разрядная система XFS развивается фирмой SGI для Unix, впервые появилась в версии Irix 5.3, вышедшей в 1994 г. В Linux она была импортирована недавно (http://oss.sgi.com/projects/xfs) и штатно поддерживается ядром, начиная с его ветки 2.6.X. XFS представляет собой сбалансированную файловую систему, ориентированную на размещение в больших дисковых разделах для работы с большими файлами. Особенности XFS:
- использование механизма деления единого дискового раздела на несколько равных областей (allocation group), имеющих собственные списки inodes и свободные блоки, для распараллеливания дисковых операций (самостоятельные файловые субсистемы);
- использование логического журналирования только для изменений метаданных, но с частым сбросом их на диск для минимизации возможных потерь при сбоях;
- применение механизма ассигнования дискового пространства при записи файлов не во время журналирования, а при фактическом сбросе их на диск (delayed allocation), что вместе с повышением производительности предотвращает фрагментацию дискового раздела;
- использование списков контроля доступа (ACL, Access Control List) и расширенных атрибутов файлов (extended attributes).
Возможность работы с XFS обеспечивает специальный патч (xfs-2.4.1X-all-i386.bz2), который вместе с соответствующими утилитами поддержки можно получить с сайта SGI (http://oss.sgi.com/projects/xfs). Утилиты поддержки для XFS объединены в несколько пакетов.
Файловая система JFS разработана компанией IBM для собственной версии Unix и уже долгое время поддерживается ядром Linux в качестве альтернативной системы, однако по ряду причин широкого распространения она не получила.
На уровне обмена данными Linux поддерживает множество файловых систем, некоторые из них только в режиме чтения (например, NTFS или HPFS).
Все упомянутые выше файловые системы могут располагаться не только на реальных блочных устройствах (дисках и дисковых разделах), но и на виртуальных дисках (RAM-дисках).
Доклад: Файловая система ОС LINUX
Файловая система в LINUX организована в виде единого дерева директорий. Никаких букв дисков (a:, c:) здесь нет, а если используется несколько физических дисков (например, первый жесткий диск, второй, CD-ROM и т.д.), то они представляются отдельными ветвями на общем дереве.
Директории разделяются косой чертой / (а не обратной, как в Dos), например, /home/inpunix/ivanov/ – поддиректория ivanov в директории inpunix директории home. Самая верхняя директория («корневая») называется /.
§ Имя файла (и директории) может содержать практически любые символы, включая пробелы (и даже управляющие символы, типа перевода строки, если удастся их ввести). Примеры:
Сводный отчет по трудозатратам
§ Символ. не является особенным, и в имени может быть любое их количество, а может и не быть вовсе. Так, к примеру,
являются вполне нормальными именами.
§ Заглавные и маленькие буквы различаются. Например:
§ В отличие от Dos/Windows, нет зарезервированных имен, таких как con, com1 и т.д. Вместо них есть сответствующие файлы устройств в директории /dev:
Файл в Dos | Устройство в Unix | Назначение |
con | /dev/tty | Консоль |
nul | /dev/null | Пустота |
com1 | /dev/ttyS0 | Первый последовательный порт |
lpt1 | /dev/lp0 | Первый параллельный порт |
§ У программ не требуется какое-либо специальное расширение, типа .exe – достаточно установить атрибут x.
§ Длина имени может быть до 255 символов; полный путь (включая директории) – 1024 символа.
Хотя единственный символ, которого не может быть в имени, — это /(поскольку это разделитель директорий), лучше не делать имен с пробелами и не злоупотреблять различием в регистре букв – это внесет лишнюю путаницу. Также лучше не называть файлы русскими именами.
Файлы, имена которых начинаются c точки (включая . и ..), считаются «неинтересными» и в листинге директории обычно не показываются.