Алексей Федорчук
2005 г
Одной из отличительных особенностей логического устройства файловой системы операционок POSIX-семейства является их иерархическая, или древовидная, организации (правда, как я уже говорил дерево выглядит это немного странно). То есть здесь нет, как в DOS или Windows любого рода, обозначений (например, буквенных, или каких-либо иных) для отдельных носителей и их разделов: все они включаются в единую структуру в качестве подкаталогов главного каталога. называемого корневым. Процесс подключения файловых систем на самостоятельных физических носителях (и их разделах) к корню файлового древа называется монтированием, а подкаталоги, содержимое которых они составляют, именуются точками монтирования.
Содержание
- Принципы построения иерархии каталогов
- Типовой набор каталогов POSIX-системы
- Корневая файловая система
- Ветвь /usr
- Ветвь /usr/local
- Ветвь /opt
- Ветвь /var
- Каталог /mnt
- Ветвь /home
- Ветвь /tmp
Принципы построения иерархии каталогов
Исторически в Unix сложилась определенная структура каталогов, весьма сходная в разных представителях этого семейства в общих чертах, но несколько различающаяся в деталях. В частности, файловая иерархия в BSD-системах почти идентична, отличаясь от таковой в Linux. А в последней существенные отличия обнаруживаются между разными дистрибутивами. Вплоть до того, что структура файловой иерархии является одним из дистрибутив-специфичных признаков.
Такое положение дел затрудняет сочинение кросс-платформенных приложений. И потому существует и активно развивается проект стандартизации файловой иерархии — FHS (Filesystem Hierarchy Standard).
Проект FHS был направлен первоначально на упорядочивание структуры каталогов в многочисленных дистрибутивах Linux. Позднее он был приспособлен для других Unix-подобных систем (в том числе и BSD-клана). И ныне предпринимаются активные (но не очень успешные) усилия к тому, чтобы сделать его стандартом для POSIX-систем не только по имени, но и фактически.
Стандарт FHS покоится на двух основополагающих принципах — четком отделении в файловой иерархии каталогов разделяемых и неразделяемых, с одной стороны, и неизменяемых и изменяемых — с другой.
Противопоставление разделяемых и неразделяемых каталогов обусловлено изначально сетевой природой Unix. То есть данные, относящиеся к локальной машине (например, файлы конфигурирования ее устройств) должны лежать в каталогах, отдельных от тех, содержимое которых доступны с других машин в сети, локальной или глобальной (примером чему являются не только пользовательские данные, но и программы).
Суть противопоставления неизменяемых и изменяемых каталогов легко пояснить на примере. Так, те же общие пользовательские программы по природе своей должны быть неизменяемыми (вернее, доступными для модификации только администратору системы, но не самому пользователю, применяющему их в своей работе). В то же время эти программы при своей работе генерируют не только файлы данных, скажем, тексты или изображения (изменяемая их природа ясна без комментариев), но всякого рода служебную информацию, типа log-файлов, временных файлов и тому подобного). Каковая и должна группироваться в каталогах, отделенных от собственно исполнимых файлов программ, необходимых для их запуска библиотек, конфигурационных файлов и т.д.
Тем не менее, не смотря на активное продвижение во многих дистрибутивах Linux из числа наиболее распространенных, статуса истинного стандарта FHS не обрел. Существует немало дистрибутивов Linux, не использующие некоторые его положения. А с традиционной файловой иерархией BSD-систем он соотносится лишь частично.
И причина — в том, что FHS игнорирует еще одно противопоставление, очень важное для пользователя: противопоставление легко восстановимых частей файловой системы, и тех ее компонентов, которые восстановимы с трудом или невосстановимы вообще.
К первым, как ни странно, можно отнести саму базовую систему: ведь переустановка ее с дистрибутивного носителя, в случае фатального краха, дело не столь уж сложное. К трудновосстановимым частям файловой системы, очевидно, относятся пользовательские данные: даже в случае регулярного их резервирования (а многие ли пользователи столь аккуратны?) развертывание их из архивов потребует немалого времени (и почти неизбежно повлечет некоторые потери).
Кроме того, в BSD-системах и Source Based дистрибутивах Linux к трудновосстановимым каталогам я отнес бы все, связанное с пакетным менеджментом — дерево портов FreeBSD или pkgsrc
в NetBSD (и системах, его заимствовавших), их аналоги в дистрибутивах Linux, собственно исходники портированных программ, да и исходные тексты системы тоже. Ибо, даже если все это имеется на дистрибутиве, эти компоненты файловой системы, как правило, поддерживаются пользователем в актуальном состоянии путем синхронизации по Сети с серверами проекта (иначе их использование лишено смысла). И их утрата повлечет как временные (особенно при модемном подключении), так и финансовые (мало кто является счастливым обладателем бесплатного доступа в Интернет) потери.
Четкое следовании концепции отчленения разделяемых и неразделяемых, неизменяемых и неизменяемых, восстановимых и невосстановимых каталогов друг от друга позволяет, в рамках единой древовидной файловой иерархии, обособить отдельные ее ветви физически — то есть в виде самостоятельных файловых систем, размещенных на изолированных устройствах (дисках, дисковых разделах, слайсах, партициях etc.). Резонов к тому много — и повышение быстродействия, и увеличение надежности, и просто соображения удобства, — но и о них сейчас речь не пойдет. Потому что в данный момент для нас важно только то, что эти ветви файлового древа должны быть инкорпорированы в общую файловую систему.
Типовой набор каталогов POSIX-системы
Собственно говоря, для функционирования абсолютно необходимо наличие лишь одной файловой системы — той, что монтируется в корневой каталог файлового древа (своего рода аналог мирового дерева Иггдрассиль). Корневой каталог и его непременные ветви обязательно должны составлять единую файловую систему, расположенную на одном носителе — диске, дисковом разделе, программном либо аппаратном RAID-массиве, или логическом томе в понимании LVM. И в нем должны располагаться все компоненты, необходимые для старта системы и, в идеале, — ничего сверх того.
Просмотреть состав корневого каталога можно командой
$ ls -1 /
которая в любой POSIX-системе покажет некий минимальный джентльменский набор каталогов:
bin/ boot/ etc/ root/ sbin/
Именно в них собраны все файлы, без которых система не может существовать. Прочие каталоги — примерно такие:
home/ mnt/ opt/ tmp/ usr/ var/
Они а) не обязательны (по крайней мере, теоретически — практически обойтись без них трудновато), б) не каждый из них присутствует во всех системах и дистрибутивах, и в) каждый из них может быть (и часто является — если все делать по уму) точкой монтирования собственной ветви файлового древа.
Кроме этого, в большинстве случаев в корне файловой системы POSIX-совместимых ОС присутствуют еще два подкаталога:
dev/ proc/
Это обычно — точки монтирования виртуальных файловых систем — устройств и процессов, соответственно (хотя, если файловая система устройств не используется, каталог /dev
обязательно должен быть компонентом корневой файловой системы. Наконец, в Linux-системах, как правило, в корне файлового древа лежит еще и каталог /lib
, предназначенный для главных системных библиотек. А при использовании механизма udev
неизбежным оказывается еще и каталог /sys
, в который монтируется виртуальная файловая система sysfs
.
Корневая файловая система
Корневая файловая система является неразделяемой (то есть не предназначенной для совместного использования разными машинами сети) и неизменяемой (то есть изменения в нее может вносить только администратор системы, но не пользовательские программы и, тем более, не пользователи). Причем крайне не рекомендуется создавать в ней подкаталоги сверх предусмотренных стандартом (и перечисленных выше).
Наполнение корневой файловой системы подбирается с таким рассчетом, чтобы машина могла стартовать и сохраняла бы минимальную функциональность даже при аварийной загрузке (или в однопользовательском режиме), когда все остальные файловые системы не монтируются (и, соответственно, такие ее ветки, как /usr
или /var
, могут оказаться недоступными.
В соответствие с этим старт машины обеспечивается файлами каталогов /boot
и /etc
. В первом размещаются ядро системы — исполнимый файл «особого назначения», — и все, что требуется для его загрузки: в Linux, например, это системная карта (файл /etc/System.map
), а во FreeBSD — загружаемые модули ядра. Впрочем, подчас ядро размещается непосредственно в корне файловой системы, и тогда каталог /boot
может отсутствовать вовсе, а под модули ядра может отводиться каталог /modules
.
Каталог /etc
предназначен для общесистемных конфигурационных файлов, определяющих условия ее загрузки. Содержимое его очень сильно зависит от системы (а в Linux — еще и от дистрибутива), и потому рассматривать его здесь я не буду — к этой теме придется еще не раз возвращаться.
Минимально необходимая функциональность обеспечивается содержимым каталогов /bin
и /sbin
— в них собраны исполнимые файлы важнейших пользовательских и системных программ, соответственно, тех самых, которые позволят выполнить комплекс ремонтно-спасательных мероприятий и привести машину в человеческий вид после сбоя.
Разнесение системных и пользовательских программ по подкаталогам корня — достаточно условно. Ни одна из команд этих для решения пользовательских задач по настоящему не предназначена. Просто в каталоге /bin
собраны команды администрирования, к которым время от времени обращается (или может обратиться) и обычный пользователь, а каталог sbin
предназначен для команд, о которых пользователю и знать-то не положено. И которыми он, в большинстве случаев, все равно не сможет воспользоваться по причине отсутствия соответствующих полномочий (например, требуемых прав доступа к файлам устройств).
Для запуска POSIX-программ (в том числе и тех, что собраны в каталогах /bin
и sbin
), как правило, требуется доступ к функциям общесистемных библиотек (в первую очередь — главной библиотеки glibc
). И потому (почти) непременный компонент корневого каталога — подкаталог /lib
, в коем они и собраны.
В Linux каталог /lib
служит еще одной важной цели — в его подкаталоге (/lib/modules
) собраны загружаемые модули ядра (во FreeBSD их место — каталог /boot/kernel
).
Во FreeBSD каталога /lib
в корневой файловой системе не обнаруживается — соответствующие компоненты здесь размещаются в /usr/lib
(см. далее). Это связано с тем, что исторически во FreeBSD важнейшие общесистемные программы собирались так, что требуемые им библиотечные функции встраивались в их исполнимые файлы (так называемая статическая линковка, о которой речь пойдет в главе 14). Во FreeBSD 5-й ветки программы из каталогов /bin
и /sbin
линкуются динамически, то есть при отсутствии каталога /usr
(а во Free это почти всегда отдельная ветвь файловой системы) они не функционируют. В компенсацию чего предусмотрен выходящий за рамки стандартов каталог /restore
, содержащий те же программы, но слинкованные статически (как следует из имени каталога, единственным назначением его содержимого являются аварийно-спасательные работы).
И, наконец, /root
. Это — обычный домашний каталог одноименного пользователя, сиречь администратора системы. Поскольку никакой практической работы он не делает (или, по крайней мере, делать не должен), содержимое его — лишь собственные конфигурационные файлы суперпользователя (пользовательской командной оболочки, любимого редактора и так далее).
Ветвь /usr
Исторически каталог /usr
предназначался для пользовательских программ и данных. Ныне эти функции распределены между каталогами /usr/local
и /home
(хотя и сейчас во FreeBSD по умолчанию последний представляет собой символическую ссылку на /usr/home
). Каталог же /usr
— не изменяемый, но разделяемый, — служит вместилищем основной части прикладных программ и всего, что к ним относится — исходных текстов, конфигурационных файлов, разделяемых библиотек, документации и тому подобного хозяйства.
Состав каталога /usr
существенно различается в BSD-системах и в Linux. В первых в него помещаются только неотъемлемые части операционной системы (того, что во FreeBSD объединяется понятием Distributions). Приложения же, устанавливаемые из портов или пакетов, имеют место своей прописки подкаталог /usr/local
, который может представлять отдельную ветвь файлового древа.
В Linux каталог /usr
служит вместилищем всех программ (и их компонентов), штатно включенных в состав дистрибутива. А подкаталог /usr/local
предназначается обычно для программ, самостоятельно собираемых из исходников.
В любом случае, обычный состав каталога /usr
следующий (по выводу команды ls -1
):
X11R6/ bin/ etc/ include/ lib/ libexec/ local/ sbin/ share/ src/
Как уже говорилось, подкаталог /usr/local
— отдельная ветвь файлового древа, и потому будет рассмотрен отдельно же. Назначение же прочих каталогов таково:
/usr/bin
и/usr/sbin
предназначены для исполнимых файлов пользовательских и системных программ (здесь граница между ними еще более условна, чем в случае корневого каталога), назначение которых выходит за рамки обеспечения базового функционирования системы;/usr/etc
предназначается для конфигурационных файлов отдельных приложений;/usr/include
содержит так называемые заголовочные файлы, необходимые для линковки исполняемых файлов с библиотечными компонентами;/usr/lib
и/usr/libexec
— каталоги для разделяемых библиотек, от которых зависят пользовательские приложения;/usr/share
— вместилище самых разнообразных, т.н. архитектурно независимых, компонентов: здесь можно видеть и документацию в разных форматах, и примеры конфигурационных файлов, и данные, используемые программами управления консолью (шрифты, раскладки клавиатуры), и описание часовых поясов;/usr/src
— каталог для исходных текстов; в Linux тут штатно помещаются только исходники ядра (ядер) системы, в BSD же клонах — полный набор исходников того комплекса, который во FreeBSD именуется Distributions; исходники самостоятельно собираемых программ помещать сюда, как правило, нежелательно;/usr/X11R6
— каталог для компонентов оконной системы Икс — исполнимых файлов (/usr/X11R6/bin
), библиотек (/usr/X11R6/lib
), заголовков (/usr/X11R6/include
), документации (/usr/X11R6/man
); файлы Иксовых приложений сюда помещаться не должны (за исключением, разве что, оконных менеджеров) — их место в/usr
,/usr/local
или/opt
, в зависимости от системы.
Кроме этого, в каталоге /usr
могут обнаружиться подкаталоги /usr/var
и /usr/tmp
— обычно символические ссылки на соответствующие ветви корневого каталога. А в некоторых дистрибутивах Linux непосредственно в /usr
помещается и основная общесистемная документация — man-страницы (в подкаталог /usr/man
).
Наконец, в BSD-системах и некоторых Source Based дистрибутивах Linux (например, Gentoo) в каталоге /usr
размещается подкаталог для системы управления пакетами — портов FreeBSD и OpenBSD (/usr/ports
), их аналогов в других системах (/usr/portage
в Gentoo). Хотя с точки зрения следования букве и духу стандарта FHS (сам он о портах и подобных системах не упоминает ни словом), более логичным местом их размещения был бы каталог /var
(см. ниже) — и именно так делается в таких дистрибутивах, как CRUX и Archlinux.
Ветвь /usr/local
Как уже было сказано, ветвь /usr/local
в Linux предназначена для самостоятельно собираемых из исходников (не входящих в данный дистрибутив) программ. А во FreeBSD она служит вместилищем большей части пользовательских приложений — почти всего того, что выходит за рамки Distributions и устанавливается из пакетов или портов. Соответственно этому, структура каталога в целом повторяет таковую ветви /usr
(с понятными исключениями):
bin/ etc/ include/ lib/ man/ sbin/ share/
Содержимое подкаталогов также аналогично: исполнимые файлы программ (/usr/local/bin
и /usr/local/sbin
), их конфиги (/usr/local/etc
), библиотеки, с которым они связаны, и их заголовочные файлы (/usr/local/lib
и /usr/local/include
, соответственно), man-страницы (/usr/local/man
) и всякая архитектурно независимая всячина (/usr/local/share
), в том числе и документация в иных форматах.
Ветвь /opt
Каталог /opt
предусмотрен стандартом FHS, но реально используется не во всех дистрибутивах Linux, а в BSD-системах и вовсе отсутствует. Тем не менее, все больше программ пишется в рассчете на умолчальную инсталляцию именно в него.
Исторически каталог /opt
предназначался в Linux для коммерческих приложений и всякого рода программ не вполне свободного характера. Ныне же его назначение — размещение больших самодостаточных программных комплексов, таких, как библиотека Qt, KDE со всеми его компонентами и приложениями, OpenOffice.org и тому подобных. Структура каталога должна быть такой: /opt/pkg_name
. Вот как выглядит она а в моей системе (Archlinux):
$ ls -1 /opt gnome/ kde/ OpenOffice.org1.1.2/ qt/
Каждый из подкаталогов имеет собственную внутреннюю структуру:
$ ls -1 /opt/* /opt/gnome: bin/ lib/ man/ share/ /opt/kde: bin/ etc/ include/ lib/ share/ /opt/OpenOffice.org1.1.2: help/ LICENSE LICENSE.html program/ README README.html setup@ share/ spadmin@ THIRDPARTYLICENSEREADME.html user/ /opt/qt: bin/ doc/ include/ lib/ mkspecs/ phrasebooks/ plugins/ templates/ translations/
Назначение подкаталогов внутри /opt/pkg_name
легко угадывается по аналогии с /usr
и /usr/local
. Например /opt/kde/bin
предназначается для исполнимых файлов системы KDE и ее приложений, /opt/kde/etc
— для конфигурационных ее файлов, /opt/kde/include
— для файлов заголовков, /opt/kde/lib
— для библиотек и /opt/kde/share
— для разделяемых файлов, в том числе и документации. В KDE нет документации в man-формате, если же она имеется, то (как в случае Gnome — я его не ставил, это то, что потянули Gimp и тому подобные Gtk-приложения) можно видеть подкаталог /opt/pkg_name/man
.
Можно видеть, что структура каталога /opt
отступает от исторически сложившейся (и внутренне обоснованной POSIX-традиции объединения в каталоги однотипных компонентов — исполняемых файлов, библиотек и так далее. И при большом количестве инсталлированных в него программ создает определенные трудности: приходится либо перегружать значениями переменную $PATH
, обеспечивающую быстрый доступ к командам (о чем будет говориться в главе 12), либо создавать специальный каталог /opt/bin
и помещать в него символические ссылки на исполняемые бинарники программ. Поэтому в ряде дистрибутивов Linux (например, в CRUX) каталог /opt
не используется принципиально. Как, впрочем, и во всех BSD-системах. Вполне возможно, что так оно и лучше…
Ветвь /var
Как явствует из названия, каталог /var
предназначен для хранения изменяемых файлов, генерируемых в ходе нормальной жизнедеятельности различных программ — программных (например, браузерных) кэшей, log-файлов, спулинга печати и почтовых систем, почтовых ящиков, описаний запущенных процессов и так далее. В частности, именно в каталог /var
помещаются так называемые дампы — слепки состояния оперативной памяти, генерируемые при аварийном завершении работы для выявления причин оного. Отличительная особенность всех этих компонентов — их изменчивый в процессе сеанса работы характер и то, что они, тем не менее, должны сохраняться при перезагрузке системы.
Внутренняя структура /var
очень сильно меняется от системы к системе, и поэтому на деталях ее устройства я задерживаться не буду. Замечу только, что этот каталог — логичное место для помещения компонентов всякого рода портообразных систем управления пакетами, как это сделано, например, в дистрибутиве Archlinux, где под нее отведен подкаталог /var/abs
(abs — Archlinux Building System).
Каталог /mnt
Каталог /mnt
предназначен для монтирования временно используемых файловых систем, располагающихся, как правило, на сменных носителях. В всежеустановленной системе он обычно пуст, и структура его никак не регламентирована. Пользователю вольно создать в нем подкаталоги для отдельных видов носителей. Например, в моей системе это /mnt/cd
, /mnt/dvd
, /mnt/usb
и /mnt/hd
— для дисков CD, DVD, флэшки и съемного винчестера.
Во FreeBSD штатными каталогами для монтирования CD и дискет являются /cdrom
и /floppy
непосредственно в корневом каталоге. Что не вполне согласуется со стандартом, но по своему логично — в корень вынесены точки монтирования устройств, существующих (как CD ROM) или до недавнего времени существовавших (флоппи-дисковод) в любой машине.
Ветвь /home
Каталог /home
предназначен для помещения домашних каталогов пользователей. Содержимое его никак не регламентировано, но обычно он имеет вид вроде /home/{username1,...,username#}
. Хотя в крупных системах с большим количеством пользователей их домашние каталоги могут быть объединены в группы.
В каталоге /home
могут располагаться домашние каталоги не только реальных, но и некоторых виртуальных пользователей. Так, если машина используется в качестве web- или ftp-сервера, можно видеть такие подкаталоги, как /home/www
или /home/ftp
, соответственно.
Ветвь /tmp
Осталось поговорить только о каталоге для хранения временных файлов — /tmp
. Как и компоненты /var
, они генерируются различными программами в ходе нормальной их жизнедеятельности. Но, в отличие от /var
, для компонентов /tmp
не предполагается их сохранения вне текущего сеанса работы. Более того, все руководства по системному администрированию рекомендуют регулярно (например, при рестарте машины) или периодически очищать этот каталог. И потому в качестве /tmp
целесообразно монтировать файловые системы в оперативной памяти — tmpfs (в Linux) или mfs (во FreeBSD). Кроме того, что это гарантирует очистку его содержимого при перезагрузке, так еще и способствует быстродействию, например, компиляции программ, временные продукты которой не записываются на диск, а помещаются в виртуальный каталог типа /tmp/obj
.
Во многих системах можно увидеть каталоги вроде /usr/tmp
и /var/tmp
. Это, как правило, символические ссылки на /tmp
.
Стратегия разделения файловых систем
В заключение разговора о файловой иерархии следует подчеркнуть, что гарантированно на одной файловой системе (фигурально говоря, на одном дисковом разделе, хотя это и не совсем точно) должны находиться только каталоги, перечисленные в параграфе Корневая файловая система. Все же прочие каталоги — /usr
, /opt
, /var
, /tmp
и, конечно же, /home
могут представлять точки монтирования самостоятельных файловых систем на отдельных физических носителях или их разделах.
Более того, в локальной сети каталоги эти вполне могут располагаться даже на разных машинах. Так, один компьютер, выполняющий роль сервера приложений, может содержать разделяемые в сети каталоги /usr
и /opt
, другой — файл-сервер, — вмещать все домашние каталоги пользователей, и так далее.
Осталось только решить — какие файловые системы целесообразно вычленить из общего файлового древа, и зачем это делать. Ответ на эти вопросы очень сильно зависит от используемой ОС, а в случае с Linux — еще и от его дистрибутива. Тем не менее, общие принципы отделения файловых систем наметить можно. Для чего следует вспомнить о противопоставлении, с одной стороны, неизменяемых и изменяемых каталогов, с другой — легко восстановимых, трудно восстановимых и практически невосстановимых данных. Проделаем такую попытку применительно к пользовательскому десктопу — в случае сервера рассчеты будут существенно иными.
Очевидно, что корневая файловая система в составе каталогов /bin
, /boot
, /etc
, /root
, /sbin
, содержащих легко восстановимые с дистрибутивного носителя и практически не изменяемые данные, должны лежать на изолированном дисковом разделе. В Linux к ним должен добавиться еще и каталог /lib
. С другой стороны, при использовании в качестве загрузчика GRUB (вне зависимости от операционной системы) рекомендуется вынести на отдельный раздел каталог /boot
.
В старых источниках о Linux можно прочитать о другом резоне к выделению раздела для каталога /boot
, причем в самом начале диска: из-за невозможности загрузки ядра программой Lilo с цилиндра номером выше, чем 1023. В современных версиях загрузчиков таких ограничений нет. Тем не менее, если уж раздел под /boot
создается, резонно сделать его первым на диске, а непосредственно за ним разместить раздел подкачки: это добавит пять копеек быстродействия при осуществлении своппинга.
И еще из области истории: требование, чтобы корневой и загрузочный разделы были непременно первичными, также давно снято. И эти файловые системы вполне могут помещаться на логических разделах внутри Extended Partition.
Столь же ясно, что изменяемые ветви файловой системы — каталоги /var
и /tmp
, — должны быть вынесены за пределы корневого раздела. Причем последний, как неоднократно говорилось ранее, вообще целесообразно разместить на файловой системе в оперативной памяти (tmpfs или mfs). В случае, если каталог /var
содержит подкаталоги для портообразных систем пакетного менеджмента, подобно /var/abs
, /var/cache/pacman/src
и /var/cache/pacman/pkg
в Archlinux, они также должны образовывать самостоятельные файловые системы
Теперь — каталог /usr
, содержащий либо компоненты базовой системы (как в BSD), либо — основную массу пользовательских приложений (как в большинстве дистрибутивов Linux). Он содержит легковосстановимые данны и, по хорошему, должен бы быть практически неизменяемым, и потому, безусловно, заслуживает выделения на самостоятельном разделе. Причем из его состава целесообразно вычленить, с одной стороны, подкаталоги /usr/X11R6
и /usr/local
, с другой — подкаталоги для портообразных систем пакетного менеджмента: /usr/ports
, /usr/pkgsrc
и /usr/pkg
в BSD-системах, /usr/portages
в Gentoo Linux, и так далее. Причем от последних следует обособить подкаталоги для помещения исходников, скачиваемых из сети при сборке портов — /usr/ports/distfiles
, /usr/pkgsrc/disfiles
, /usr/portages/distfiles
и подобные им.
В BSD-системах, кроме этого, из каталога /usr
имеет смысл выделить подкаталоги /usr/src
и /usr/obj
, содержащие исходные тексты базовых компонентов (включая ядро) и промежуточные продукты их компиляции, образумемые в результате процедур make buildworld
и make buildkernel
.
И, наконец, каталог /home
, содержащий изменяемые и часто невосстановимые данные, подлежит вынесению из корня файловой иерархии в обязательном порядке. Причем я всегда стараюсь разместить его либо на отдельном слайсе (в BSD), либо на первичном разделе (в Linux).
Предложенная схема разделения файловых систем может показаться излишне усложненной. Однако она дает гарантию обособления легко восстановимых, трудно восстановимых и невосстановимых данных, что облегчит переустановку системы в случае крайней необходимости, и даже миграцию с системы на систему.
Дополнительный ее плюс — в том, что для отдельных ветвей файлового древа, в зависимости от характера размещенных на ней данных, в Linux можно подобрать физически оптимальную файловую систему. Например, для раздела под /boot
нет смысла использовать что-либо помимо Ext2fs. Корневой раздел обычно рекомендуется форматировать в надежной и при этом наиболее совместимой Ext3fs. Под каталоги с огромным количеством мелких файлов, такие, как /var/abs
в Archlinux, /usr/portages
в Gentoo, целесообразно задействовать ReiserFS: ведь умелое обращение с мелкими файлами — это ее профиль. А в каталоге /home
, где возможно появление огромных мультимедийных файлов (и который сам по себе обычно очень велик), ко двору может прийтись XFS (хотя, как показывают измерения, и ReiserFS выглядит тут вполне достойно). Такие меры могут способствовать повышению и надежности хранения данных, и быстродействию файловых операций.
Пользователи BSD-операционок безальтернативно привязаны к файловым система типа FFS. Однако и у них есть пространство для маневра. Во-первых — за счет варьирования размеров блока и фрагмента отдельных файловых систем, способствующего либо производительности дисковых операций, либо экономии дискового пространства. А во-вторых, некоторые ветви файлового древа (такие, как /tmp
или /usr/obj
, вопреки рекомендациям, можно безбоязненно монтировать в чисто асинхронном режиме, выиграв на этом процент-другой производительности.