• файловая система ISO 9660 для компакт-дисков;
• файловая система HFS компьютеров Apple Macintosh;
• ряд сетевых файловых систем, включая широко используемую систему NFS компании Sun, систему SMB, разработанную компаниями IBM и Microsoft, систему NCP компании Novell, а также файловую систему Coda, созданную в университете Carnegie Mellon;
• некоторые журналируемые файловые системы, в число которых входят ext3, ext4, Reiserfs, JFS, XFS и Btrfs.
Типы файловых систем, которые в данный момент распознаны ядром, можно просмотреть в особом файле Linux /proc/filesystems.
В версии Linux 2.6.14 появилось средство Filesystem in Userspace (FUSE, «файловая система в пространстве пользователя»). Этот механизм добавляет в ядро перехватчики (hooks), которые позволяют полностью реализовать файловую систему с помощью программы из пространства пользователя, и при этом нет необходимости в исправлении или перекомпиляции ядра. Дополнительные подробности см. на сайте fuse.sourceforge.net.
Долгие годы наиболее используемой файловой системой в Linux была ext2 — вторая расширенная файловая система, наследница ext — исходной файловой системы Linux. С недавнего времени вместо ext2 все чаще используются различные файловые системы с журналированием. Иногда бывает удобно описывать понятия, относящиеся к типичной файловой системе, с помощью терминов для какой-либо конкретной реализации системы. С этой целью далее в главе мы используем в различных примерах систему ext2.
Файловая система ext2 была создана Реми Кардом (Remy Card). Ее исходный код небольшой (около 5000 строк на языке С) и представляет собой модель для различных реализаций других файловых систем. Главная веб-страница сайта, посвященного системе ext2, находится по адресу e2fsprogs.sourceforge.net/ext2.html. На этом сайте есть хорошая обзорная статья, описывающая реализацию файловой системы ext2. В онлайн-книге Дэвида Раслинга (David Rusling) The Linux Kernel («Ядро Linux»), доступной на сайте www.tldp.org, также описана файловая система ext2.
Основной единицей для выделения пространства в файловой системе является
Привилегированная (CAP_SYS_RAWIO) программа может использовать операцию FIBMAP ioctl(), чтобы определить физическое расположение указанного блока для какого-либо файла. Третий аргумент вызова является целым числом, которое определяется в ходе вызова. До осуществления вызова следует передать в этот аргумент номер логического блока (номер первого логического блока равен 0); после вызова ему присваивается номер начального физического блока, в котором хранится указанный логический блок.
На рис. 14.1 показана связь между разделами диска и файловыми системами, а также отмечены части (типичной) файловой системы.
Рис. 14.1.
Файловая система состоит из следующих частей.
•
• размер таблицы индексных дескрипторов;
• размер логических блоков в данной файловой системе;
• размер файловой системы в логических блоках.
Различные файловые системы, которые расположены на одном физическом устройстве, могут обладать разными типами и размерами, а также иметь различающиеся параметры (например, размер блока). Это одна из причин разбиения диска на несколько разделов.