121
Такая ситуация требует отдельного изучения опций для каждой ФС. Кроме того, /etc/fstab имеет свои специфические опции.
Набор наиболее распространенных опций:
async |
Весь ввод/вывод осуществляется асинхронно |
sync |
Весь ввод/вывод осуществляется синхронно |
atime |
Обновлять времена обращения (по умолчанию) |
noatime |
Времена обращения не обновляются |
auto |
Система может быть смонтирована с опцией -а (для всех) |
noauto |
Система не может быть смонтирована с опцией -а (для всех) |
defaults |
Аналог rw,suid,dev,exec,auto,nouser,asunc |
dev |
Файлы устройств ФС интерпретируются как устройства |
nodev |
Файлы устройств запрещены |
exec |
Право на запуск исполняемых файлов |
noexec |
Запрет на запуск исполняемых файлов |
suid |
Биты SUID и SGID действуют |
nosuid |
Биты SUID и SGID не действуют |
user |
Обычный пользователь может смонтировать систему. |
|
Подразумевает опции: noexec,nosuid,nodev |
nouser |
Только root может монтировать систему |
remount |
Перемонтировать уже смонтированную систему (например, для |
|
изменения опций системы) |
ro |
Смонтировать ФС только для чтения |
rw |
Смонтировать ФС для чтения и записи |
Наряду с рассмотренными выше ФС на разделах дисков и в ядре ОС, используется множество специальных ФС. Мы рассмотрим четыре из них: loopback, squashfs, overlayfs и fuse.
Термин loopback означает - «обратная петля». Применительно к нашей тематике он будет означать:
•циклическое устройство, когда мы будем говорить о блочном устройстве;
•циклическая ФС, когда мы будем говорить о файловой системе, которая соз-
дана в отдельном файле.
Узлы циклических устройств находятся в директории /dev. Следующий пример показывает вариант создания десяти циклических устройств: /dev/loop1, …,
122
/dev/loop9. |
|
for x in 0 1 2 3 4 5 6 7 8 9; do |
|
[ -e /dev/loop$x ] || mknod /dev/loop$x b 5 |
$x |
done |
|
Циклические ФС обычно создаются в файлах, которые могут быть сжатыми и зашифрованными. Для примера рассмотрим создание ФС типа ext2fs в файле /tmp/ramdisk и последующее монтирование созданной ФС в директорию /mnt/initrd:
# Используемые константы
BLKSIZE=1024 # |
Размер блока в байтах |
|
RDSIZE=4000 |
# |
Количество блоков в ФС |
RBLOCK=0 |
# |
Число резервных блоков |
#Создаем файл, забитый нулями
#(dd — преобразование и копирование файлов)
dd if=/dev/zero of=/tmp/ramdisk bs=$BLKSIZE count=$RDSIZE
# Создаем ФС в файле ext2fs
/sbin/mke2fs -F -m $RBLOCK -b $BLKSIZE /tmp/ramdisk $RDSIZE
# Монтируем ФС в файле к директории через устройство /dev/loop0 mount /tmp/ramdisk /mnt/initrd -t ext2 -o loop=/dev/loop0
Широкое распространение получила технология хранения файловых систем в
сильно сжатых файлах для live-дистрибутивов. Такой подход позволяет практически на прямую использовать технологии созданные для работы с ФС на CD дисках. Например, если устройство /dev/sda1 содержит файловую систему ntfs, в которой имеется файл /asu14.04upk/casper/filesystem.squashfs, то монтирование такой ФС (типа squashfs) к директории /rofs ядра ОС осуществляется двумя командами:
#Монтируем устройство /dev/sda1 в директорию /cdrom mount /dev/sda1 /cdrom -t ntfs -o ro
#Монтируем ФС в файле к директории /rofs через устройство /dev/loop1 mount /cdrom/asu14.04.upk/casper/filesystem.squashfs /rofs \
-t squashfs -o loop=/dev/loop1
Другая специальная ФС — overlayfs — является вариантом реализации каскадной файловой системы для ОС Ubuntu и ее клонов.
Каскадная файловая система (КФС) — это виртуальная ФС, позволяющая «прозрачно видеть» две изолированные ФС как одну.
Работы над КФС ведутся с середины 90-х годов. В январе 2007 года, в некоторые дистрибутивы Linux, была включена КФС, названная UnionFS. Альтернативная разработка Aufs (AnotherUnionFS) ведется с 2006 года.
123
Каскадно-объединенное монтирование — одновременное монтирование разных нескольких файловых систем как одну, например для объединения ФС нескольких сайтов.
Overlayfs обеспечивает надежное монтирование двух файловых систем на разных уровнях. Рассмотрим подробнее этот вопрос на примере:
•пусть устройство CDROM монтировано в директорию /cdrom с возможностью только чтение;
•пусть в директорию /mnt/initrd монтирован, созданный ранее ramdisk, который имеет возможность чтения и записи;
•проведем каскадно-объединенное монтирование в директорию /tmp/mnt,
предполагая, что CDROM будет монтирован на нижнем уровне, а ramdisk — на верхнем;
•учтем, что в ядре ОС имеется имя overlayfs, которое не является
устройством, но позволяет монтировать ФС. Тогда, команда монтирования будет иметь вид:
# Команда каскадно-объединенного монтирования mount -t overlay overlay /tmp/mnt -o \
rw,upperdir=/mnt/initrd,lowerdir=/cdrom
В результате такого действия, в директории /tmp/mnt, мы будем видеть все файлы директории /cdrom. Кроме того, мы можем редактировать и использовать любой файл директории /cdrom, но сохраняться эти файлы будут в памяти ramdisk.
Последня специальная ФС, которую мы кратко рассмотрим — FUSE.
FUSE — Filesystem in Userspace — файловая система в пространстве пользователя. FUSE реализована в виде модуля для UNIX-подобных ОС. Этот модуль позволяет пользователям без привилегий создавать свои ФС, без необходимости переписывать код ядра ОС. Это достигается за счет запуска кода файловой системы в пространстве пользователя, в то время как модуль FUSE предоставляет мост для актуальных интерфейсов ядра.
На рисунке 4.8 показана схема взаимодействия системных вызовов пользователей с ядром ОС и ПО в пространстве пользователя.
Хорошо видно, что:
•схема взаимодействия системного и прикладного ПО напоминает аналогичное взаимодействие микроядра и серверных сервисов;
•кроме системной библиотеки glibc необходима библиотека libfuse.
124
Рисунок 4.8 - Схема работы модуля FUSE
Для операций монтирования и демонтирования используется специальная утилита fusermount, использующая файл конфигурации /etc/fuse.conf:
fusermount [OPTIONS] MOUNTPOINT
Опция -u используется для демонтирования FUSE.
Следует заметить, что многие видные разработчики ОС критикуют FUSE, но эти вопросы выходят за рамки нашей дисциплины.
Замечание
Разделы винчестера, содержащие ФС ntfs, монтируются в Linux с типом fuseblk.
Взаключение темы, рассмотрим вопросы ограничения размеров, которые системно можно накладывать на файловые системы.
Рано или поздно может случиться так, что некоторая ФС на внешнем носителе, подключенная к древовидной структуре ядра ОС, заполнится и блокирует нормальную работу ОС.
По умолчанию, ФС ext2fs резервирует 5% места для пользователя root.
Принято считать, что для нормальной работы ФС требуется свободное пространство:
•не менее 10% дискового пространства (пространство раздела);
125
• не менее наибольшего файла в файловой системе.
Рекомендуется размешать /home, /opt, /tmp, /var, /usr/local в разных разделах диска.
Определить свободное пространство диска можно командой df:
$ df
Файл.система |
1K-блоков Использовано |
Доступно Использовано% |
Cмонтировано в |
||
/dev/sda5 |
21356772 |
14841812 |
5430084 |
74% |
/ |
udev |
1669124 |
12 |
1669112 |
1% |
/dev |
tmpfs |
670748 |
780 |
669968 |
1% |
/run |
none |
5120 |
0 |
5120 |
0% |
/run/lock |
none |
1676860 |
84 |
1676776 |
1% |
/run/shm |
none |
102400 |
12 |
102388 |
1% |
/run/user |
/dev/sda1 |
51199120 |
26771180 |
24427940 |
53% |
/cdrom |
$ |
|
|
|
|
|
Администратор ОС должен отслеживать наличие достаточного дискового пространства ФС. Для этих целей имеется специальное системное ПО под общим названием quota. Естественно, ядро ОС должно поддерживать команды этого пакета.
Чтобы включить квоты для конкретной файловой системы, нужно в корень ФС поместить бинарные файлы:
•quota.user — для персональных квот;
•quota.group — для групповых квот.
Управление квотами выполняется с помощью команд:
quotastats |
Проверка поддержки квот ядром ОС. |
quotacheck |
Сканирование заданной ФС и первоначальное создание файлов |
|
quota.user и quota.group. |
edquota |
Редактор квот. |
quotaon |
Активация настроек квот для ФС. |
quotaoff |
Деактивация настроек квот для ФС. |
quota |
Проверка пользователем, установленных для него квот. |