Linux программирование в примерах
Шрифт:
По причинам, описанным на врезке, у корневого каталога файловой системы номер индекса всегда равен 2 (хотя это не стандартизовано формально). Поскольку может быть несколько файловых систем, у каждой из них один и тот же номер индекса корневого каталога 2. При разрешении пути ядро знает, где смонтирована каждая файловая система и заставляет имя точки монтирования ссылаться на корневой каталог смонтированной файловой системы. Более того, '
На рис. 8.1 показаны две файловые системы: одна для корневого каталога, а другая для
Рис. 8.1. Отдельные файловые системы до монтирования
Рис. 8.2. Отдельные файловые системы после монтирования
Каталог
Номер индекса для корневого каталога файловой системы всегда равен 2. Почему это так? Ответ имеет отношение как к технологии, так и к истории.
Как упоминалось в разделе 5.3 «Чтение каталогов», элемент каталога с номером индекса ноль означает неиспользуемый, или пустой слот. Поэтому индекс 0 не может использоваться для настоящего файла или каталога.
Хорошо, так что насчет индекса 1? Ну, особенно в 70-80 годах XX века, диски не были сделаны так же хорошо, как сейчас. Когда вы покупали диск, он приходил с (бумажным) списком испорченных блоков — известных мест на диске, которые не могли быть использованы. Каждой операционной системе приходилось отслеживать эти плохие блоки и избегать их использования.
Под Unix это осуществлялось созданием файла особого назначения, блоки данных которого были известны, как испорченные. Этот файл присоединялся к индексу 1, оставляя 2 в качестве первого индекса, доступного для использования обычными файлами или каталогами.
На современных дисках присутствует значительное количество встроенной электроники, и они сами управляют испорченными блоками. Поэтому технически было бы осуществимо использовать для файла индекс 1. Однако, поскольку такое большое количество программ Unix, которые предполагают, что индекс 2 является индексом для корневых каталогов файловых систем, Linux также следует этому соглашению. (Однако, Linux иногда использует индекс 1 для не собственных файловых систем, таких, как
8.1.2. Обзор различных типов файловых систем
ЗАМЕЧАНИЕ. Обсуждение в данном разделе специфично для Linux. Однако, у многих современных систем Unix также есть сходные особенности. Мы рекомендуем вам изучить документацию своей системы.
Исторически V7 Unix поддерживал лишь один тип файловой системы; вспомогательные данные и организация каталогов каждого из разделов были структурированы одним и тем же способом. 4.1 BSD использовал файловую систему с такой же как у V7 структурой, но с размером блока 1024 байта вместо 512 байтов. 4.2 BSD ввело «файловую систему BSD», которая разительно изменила расположение индексов и данных на диске и дала возможность использовать гораздо большие размеры блоков. (В общем, использование больших протяженных блоков данных обеспечивает лучшую производительность, особенно для чтения файлов.)
Вплоть до 4.3 BSD и System V Release 2 в начале и середине 1980-х системы Unix продолжали поддерживать один тип файловой системы. Для переключения компьютера от одной файловой системы на другую [77] приходилось сначала резервировать каждую файловую систему на среду архивирования (9-дорожечную ленту), обновлять систему, а затем восстанавливать данные.
В середине 1980-х Sun Microsystems разработала архитектуру ядра, которая сделала возможным использование нескольких архитектур файловой системы в одно и то же время. Этот проект был реализован в их операционной системе SunOS, сначала для поддержки сетевой файловой системы Sun (Network File System — NFS). Однако, как следствие, стало возможным также поддерживать несколько архитектур на диске. System V Release 3 использовала сходную архитектуру для поддержки удаленной файловой системы (Remote File System — RFS), но она продолжала поддерживать лишь одну архитектуру на диске. [78] (RFS никогда широко не использовалась и сейчас является лишь исторической сноской.)
77
Например, при обновлении VAX 11/780 с 4.1 BSD до 4.2 BSD — Примеч. автора.
78
System V Release 3 поддерживала два различных размера блоков: 512 байтов и 1024 байта, но в остальном организация диска была той же самой — Примеч. автора.
Общий дизайн Sun стал популярным и широко реализовывался в коммерческих системах Unix, включая System V Release 4. Системы Linux и BSD используют разновидность этого дизайна для поддержки множества форматов файловых систем на диске. В частности, обычным для всех разновидностей Unix на платформе Intel x86 является возможность монтирования файловых систем MS-DOS/Windows FAT, включая поддержку длинных имен, а также форматированные в соответствии с ISO 9660 CD-ROM.
Linux имеет несколько собственных (т.е. размещаемых на диске) файловых систем. Наиболее популярными являются файловые системы
Таблица 8.1. Поддерживаемые ядром файловые системы Linux (ядро 2.4.x)
Имя | Режим | Описание |
---|---|---|
afs | RW | Andrew File System (файловая система Andrew) |
adfs | RW | Acorn Advanced Disc Filing System (расширенная дисковая файловая система Acorn) |
affs | RO, RW | Amiga Fast File system (быстрая файловая система Amiga) Режим «только для чтения» в противоположность режиму «для записи и чтения» зависит от версии файловой системы |
autofs | RW | Файловая система для взаимодействия с демоном автоматического монтирования |
befs | RO | Файловая система BeOS. Помечена как программное обеспечение альфа. |
bfs | RW | SCO UnixWare Boot File system (загрузочная файловая система SCO Unix). |
binfmt-misc | RW | Специальная файловая система для запуска интерпретаторов компилированных файлов (например, файлов Java) |
efs | RW | Файловая система, разработанная для варианта Unix SGI, названного Irix |
coda | RW | Экспериментальная распределенная файловая система, разработанная в CMU [79] |
cramfs | RO | Небольшая файловая система для хранения файлов в постоянной памяти (ROM). |
devfs | RW | Способ динамического предоставления файлов для /dev (устарело). |
devpts | RW | Специальная файловая система для псевдотерминалов. |
ext2 | RW | Вторая расширенная файловая система. Файловая система по умолчанию для GNU/Linux, хотя некоторые дистрибутивы используют теперь ext3 . |
ext3 | RW | Файловая
система ext2 с журналированием |
hfs | RW | Hierarchical File System (иерархическая файловая система) Apple Mac OS. |
hpfs | RW | High Performance File System (высокопроизводительная файловая система) OS/2. |
intermezzo | RW | Экспериментальная распределенная файловая система для работы в отсоединенном от сети состоянии. См веб-сайт InterMezzo ( http://www.inter-mezzo.org ) |
jffs | RW | Journalled Flash File system (журналируемая файловая система с групповой записью/считыванием, для встроенных систем) |
jffs2 | RW | Journalled Flash File system 2 (тоже для встроенных систем) |
iso9660 | RO | Файловая система ISO 9660 для CD-ROM. Поддерживаются также расширения Rock Ridge, заставляющие выглядеть использующие их CD-ROM как нормальная файловая система (но только для чтения). |
jfs | RW | Journalled File System (журналируемая файловая система) IBM для Linux. |
ncp | RW | Протокол Novell NCP для NetWare; клиент удаленной файловой системы. |
ntfs | RO | Поддержка файловой системы NTFS Windows |
openpromfs | RO | Файловая система /proc для PROM на системах SPARC |
proc | RW | Доступ к информации о процессах и ядре |
qnx4 | RW | Файловая система QNX4 (небольшой операционной системы реального времени) |
ramfs | RW | Файловая система для создания RAM-дисков. |
reiserfs | RW | Развитая журналируемая файловая система |
romfs | RO | Файловая система для создания простых RAM-дисков только для чтения. |
smbfs | RW | Поддержка клиента для файловых систем SMB (разделяемых файлов Windows) |
sysv | RW | Файловые системы System V Release 2, Xenix, Minix и Coherent. coherent, minix и xenix являются псевдонимами |
tmpfs | RW | Файловая система электронного диска, поддерживающая динамический рост. |
udf | RO | Формат файловой системы UDF, используемый в DVD-ROM |
ufs | RO, RW | Быстрая файловая система BSD, на современных системах с доступом для чтения и записи. |
umsdos | RW | Расширение vfat , заставляющее выглядеть ее подобно файловой системе Unix |
usbfs | RW | Специальная файловая система для работы с устройствами USB. Первоначальным именем было usbdevfs , это имя до сих пор появляется, например, в выводе mount |
vfat | RW | Все варианты файловых систем FAT MS-DOS/Windows Компонентами являются msdos и fat |
vxfs | RW | Журналируемая файловая система Veritas VxFS. |
xfs | RW | Высокопроизводительная журналирующая файловая система, разработанная SGI для Linux. См веб-сайт XFS ( http://oss.sgi.com/projects/xfs/ ) |
79
Университет Карнеги-Меллона — Примеч. перев.
Не все из этих файловых систем поддерживаются командой
Журналирование является методикой, впервые использованной в системах баз данных для увеличения производительности обновлений файлов таким образом, что восстановление файловой системы в случае аварии могло быть сделано быстро и правильно. В момент написания этого были доступны несколько различных журналируемых файловых систем, конкурирующих за продвижение в мире GNU/Linux. Одной из них является
Файловые системы
Файловые системы Coherent, MINIX, первоначальной System V и Xenix все имеют сходные структуры на диске. Тип файловой системы
Быстрая файловая система BSD в течение нескольких лет успешно развилась. Файловая система
Обозначения «RO» для
Две файловые системы, которых больше не существует, это
80
Источник: