Иерархия каталогов и файловых систем в Linux

Автор работы: Пользователь скрыл имя, 04 Января 2012 в 20:10, статья

Краткое описание

В статье рассказывается о разработанном в рамках проекта Open Source стандарте на структуру каталоговUNIX-подобных операционных систем (подразумеваются Linux и BSD-системы).

Содержимое работы - 1 файл

Иерархия каталогов и файловых систем в Linux.docx

— 80.73 Кб (Скачать файл)

Файл, в  котором хранятся идентификаторы процесса (PID), должен состоять из идентификатора процесса в коде ASCII, записанном в  десятичной нотации, за которым следует  символ конца строки. Например, если crondзапущен как процесс с номером 25, /var/run/crond.pid будет содержать три символа: два, пять и символ новой строки.

Программы, которые читают PID-файлы, должны быть достаточно гибкими в отношении  того, что они воспринимают: то есть они должны игнорировать лишние пробелы, предшествующие ноли, отсутствие завершающего символа новой строки или дополнительные строки в PID-файле. Программы, которые  создают PID-файлы, должны использовать простые спецификации, изложенные в  предыдущем параграфе.

В этом каталоге расположен также файл utmp, в котором хранится информация о том, кто в данный момент использует систему.

/var/spool : Очереди данных  для приложений

Каталог /var/spool содержит данные, которые ожидают какой-то последующей обработки (программой, пользователем или администратором); обычно после обработки эти данные удаляются.

Обычно  в /var/spool создаются следующие подкаталоги: lpd (каталог спулинга для принтера), mqueue(очередь исходящей почты), news (каталог спулинга новостей), rwho (файлы для программы Rwhod), uucp(каталог спулинга для UUCP).

/var/tmp : Временные файлы,  сохраняемые между  перезапусками системы

Каталог /var/tmp сделан доступным для программ, которым требуется временные файлы или каталоги, которые должны сохраняться между перезагрузками системы. Следовательно, данные, хранящиеся в/var/tmp, являются более постоянными, чем данные в /tmp.

Файлы и каталоги, размещенные в /var/tmp, не должны удаляться, когда система (пере)загружается. Хотя данные, сохраняемые в /var/tmp, обычно удаляются специфичным для каждого сайта образом, рекомендуется удалять их чаще, чем данные в /tmp.

Дополнительные  требования стандарта  для ОС Linux

Отдельный раздел стандарта FHS содержит требования и рекомендации, которые относятся только к операционной системе Linux. Вот их краткий перечень:

  • В Linux-системах, если ядро расположено в корневом каталоге («/»), рекомендуется использовать для него названия vmlinux или vmlinuz, которые используются в последних версиях исходных кодов ядра Linux.
  • Если в Linux-системе используется файл setserial, он должен размещаться в каталоге /bin.
  • Все устройства и специальные файлы в /dev должны соответствовать документу Linux Allocated Devices, который поставляется в составе исходных кодов ядра и поддерживается Питером Анвином (H. Peter Anvin). Символические ссылки в каталоге /dev должны устанавливаться в Linux-системах не иначе как в соответствии с документом Linux Allocated Devices.
  • Если в Linux-системе используется файл lilo.conf, он должен размещаться в каталоге /etc.
  • Поскольку файловая система proc является фактически стандартным для Linux методом обработки информации о системе и процессах, в отличие от других систем, использующих /dev/kmem и другие подобные методы, настоятельно рекомендуется использовать proc для хранения и получения информации о процессах, а также информации о ядре и памяти.
  • В Linux-системах следующие дополнительные файлы размещаются в /sbin (в тексте стандарта имеются пояснения, почему возникло это требование):
  • Команды для управления файловой системой ext2fs: badblocks, dumpe2fs, e2fsck, mke2fs,mklost+found, tune2fs;
  • Программа установки загрузчика системы lilo;
  • Неизменяемые исполняемые файлы ldconfig, sln, ssync.
  • Программы ctrlaltdel, kbdrate.
  • Если в системе установлены компиляторы языков C или C++, и система не основана на glibc, должны быть созданы следующие символические ссылки:

    /usr/include/asm -> /usr/src/linux/include/asm-<arch>

    /usr/include/linux -> /usr/src/linux/include/linux

  • Для систем, основанных на версиях библиотеки libc, предшествующих glibc, применяются следующие правила:

    Единственными исходными кодами, которые должны быть размещены в определенном месте, являются исходные коды ядра Linux. Они  размещаются в /usr/src/linux.

    Если  установлен компилятор C или C++, а полная версия исходных кодов ядра не установлена, то подключаемые файлы из исходных кодов ядра должны размещаться в  следующих каталогах:

    /usr/src/linux/include/asm-<arch>

    /usr/src/linux/include/linux

    где <arch> - название архитектуры системы (например, i386).

    Замечание: /usr/src/linux может быть символической ссылкой на дерево каталогов с исходными кодами ядра.

  • Каталог /var/spool/cron содержит переменные данные для программ-демонов cron и at.

Иерархия  файловых систем

В предыдущей части статьи мы сознательно ограничивали рассмотрение только вопросами построения структуры каталогов и не касались (или почти не касались) вопроса  о том, как разместить эти каталоги в различных файловых системах. Теперь давайте рассмотрим этот вопрос отдельно.

В тексте стандарта FHS довольно мало рекомендаций на этот счет. И относятся они в основном к корневой файловой системе. В соответствии со стандартом содержимое этой файловой системы должно быть достаточным для того, чтобы обеспечить загрузку операционной системы, а также восстановление или ремонт этой системы при возникновении различных проблем и сбоев.

  • Чтобы обеспечить процесс загрузки, в корневой файловой системе должна находиться информация для загрузчика и основные файлы, необходимые в процессе старта системы (например, ядро ОС). Здесь же должны размещаться файлы конфигурации и все, что необходимо для монтирования других файловых систем, включая такие утилиты, как mount.
  • Для того, чтобы обеспечить возможность восстановления системы после сбоев, в корневой файловой системе должны присутствовать все утилиты, необходимые опытному администратору для диагностирования проблем и реконструкции системы после любой аварийной ситуации.
  • Здесь же должны быть расположены и те утилиты, которые необходимы для восстановления данных с резервных копий (с дискет, магнитных лент и т.п.).

По нескольким причинам размер корневой файловой системы  желательно сделать достаточно малым.

  • Иногда приходится монтировать корневую файловую систему с носителя очень малого объема.
  • Корневая файловая система обычно содержит файлы, специфичные для конкретной системы. К таким файлам относится, например, ядро системы, файл, в котором сохраняется имя хоста, другие конфигурационные файлы. Это все файлы, относящиеся к числу неразделяемых. Их немного по сравнению с общим числом файлов, поэтому для них не требуется больших объемов дискового пространства. Разделяемые файлы можно разместить на сетевых дисках. И это позволяет использовать в качестве рабочих станций в сети компьютеры с маленькими по объему локальными жесткими дисками.
  • Дефекты диска, на котором располагается корневая файловая система, обычно создают проблемы гораздо более серьезные, чем сбои в работе других файловых систем. А маленькая корневая файловая система менее подвержена разрушению в случае физических сбоев, и ее легче восстановить после сбоя.

В общем, из чтения текста стандарта можно  сделать вывод о том, что в  корневой файловой системе обязательно  должны целиком (то есть со всем их содержимым) располагаться каталоги /bin, /dev, /etc, /lib, /sbin и, возможно, /root.

Каталог /boot в силу аппаратных ограничений может оказаться необходимым разместить на отдельном разделе диска, расположенном целиком в пределах первых 1024 цилиндров загрузочного диска. Еще одной причиной размещения этого каталога в отдельной файловой системе может оказаться использование файловой системы ReiserFS: ядро не всегда может загружаться из раздела с такой файловой системой [2].

Остальные подкаталоги корневого каталога (home, mnt, opt, tmp, usr, var) могут размещаться в других файловых системах (на других разделах или дисках). Более того, в стандарте явно постулируется, что в каталогах /usr, /opt и /var размещаются такие файлы, которые могут располагаться в других разделах диска или в других файловых системах. Разработчики стандарта советуют в том случае, когда /var не может быть размещен в отдельном разделе диска, переместить каталог /var из корневого раздела в раздел с каталогом /usr. (Иногда это делается с целью уменьшения размера корневого раздела или когда в корневом разделе остается слишком мало места). Однако, /var нельзя делать ссылкой на /usr потому что это затрудняет разделение /usr и /var и может привести к конфликту имен. Лучше уж сделать /var ссылкой на/usr/var.

Что касается каталога /home, то его размещение в отдельном разделе диска в стандарте прямо не оговаривается, но как бы молча подразумевается. Впрочем, такое решение легко обосновать и без ссылок на стандарт. Причем оно не зависит от того, идет ли речь о персональном компьютере или о файловом, предположим, сервере. В обоснование этого вывода можно привести следующие доводы. Рано или поздно, но систему придется переустанавливать или обновлять. Если раздел с программным обеспечением при этом практически безболезненно можно отформатировать (поскольку дистрибутив Linux содержит, как правило, обновленные версии практически всех пакетов ПО и все будет заново поставлено), то домашние каталоги пользователей из дистрибутива не обновишь. Представьте, что ваш домашний каталог администратор почистит без вашего ведома. Так что уж лучше каталог /home не трогать. Поэтому стоит разместить домашние каталоги пользователей в отдельной файловой системе и после переустановки ОС заново смонтировать ее в каталог/home.

Что касается каталога /usr, то, если исходить из приведенной в стандарте рекомендации минимизации корневого раздела, его, вслед за /home, надо выносить в отдельный раздел. Дело в том, что если исключить домашние каталоги пользователей, то именно этот каталог по объему составляет более 90% объема всех каталогов. Это и не удивительно – в нем установлено все программное обеспечение.

Пожалуй, это все, что можно извлечь  из текста стандарта относительно разнесения каталогов по разным файловым системам. А уж решение о том, как именно разбить диск на разделы принимает  администратор каждой конкретной системы  самостоятельно (можно еще учесть рекомендации статей [2,3]).

В заключение хочется еще раз отметить, что  речь в статье идет только о требованиях  и рекомендациях стандартаFHS, причем стандарта, разработанного с ориентацией на операционные системы Linux и BSD. Даже конкретные дистрибутивы Linux далеко не во всем следуют этому стандарту. Например, в Red Hat Linux версий 7.3 и 8.0 каталог /etc/opt хотя и создан, но пуст, а конфигурационные каталоги пакетов размещаются непосредственно в /etc. Аналогичная ситуация с каталогом /opt - он тоже пуст, а все дополнительное ПО устанавливается, по-видимому, в /usr (по крайней мере то ПО, которое разворачивается из rpm-пакетов). Можно указать и другие отклонения от стандарта. Но все же в основном структура каталогов выдерживается в соответствии с FHS, и я надеюсь, что чем дальше, тем больше будет к нему приближаться. Так что знакомство с этим стандартом безусловно полезно всем пользователям Linux, а тем более разработчикам программного обеспечения для этой операционной системы.

Информация о работе Иерархия каталогов и файловых систем в Linux