LPI 101 (Часть четвёртая)

Материал из База знаний Linux.ру

Перейти к: навигация, поиск

Содержание

Перед тем как начать

Добро пожаловать в "Углубленное администрирование", последнюю из четырёх частей данной работы, разработанной для подготовки к сдаче экзамена LPI 101 (второй выпуск). В даном руководстве (четвёртой его части) мы расширим ваши знания и навыки по касающиеся углубленного администрированя Linux-систем, благодаря рассмотрению таких тем, как файловые системы в Linux, процесс загрузки системы, уровни запуска, квоты файловой системы и системные журналы.

Данное руководство особенно необходимо тем, кто станет заниматься системным администрированием впервые, посему мы рассмотрим множество низкоуровневых вещей, которые системные администраторы должны знать. Если же вы совсем новичок в Linux, то лучше всего начать с первой части и пройтись по всей серии статей вплоть до текущего момента. Для большинства аудитории данный матеирал будет внове, но, впрочем, даже опытные пользователи могут посчитать данное руководство хорошим способом для того, чтобы освежить основы навыков системного админстрирования и подготовиться к сдаче следующего экзамена LPI.

В конце данной серии статей (их планируется восемь, рассматривающие экзамены LPI 101 и 102) у вас появятся необходимые знания для того, чтобы стать системным администратором Linux-систем, и быть готовым к получению сертификата первого уровня LPIC от Linux Professional Institute, если того пожелаете.

Логотип LPI - торговая марка Linux Professional Institute.

Файловые системы, блочные устройства, разделы

Введение в блочные устройства

В данном разделе мы хорошенько рассмотрим различные аспекты связанные с дисками в Linux, включая файловые системы, разделы и блочные устройства. После знакомства с плюсами и минусами дисков и файловых систем, мы пройдёмся по процессу создания создания разделов и файловых систем в Linux.

Чтобы начать, я познакомлю вас с понятием "блочные устройства". Самый известный тип блочного устройства в Linux, представляет, наверное, жёсткий IDE-диск:

/dev/hda

Если же у вас имеется SCSI-диск, то тогда он будет обозначаться так:

/dev/sda

Уровни абстракции

Блочные устройства в Linux представляют собой абстракцию к интерфейсу диска. Пользовательские программы взаимодействуют с вашим диском не беспокоясь о драйверах для IDE, SCSI или к чему-либо ещё. Программы просто адресуют место на дисковом массиве используя набор смежных блоков с произвольным доступом размером в 512 килобайт.

Разделы

В Linux мы создаём файловые системы используя специальную команду mkfs (а также mke2fs, mkreiserfs и прочие) определяющая конкретное блочное устройство с помощью аргумента в командной строке.

Вообще, в теории мы можем использовать целое блочное устройство (представляясь единым диском) вроде /dev/hda или /dev/sda для размещения одной-единственной файловой системы, хотя на практике это не делается. Вместо этого, целое блочное устройство разделяется на более мелкие, куда более управляемые куски, именуемые разделами. Разделы создаются с помощью инструмента под названием fdisk, который используется для создания и редактирования таблицы разделов сохранённой на каждом диске. Таблица разделов определяет, как будет разделён весь диск целиком.

Знакомимся с fdisk

Теперь взглянем на таблицу разделов используя запущенный fdisk, указав нужное блочное устройство определяющее диск целиком в виде аргумента.

Примечание:

Существуют альтернативные интерфейсы для отображения таблицы разделов, такие как cfdisk, parted и partimage. Мы бы рекомендовали вам избегать использования cfdisk (несмотря на то, что пишет об этом справочная страница), так как в некоторых случаях она некорректно определяет геометрию дисков.

# fdisk /dev/hda
# fdisk /dev/sda
Важно знать!

Вам не следует сохранять или производить какие-либо изменения в таблица разделов диска, если любой из имеющихся разделов содержит хоть какие-то важные данные. В большинстве случаев такая операция приводит к потере данных.

Fdisk в подробностях

После запуска fdisk вы будете встречены строкой наподобие этой:

Command (m for help):

Нажмите клавишу "p", чтобы просмотреть текущую конфигурацию ваших дисков:

 
Command (m for help): p

Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1        14    105808+  83  Linux
/dev/hda2            15        49    264600   82  Linux swap
/dev/hda3            50        70    158760   83  Linux
/dev/hda4            71      2184  15981840    5  Extended
/dev/hda5            71       209   1050808+  83  Linux
/dev/hda6           210       348   1050808+  83  Linux
/dev/hda7           349       626   2101648+  83  Linux
/dev/hda8           627       904   2101648+  83  Linux
/dev/hda9           905      2184   9676768+  83  Linux

Command (m for help):

Указанный выше диск сконфигурирован для размещения семи файловых систем (каждая из которых обозначена как Linux) и двух разделов с файлами подкачки (обозначенных как "Linux swap").

Обзор блочных устройств и партиционирования

Просим обратить ваше внимание на название блочных устройств указанных в левой колонке, начинающихся на /dev/hda1 и заканчивающихся на /dev/hda9. На заре эпохи персональных компьютеров, программы для создания разделов позволяли создавать не более четырёх разделов (именуемых "основными"). Это было чересчур неудобно, поэтому существует обходной манёвр, называемый созданием расширенных разделов. Расширенные разделы весьма похожи по своему стройству на основные разделы, за тем исключением, что не имеют ограничения на четыре раздела. Кроме того, расширенные разделы могут содержать в себе любое количество логических разделов, эффективно обходя проблему с ограничением на четыре раздела.

Продолжая обзор партиционирования

Все разделы начинающиеся с hda5 и выше, являются логическими разделами. Цифры с 1 по 4 зарезервированыы для основных и расширенных разделов.

В нашем примере диски hda1 по hda3 являются основными разделами, а hda4 расширенным, который в свою очередь содержит логические разделы начиная с hda5 по hda9. Раздел под названием /dev/hda4 использовать для хранения данных напрямую нельзя. Это всего лишь контейнер, в который вложены разделы с hda5 по hda9.

Типы разделов

Кстати, как вы уже успели заметить, каждый раздел содержит идентификатор (обозначенный как Id), который называется "тип раздела". Когда вы создаёте новый раздел, то нужно обязательно быть уверенным в том, что тип раздела указан правильным образом. Номер 83 - это правильный тип раздела, указываемый для размещения файловых систем Linux, а 82 - верный номер типа для для обозначения разделов предназначенных для файлов подкачки. Вы можете установить тип раздела прямо в fdisk используя клавишу "t". Ядро Linux использует тип раздела, чтобы автоматически опознавать разделы с данными и файлами подкачки во время загрузки.

Использование fdisk для создания разделов

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

Важно знать!

Перед тем как проделать все необходимые действия, вам нужно позаботиться о наличии жёсткого диска на котором нет важных данных, так как все производимые действия сотрут все данные на вашем диске. Если вы незнакомы со всем этим, то вы можете просто почитать об этом, либо использовать загрузочный диск с Linux на тестовой системе без риска потерять данные.

Как должен выглядеть разбитый диск

После проведения процесса разбиения диска, ваша таблица разделов должна смотреться примерно так:

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1    *        1        14    105808+  83  Linux
/dev/hda2            15        81    506520   82  Linux swap
/dev/hda3            82      3876  28690200   83  Linux

Command (m for help):

Комментарии к примеру разбиения

В предложенной нами "конфигурации для новичков" имеется три раздела. Самый первый (/dev/hda1) начинающийся с самого начала диска и имеющего малый размер, называется загрузочным разделом. Загрузочный раздел предназначен для сохранения всех критичных данных необходимой для загрузки - информация загрузчика GRUB (если, конечно, вы будете использовать GRUB) и ваше ядро(а) Linux. Загрузочный раздел даст нам безопасное место для хранения всего необходимого связанного с загрузкой Linux. При ежедневном использовании ваш загрузочный раздел должен быть размонтированным в целях безопасности. Если вы настраиваете систему с SCSI-диском, то скорее всего, загрузочный раздел будет находиться на /dev/sda1.

Раньше рекомендовалось размещать загрузочные разделы (содержащие необходимую информацию для работы загрузчика) в начале диска. Сейчас этого делать необязательно, но эта полезная традиция пошла с тех времён, когда использовался загрузчик LILO, который на тот момент ещё не умел загружать ядро с расширенных разделов находящихся за границей 1024 цилиндра.

Второй раздел (/dev/sda2) используется для размещения подкачки. Ядро использует подкачку как виртуальную память, когда не хватает размера оперативной памяти. Этот раздел, обычно, не очень большой. Обычно, он занимает около 512 мегабайт. При настройке системы на SCSI диске, этот раздел будет именоваться /dev/sda2.

Третий раздел (/dev/sda3) самый большой и занимает всю оставшуюся часть диска. Данный раздел будет называться корневым разделом и будет использоваться для хранения файловой системы и всех данных на ней. На SCSI дисках, как вы уже догадались, он будет обозначен как /dev/sda3.

Приступаем к выполнению

Ну вот и хорошо. Теперь можно приступить к созданию разделов согласно примеру, который мы рассмотрели выше. во-первых, необходимо войти в fdisk используя команду fdisk /dev/hda или fdisk /dev/sda в зависимости от типа используемого диска. Затем нажмите клавишу "p", дабы просмотреть текущую конфигурацию разделов. На диске есть что-нибудь, что следовало бы сохранить? Если да, то лучше остановиться. Если вы продолжите действовать, то все данные будут потеряны.

Важно!

Следование инструкциям ниже может привести к тому, что все имеющиеся данные на диске будут стёрты! Если у вас есть на диске хоть что-то, то удостоверьтесь, что это не критичные данные, которые лучше не терять. Также убедитесь, что вы выбрали правильный диск, иначе можете по ошибке удалить данные не с того диска.

Проверка уже существующих разделов

Настало время удалить уже существующие разделы с данными. чтобы сделать это, нажмите клавишу "d" и клавишу "ввод". Будет запрошен номер раздела для удаления. Дабы удалить уже имеющийся раздел /dev/hda1, наберите следующее:

Command (m for help): d
Partition number (1-4): 1

Раздел подготовлен для процесса удаления. Теперь, если вы снова нажмёте клавишу "p", то вы не увидите его, но удаление не произойдёт пока вы не сохраните изменения. Если вы допустили ошибку или не хотите ничего удалять, то нажмите клавишу "q" и ничего потеряно не будет.

Теперь удостоверимся, что мы удалили все имеющиеся разделы с нашей системы. Для чего надо повторно нажать клавишу "p" для получения списка таблицы разделоа, а затем нажать клавишу "d", чтобы удалить то, что осталось. В конце-концов, должно получиться следующая картина:

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):

Создание загрузочного раздела

Как мы помним, таблица разделов на диске полностью чиста, и теперь мы полностью готовы к созданию загрузочного раздела. Чтобы выполнить это, нажмите клавишу "n", а затем клавишу "p", чтобы указать fdisk, что мы хотим создать основной раздел. Затем нажмите на клавишу 1, чтобы создать первый основной раздел. когда он запросит номер первого цилиндра, то жмите клавишу "ввод". Когда он запросит номер последнего цилидра, то напечатайте следующее: +100M, для создания раздела размером в 100 мегабайт. Вот вывод проделанных операций:

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +100M

Теперь, когда вы нажмёте клавишу "p", то должны увидеть вот такую распечатку:

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1        14    105808+  83  Linux

Создание раздела подкачки

Следующим шагом будет создание раздела для подкачки. Чтобы выполнить это, нажмите клавишу "n", а затем клавишу "p", чтобы указать fdisk, что мы хотим создать второй основной раздел, им будет /dev/hda2 в нашем случае. После запроса цилиндра нажмите клавишу "ввод". После запроса последнего цилиндра, наберите +512М, чтобы создать раздел размером 512 мегабайт. После того, как вы закончите, нажмите клавишу "t" и введите номер 82, чтобы обозначить тип раздела как "Linux Swap". После завершения всех шагов, нажмите клавишу "p", чтобы получить таблицу аналогичную этой:

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1        14    105808+  83  Linux
/dev/hda2            15        81    506520   82  Linux swap

Делаем раздел загрузочным

И, наконец, нам необходимо установить флаг "загрузочный" на наш загрузочный раздел и сохранить все сделанные изменения. Чтобы пометить /dev/hda1 как "загрузочный" раздел, требуется нажать клавишу "a" в меню, затем нажать клавишу "1" для указания номера раздела. Если после этого нажмёте клавишу "p", то увидите, что /dev/hda1 помечен символом "астериск", более известный вам как "*" в колонке Boot. чтобы сохранить все сделанные изменения, нажмите клавишу "w", а затем "ввод". Теперь ваши диски правильно сконфигугрированы для установки Linux.

Примечание: Если fdisk вас попросит об этом, то перезагрузитесь и проверьте, чтобы система правильно отображала новую конфигурацию разделов.

Расширенные и логические разделы

В примере выше мы создали единый корневой раздел, который будет в дальнейшем содержать файловую систему и все наши сохранённые данные. Это означает, что после установки Linux, она станет основной файловой системой и будет смонтирована в "/" с содержимым дерева каталогов и нашими файлами.

Хоть это наиболее распространённый вариант настройки системы, но существует и другой способ с которым вы, кстати, вполне можете быть знакомы. Этот способ использует несколько разделов для хранения файловых систем, и после чего связывается в единое дерево файловой системы. Например, вы можете разместить каталоги /home и /var на отдельных разделах.

Мы также можем сделать hda2 расширенным, а не основным разделом. Затем, мы можем создать логические разделы hda5, hda6, и hda7 (которые технически будут размещены внутри /dev/hda2) используемые для размещения каталогов /, /home, и /var в зависимости от вашего желания.

Узнать больше о подобных конфигурациях с различными файловыми системами изучив раздел со списком ресурсов на следующей странице.

Создание файловых систем

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

Linux поддерживает разнообразные файловые системы, каждая из которых имеет свои сильные и слабые стороны и обладает собственным набором характеристик отвечающих за их производительность. Мы рассмотрим в данной работе создание таких файловых систем, как ext2, ext3, XFS, JFS, и ReiserFS. Перед тем как создать файловую систему, произведём обзорный экскурс по файловым системам в Linux. Более подробно мы рассмотрим их в дальнейшем на страницах данного руководства.

Файловая система ext2

Ext2 - наиболее надёжная и испытанная файловая система, но в ней отсутствует поддержка журналирования метаданных, что означает весьма долгую по времени стандартную проверку во время запуска системы. Сейчас существует куда более широкий спектр файловых систем нового поколения, которые могут быть проверены на целостность очень быстро и они куда более предпочтительны для применения в обычной повседневной работе, в отличие от нежурналируемых аналогов. Журналируемые системы позволяют избежать длительной задержки при загрузке операционной системы, когда ваша файловая система находится в нерабочем состоянии.

Файловая система ext3

Ext3 - это журналируемая версия файловой системы ext2, обеспечивающая журналирование метаданных для быстрого восстановления в дополние к другим широким возможностям журналирования, таких как ведение упорядоченного журнала с данными для всего содержимого на диске. Ext3 очень хорошая и надёжная файловая система. Позволяет получить приемлемую производительность на разумных условиях. Так как она мало использует так называемые "деревья" внутри своей архитектуры, то она не очень хорошо масштабируется. В свою очередь это означает, что это не самый хороший выбор для больших файловых систем или ситуаций, когда требуется хранить большие файлы или множество больших файлов в одном каталоге. Но если не использовать её в ситуациях не предусмотренных архитектурой, то ext3 - отличная файловая система.

Одной их приятных особенностей ext3 является то, что все существующие системы с файловой системой ext2 могут быть легко обновлены до уровня ext3. Это позволяет обеспечить прозрачное обновление систем, где уже используется файловая система ext2.

Файловая система ReiserFS

ReiserFS - файловая система использующая B-деревья в своей архитектуре, что очень хорошо сказывается на скорости и надёжности в сравнении с ext2 и ext3, когда дело касается множества мелких файлов. Начиная с версии ядра 2.4.18 и выше, ReiserFS является крайне надёжной и крайне рекомендуемой системой как для случаев повседневного использования, так и для ситуаций, где требуется наличие файловых систем очень большого размера, где используется множество мелких файлов, файлов очень большого размера и каталогов, в которых имеются десятки тысяч файлов. Мы крайне рекомендуем использовать ReiserFS для не загрузочных разделов.

Файловая система XFS

XFS - это тоже файловая система с журналированием метаданных. Поставляется с солидным набором возможностей и оптимизирована для масштабируемости. Но мы рекомендуем её использовать только в случае наличия высокопроизводительных SCSI-дисков или хранилищ доступных по Fibre Channel и источников бесперебойного питания. Поскольку XFS крайне агрессивно кэширует передавемые данные в оперативной памяти, то неправильно спроектированные программы (относится к тем, кто не предпринимает мер во время записи на диск (хоть их и весьма мало) могут привести к потере изрядного куска данных во время внезапной остановки системы.

Файловая система JFS

JFS - высокопроизводительная журналируемая файловая система от IBM. Относительно недавно была подготовлена для промышленной эксплуатации, поэтому нет каких-либо данных относительно стабильности данной файловой системы.

Рекомендации по выбору файловых системам

Если вы ищете наиболее надёжную файловую систему, то используйте ext3. Если нужна высокопроизводительная файловая система для повседневных задач с поддержкой журналирования, то выбирайте ReiserFS. Впрочем, обе файловые системы являются зрелыми, совершенными и пригодными для типовых задач.

Основываясь на примерах выше, мы используем следующие команды, чтобы задействовать все файловые системы:

# mke2fs -j /dev/hda1
# mkswap /dev/hda2
# mkreiserfs /dev/hda3

Мы выбрали ext3 для загрузочного раздела /dev/hda1, так как это надёжная файловая система поддерживаемая всеми основными загрузчиками. Использование mkswap для задействования раздела для подкачки на /dev/hda2 - и так довольно очевидно. Для нашей основной файловой системе располагающейся на /dev/hda3 мы выбрали ReiserFS, так ак это надёжная журналируемая файловая система предлагающая превосходную производительность. А теперь пойдём и инициализируем файловые ситемы.

Создание раздела подкачки

Команда mkswap инициализирует раздел подкачки:

# mkswap /dev/hda2

В отличие от обычных файловых систем, разделы с подкачкой не монтируются. Вместо этого они включаются командой swapon:

# swapon /dev/hdc6

Сценарии запуска вашей системы сами позаботятся о том, чтобы автоматически включить раздел подкачки. Таким образом, команда swapon обычно нужна только для того, чтобы сразу же включить недавно добавленный раздел с подкачкой в вашу систему. Просмотреть полный список включённых разделов подкачки можно с помощью команды cat /proc/swaps.

Создание файловых системам с ext2, ext3 и ReiserFS

Для создания файловой системы с ext2 надо ввести команду mke2fs:

# mke2fs /dev/hda1

Если вам необходимо создать файловую систему ext3 вместе с журналом, то надо выполнить mke2fs -j:

# mke2fs /dev/hda3

Файловая система ReiserFS создаётся командой mkreiserfs:

# mkreiserfs /dev/hda3

Создание файловых систем XFS и JFS

Для создания XFS введите команду mkfs.xfs:

# mkfs.xfs /dev/hda3

Примечание. Возможно, вы захотите добавить парочку дополнительных флагов при выполнении команды mkfs.xfs: -d agcount=3 -l size=32m. Команда -d agcount=3 уменьшает количество размещённых групп. XFS будет требовать, как минимум, одну группу на 4 гигабайта пространства, поэтому, например, для раздела размеров в 20Гб вам потребуется значение agcount не менее 5. Команда l size=32m увеличивает размер журнала до 32 мегабайт, что хорошо сказывается на производительности.

JFS создаётся командой mkfs.jfs:

# mkfs.jfs /dev/hda3

Монтирование файловых систем

После того, как файловая система была создана её можно смонтировать используя команду mount:

# mount /dev/hda3 /mnt

Для монтирования файловой системы необходимо указать раздел с блочным устройством и "точку монтирования" в качестве второго аргумента. Новая файловая система можно сказать "вырастет" в заданной точке монтирования. Существует так же эффект "скрытия" файлов, которые в этот момент находились в корневом каталоге директории /mnt на родительской файловой системе. позднее, когда файловая система будет отмонтирована, файлы появятся снова. После выполнения команды монтирования и копирования всех новых файлы внутри каталога /mnt с файловой системой ReiserFS будут сохранены должным образом.

Давайте заодно смонтируем наш загрузочный раздел в /mnt. Проделывается следующим образом:

# mkdir /mnt/boot
# mount /dev/hda1 /mnt/boot

Теперь наш загрузочный раздел доступен в катлоге /mnt/boot. Если мы создадим файлы в этом каталоге, то они будут сохранены на разделе с ext3, который физически располагается на диске /dev/hda1. Если же мы создадим файл внутри каталога /mnt, но не /mnt/boot то они сохранятся на разделе с ReiserFS, который располагается на /dev/hda3. Файлы созданные вне каталога /mnt не будут сохранены ни на одном из указанных разделов, кроме раздела на основной системе или загрузочном диске.

Чтобы узнать какие файловые системы у нас смонтированы необходимо выполнить команду mount. Для примера посмотрим вывод команды на нашей текущей системе, в которой разделе сконфигурированы указанным выше образом:

/dev/root on / type reiserfs (rw,noatime)
none on /dev type devfs (rw)
proc on /proc type proc (rw)
tmpfs on /dev/shm type tmpfs (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hde1 on /boot type ext3 (rw,noatime)

Нечто подобное вы уже, наверное ,видели выполняя команду cat /proc/mounts. Корневая файловая система /dev/hda3 смонтирована ядром автоматически в процессе загрузки и ему дано символическое имя /dev/hda3. В нашей системе оба раздела /dev/hda и /dev/root находятся на одном и том же блочном устройстве.

# ls -l /dev/root
lr-xr-xr-x   1 root   root   33 Mar 26 20:39 /dev/root -> ide/host0/bus0/target0/lun0/part3

# ls -l /dev/hda3
lr-xr-xr-x   1 root   root   33 Mar 26 20:39 /dev/hde3 -> ide/host0/bus0/target0/lun0/part3

Чуть больше интересной информации про монтирование

Так что же это за файл такой /dev/ide/host0....? Системы вроде моей, использующие специальную файловую систему devfs для управления устройствами располагающимися в /dev, имеют гораздо более длинные официальные имена, чем более старые Linux-системы. К примеру, /dev/ide/host0/bus1/target0/lun0/part7 это официальное имя для /dev/hdc7, а /dev/hdc7 в свою очередь является символической ссылкой на блочное устройство. Вы и сами можете определить использование devfs вашей системой проверив наличие файла /dev/.devfsd. Если он на месте, то devfs активна.

При использовании команды монтирования, операционная система сама пытается определить тип файловой системы. но иногда это не срабатывает и приходится указывать определённый тип файловой системы вручную, используя опцию -t как здесь:

# mount /dev/hda1 /mnt/boot -t ext3

или

# mount /dev/hda3 /mnt -t reiserfs

Опции монтирования

Существует возможность для задания различных атрибутов для монтируемых файловых систем путём задания различных опций монтирования. Для примера можно смонтировать ФС в режиме "только для чтения" используя опцию ro:

# mount /dev/hdc6 /mnt -o ro

Смонтировав /dev/hdc6 в режиме "только для чтения" вы не сможете изменить какие-либо файлы в /mnt - только смотреть. Если ваша файловая система находится в режиме "чтение/запись", то её необходимо "перемонтировать" и переключить в режим "только для чтения". можно использовать опцию "remount", чтобы не проводить операцию по монтирования/размонтированию два раза:

# mount /mnt -o remount,ro

Обратите внимание на то, что мы не указывали блочное устройство для смонтированного раздела, поскольку оно уже было смонтировано и программа mount знала, что /mnt используется с /dev/hdc6. чтоюы снова иметь возможность записи, проделываем следующее:

# mount /mnt -o remount,rw

Ещё помните о том, что команда перемонтирования не сработает, если хоть один процесс в этот момент обращается к любому файлу или каталогу в /mnt. Дабы познакомиться с опциями монтирования в Linux более подробно, просмотрите man mount.

Знакомимся с файлом fstab

Итак, мы рассмотрели разбиение на разделы и монтирование файловых систем вручную используя загрузочный диск. Но однажды установив Linux, как мы сможем настроить систему, чтобы она монтировала правильную файловую систему в нужное время? Например, мы установим Gentoo Linux на указанную выше конфигурацию. Откуда система узнает, что корневой раздел надо искать на /dev/hda3? А остальные файловые системы вроде раздела подкачки, необходимые во время загрузки системы как узнают, которая из них потребуется?

Допустим, что ядро Linux скажет какая корневая файловая система используется загрузчиком, и мы ещё рассмотрим тему загрузчиков в данном руководстве. А для всего остального в Linux есть такой файл, называемый /etc/fstab, говорящий о том, какие файловые системы доступны для монтирования. Настало время взглянуть на него.

Пример содержимого fstab

Давайте взглянем на примерное содержимое /etc/fstab:

  <fs> <mountpoint> <type>    <opts>            <dump/pass>

/dev/hda1       /boot           ext3            noauto,noatime          1 1
/dev/hda3       /               reiserfs        noatime                 0 0
/dev/hda2       none            swap            sw                      0 0
/dev/cdrom      /mnt/cdrom      iso9660         noauto,ro,user          0 0
# /proc should always be enabled
proc            /proc           proc            defaults                0 0

Каждая незакомментированная строка в примере выше - это указание на нужный раздел блочного устройства, точку монтирования, тип файловой системы и опции необходимые для монтирования, а также два числовых поля. Первое числовое поле необходимо для команды dump, необходимой для резервного копирования. Если вы не планируете использовать dump, то можно спокойно игнорировать это поле. Последнее поле используется программой для проверки целостности диска fsck, указывающее порядок проверки разделов при загрузке системы. Мы также затронем fsck через какое-то время.

Взгляните на строку, где указана /dev/hda1. Вы увидите, что /dev/hda1 это раздел с ext3, который монтируется в точку монтирования /boot. Давайте рассмотрим опции монтирования /boot в колонке opts. Опция noauto сообщает нам, что не требуется автоматическое монтирование во время процесса загрузки. Без данной опции /boot будет монтироваться автоматически во время запуска системы.

Обратите внимание на опцию noatime, которая отключает режим записи информации о последнем времени доступа к диску. Данная информация обычно не требуется, посему отключение этой опции положительно сказывается на производительности дисковой подсистемы.

Теперь внимательно изучите строку с разделом /proc и обратите внимание на опции используемые по умолчанию. Используёте умолчания если вы хотите смонтировать файловую систему в стандартной точке монтирования. Поскольку /etc/fstab имеет несколько полей, то нельзя просто так взять и оставить поле с опциями пустым.

А теперь прошу обратить внимание на поле с /dev/hda2. Данная строка определяет /dev/hda2 как раздел для подкачки. Так как этот раздел не монтируется как обычная файловая система, поэтому в точке монтирования указано значение none. Благодаря файлу fstab, раздел /dev/hda2 будет подключен автоматически во время загрузки.

В файле fstab содержится запись /dev/cdrom наподобие указанной, необходимая для более простого монтирования компакт-дисков. Вместо ввода вот такой конструкции:

# mount -t iso9660 /dev/cdrom /mnt/cdrom -o ro

Вам нужно будет вводить только это:

# mount /dev/cdrom

Таким образом, использование файла /etc/fstab позволяет нам по желанию использовать дополнительную опцию user. Данная опция монтирования говорит системе о том, что надо разрешить монтирование указанной файловой системы от лица любого пользователя. Это бывает полезно для устойств вроде приводов компакт-дисков. Без данной опции монтирования в файле fstab, только суперпользователь root имеет право подключать компакт-диски к системе.

Размонтирование файловых систем

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

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

# umount /mnt

или так:

# umount /dev/hda3

После отмонтирования, файлы в /mnt "спрятанные" на файловой системе смонтированной до этого, снова появятся.

Знакомимся с программой fsck.

Если ваша система дала сбой или заблокирована по каким-то причинам, то она не сможет правильно отмонтировать файловые системы имеющиеся в ней. Когда это случается, файловая система находится в нецелостном (непредсказуемом) состоянии. При перезагрузке, программа fsck обнаружит такие неверно отмонтированные файловые системы и захочет провести проверку целостности в соответствии с записями об файловых системах указанных в /etc/fstab.

Крайне важно!

Файловые системы проверяемые fsck должны иметь ненулевое значение поля "проход" (последний столбец). Обычно, для корневой файловой системы устанавливается значение прохода равным 1, говорящее о том, что данная файловая система будет проверена первой. Для всех остальных файловых систем, которые должны проверяться при загрузке должно быть установлено значение равное 2 и выше. Для некоторых журналируемых файловых систем вроде ReiserFS лучше указывать значение прохода равным 0, так как журнал (а не внешней утилиты fsck) позаботится о целостности файловой системы.

В некоторых случаях после перезагрузки будет обнаружено, что fsck не может отремонтировать полностью или частично повреждённую файловую систему. В этом случае, вам необходимо перевести систему в однопользовательский режим и запустить fsck вручную, указав необходимое блочное устройство в качестве аргумента. Программа fsck проведёт ремонт и может запросить об исправлении некоторых обнаруженных дефектов. Как правило, вам следует отвечать "y" (то есть yes) на все задаваемые fsck вопросы.

Проблемы использования fsck

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

Для решения этой проблемы был спроектирован новый тип файловых систем, называемый журналируемой файловой системой. Журналируемые файловые системы пишут на диск специальный журнал обо всех последних сделанных изменениях в структуре метаданных. В случае сбоя драйвер файловой системы смотрит в первую очередь именно его. Поскольку журнал содержит точное количество последних сделанных изменений на диске, то только эти части нуждаются в проверке на ошибки. Благодаря этому отличию, проверка ждурналируемых файловых систем отнимает секунды вне зависимости от размера файловой системы. Именно по этой причине такие файловые системы весьма популярны в сообществе пользователей Linux. Для большей информации по ним рекомендуем почитать "Обзор файловых систем в Funtoo, часть первая. Журналирование и ReiserFS"

Ну и двайте пробежимся по основным используемым файловым системам в Linux вместе со связанными с ними командами и опциями.

Файловая система ext2

Файловая система ext2 долгие годы была стандартом в Linux. Она предлагает хорошую производительность для большинства приложений, но не имеет никаких возможностей для журналирования. Что делает её непригодной для очень больших по размеру файловых систем, так как проверка в fsck будет отнимать много времени. Вдовесок к этому, ext2 имеет ряд внутренних ограничений, вроде ограниченного количества одновременно удерживаемых инодов. Тем не менее, ext2 самая испытанная и надёжная из всех не журналируемых файловых систем.

  • Ядро: версии 2.0 и выше
  • Журналирование: Нет
  • Команда mkfs: mke2fs
  • Пример команды mkfs: mke2fs /dev/hdc7
  • Связанные с ней команды: debugfs, tune2fs, chattr
  • Опция связаная с производительностью: noatime

Файловая система ext3

Файловая система ext3 имеет тот же формат данных, что и ext2, но с добавлением возможностей журналирования. Все системы использующие ext3 имеют широкие возможности связанные с журналированием, включая поддержку не только журналирования метаданных, но и упорядоченное журналирование (режим по умолчанию), режим полного журналирования данных+метаданных. Эти особые режимы помогают быть уверенным в целостности данных, не только благодаря коротким проверкам файловых систем и другим возможностям журналов. Именно по этой причине ext3 является лучшей файловой системой в случае, когда обеспечение целостности данных - основная задача. Однако, эти возможности для целостности данных сильно влияют на производительность. К тому же ext3 использует тот же формат, что и ext2, поэтому испытывает те же проблемы с масштабируемостью, как и её не журналируемая сестра. Так что если вы ищете хорошую файловую систему для повседневных задач, то ext3 - лучший выбор, поскольку весьма надёжна.

  • Ядро: версия 2.4.16 и выше
  • Журналирование: метаданные, упорядоченная запись данных, полное журналирование данных+метаданных
  • Команда mkfs: mke2fs -j
  • Пример команды mkfs: mke2fs -j /dev/hdc7
  • Связанные с ней команды: debugfs, tune2fs, chattr
  • Опция связаная с производительностью: noatime
  • Другие поции монтирования:
    • data=writeback (отключить журнал)
    • data=ordered (используется по умолчанию, журнал метаданных и обычных данных записываются на диск вместе с метаданными)
    • data=journal (полное журналирование всех данных для обеспечение целостности данных на диске и метаданных. Сильно снижает производительность операций записи.)
  • Ресурсы по ext3:

Файловая система ReiserFS

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

Файловая система XFS

XFS - файловая система промышленного уровня спортированная в Linux компанией SGI. XFS - богатая возможностями, масштабируемая, журналируемая файловая система, являющаяся хорошим выбором для очень высоконадёжного оборудования (в связи с большим кэшированием данных в оперативной памяти) и плохой выбор для дешёвых систем.

  • Ядро: версия 2.5.34 и выше. Для серий ядер 2.4 требуется патч.
  • Журналирование: метаданные
  • Команда mkfs: mkfs.xfs
  • Пример команды mkfs: mkfs.xfs /dev/hdc7
  • Опция связаная с производительностью: noatime
  • Ресурсы про XFS:

Файловая система JFS

JFS - высокопроизводительная файловая система спортированная в Linux компанией IBM. JFS используется для серверов корпоративного уровня и разработана для высокопроизводтельных приложений. Узнать больше о JFS можно на сайте проекта JFS.

Файловая система VFAT

Файловая система VFAT - это, на самом деле не файловая система для хранения данных в Linux. По сути, это DOS-совместимый драйвер файловой системы предназначенный для монтирования и обмена данными с DOS и Windows-системами. Драйвер для него имеется в штатной поставке с ядра Linux.

Загрузка операционной системы

О данном разделе

Данный раздел познакомит вас с процедурой загрузки Linux. Мы также рассмотрим концепцию загрузчика, настройку ядра для загрузки, и как проверять журнал загрузок на ошибки.

MBR aka Master Boot Record

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

+----------------+
|      MBR       |
+----------------+
|    Раздел 1:   |
|Корень Linux (/)|
|    содержит    |
|   ядро Linux   |
|    и систему.  |
+----------------+
|   Раздел 2:    |
|   подкачка     |
+----------------+
|    Раздел 3:   |
|   Windows 3.0  |
| (последний раз |
|работала в 1992)|
+----------------+

Во-первых, BIOS компьютера читает первые несколько секторов с вашего жёсткого диска. Данные секторы содержат очень маленькую программу именуемую главной загрузочной записью (Master Boot Record), или MBR как её ещё называют. MBR хранит месторасположение ядра Linux на жёстком диске (первый раздел в нашем примере), затем загружает ядро в память и запускает его.

Процесс загрузки ядра

Следующее, что вы увидите (хотя оно может промелькнуть весьма быстро) это строка похожая на нечто такое:

Linux version 2.4.16 (root@time.flatmonk.org) (gcc version 2.95.3 20010315 (release)) #1 Sat Jan 12 19:23:04 EST 2002

Данная строка выводится ядром в момент старта. Первая часть строки - номер версии ядра, затем идёт идентификатор пользователя собравшего ядро (обычно, это root), версия компилятора которым это всё было собрано, и отметка времени окончания сборки.

Затем последует уйма строк вывода ядра, которая покажет какое оборудование у вас в системе стоит: процессор, шина PCI, дисковый контроллер, диски, последовательные порты, флоппи-приводы, устройства использующие шину USB, сетевые адаптеры, звуковые карты, и многое другое сообщит вам о своём статусе.

/sbin/init

Когда ядро закончит загружаться, запустится программа под названием init. Эта программа работает до тех пор, пока система не выключится. Ей всегда назначается идентификатор процесса равный 1. Что, собственно, и видно:

$ ps --pid 1
PID TTY          TIME CMD
  1 ?        00:00:04 init.system

Программа init запускается в большинстве дистрибутивов серией специальных сценариев (скриптов). Обычно, эти скрипты живут в /etc/rc.d/init.d или /etc/init.d, и они обеспечивают запуск таких служб как имя системы, проверка файловых систем на ошибки, монтирование дополнительных файловых систем, включение сети, запуск служб печати и тому подобное. Когда все скрипты выполнятся, программа init вызовет другуб программу, именуемую getty, которая отобразит вам приглашение для входа в систему и вы можете приступать к работе!

Копнём поглубже: LILO

Теперь, поскольку мы прошлись по процессу загрузки Linux, настало время посмотреть поближе на первую часть - MBR и загрузку ядра. Обслуживанием MBR занимается такая вещь как "загрузчик". Два наиболее популярных загрузчика для систем с архитектурой x86 это LILO (LInux LOader) и GRUB (GRand Universal Bootloader).

Из этих двух, LILO наиболее старый и простой загрузчик. О существовании LILO говорится при загрузке, показом короткой строчки приглашения "LILO boot:". Учтите, что вам может потребоваться зажать клавишу левый shift во время загрузки, чтобы увидеть приглашение. Связано это с тем, что чаще всего система настроена таким образом, что пропускает это всё без остановки.

Приглашение LILO весьма простое и без украшательств, но если вы нажмёте клавишу Tab, то увидите список доступных вам ядер (или операционных систем) для загрузки. Чаще всего пункт в списке всего один. Вы можете загрузиться набрав его название и нажав клавишу "ввод". Или просто нажмите клавишу "ввод", тогда по умолчанию загрузится первый пункт меню.

Использование LILO

Может случиться такая ситуация, когда вы хаотите выполунить какую-нибудь опцию необходимую при загрузке системы. Наиболее частые опции: root= - указывающая месторасположение другого корневого раздела, init= - указывающая на расположение другой программы инициализации (init=/bin/sh, например, для восстановления неправильно настроенной системы), и mem= для указания количества памяти в системе (например, опция mem=512М необходима в случае, если Linux видит только 128Мб ОЗУ). Вы можете ввести все эти параметры в строке приглашения LILO:

LILO boot: linux root=/dev/hdb2 init=/bin/sh mem=512M

Если вам потребуется указать опции командной строки для постоянного использования, вы можете рассмотреть их добавление в файл /etc/lilo.conf. Описание формата файла имеется в man-странице lilo.conf(5).

Важное замечание по LILO

Перед тем как перейти к загрузчику GRUB, хотелось бы сделать важное отступление касающееся LILO. Перед тем, как сделать изменения в файле /etc/lilo.conf или установить новое ядро, вы обязательно должны запустить программу lilo. Эта программа перепишет MBR на основе сделанных изменений, вплоть до абсолютного пути к ядру системы. В примере ниже мы специально использовали опцию -v для наглядности:

# lilo -v
LILO version 21.4-4, Copyright (C) 1992-1998 Werner Almesberger
'lba32' extensions Copyright (C) 1999,2000 John Coffman

Reading boot sector from /dev/hda
Merging with /boot/boot.b
Mapping message file /boot/message
Boot image: /boot/vmlinuz-2.2.16-22
Added linux *
/boot/boot.0300 exists - no backup copy made.
Writing boot sector.

Копая глубже: GRUB-legacy

GRUB-legacy - это другой популярный загрузчик в Linux. GRUB-legacy поддерживает куда больше операционных систем и предоставляет больше возможностей, вроде парольной защиты загрузочного меню и более простого управления.

Обычно, GRUB-legacy устанавливается в с помощью команды grub-install или grub-legacy-install. Уже установленное, меню GRUB-legacy легко управляется с помощью редактирования файла /boot/grub/grub.conf. Рассмотрение обеих задачи выходят далеко за рамки этого документа, поэтому вам необходимо прочитать info-странцу GRUB-legacy перед тем, как попробовать установить или управлять им.

Использование GRUB-legacy

Для передачи паметров ядру, достаточно нажать клавишу "e" на клавиатуре в меню загрузки. Это даст вам возможность редактирования (очередным нажатием клавиши "e") имени ядраи параметров загрузки.После окончания редактирования нажмите "ввод", а затем "b" чтобы продолжить загрузку с вашими изменениями.

Смотрим dmesg

Сообщения возникающие при загрузке Linux и работе скриптов инициализации прокручивается очень быстро. Вы можете заметить сообщение об ошибке, но вряд ли успеете подробно разобрать его. В таком случае нам потребуется заглянуть в пару мест после загрузки системы и выяснить, что не так (и, надеюсь, решить как это исправить).

Если ошибка возникает во время загрузки ядра и опроса устройств, вам необходимо запросить копию загрузки журнала используя команду dmesg:

#dmesg
Linux version 2.4.16 (root@time.flatmonk.org) (gcc version 2.95.3 20010315 (release)) #1 Sat Jan 12 19:23:04 EST 2002

Э-э-эй! А мы ведь знаем, что это за строчка. Это ведь самая первая строка возникающая при загрузке Linux. Более того, если вы поместите вывод dmesg в просмотрщик, то сможете построчно посмотреть то, что ядро выводит на экран во время загрузки, плюс все сообщения ядра выводимые на тот момент в консоль.

/var/log/messages

Второе место куда необходимо идти за информацией, это файл /var/log/messages. Этот файл пишется системным демоном syslog, который принимает ввод из библиотек, демонов и ядра. Каждое сообщение в этом файле имеет пометку о времени. Этот файл - хорошее место для начала разбора ошибок произошедших во время работы скриптов инициализации при загрузке. Вот, например, вывод нескольких сообщений с сервера имён:

# grep named /var/log/messages | tail -3
Jan 12 20:17:41 time /usr/sbin/named[350]: listening on IPv4 interface lo, 127.0.0.1#53
Jan 12 20:17:41 time /usr/sbin/named[350]: listening on IPv4 interface eth0, 10.0.0.1#53
Jan 12 20:17:41 time /usr/sbin/named[350]: running

Дополнительная информация

Дополнительная информация относящаяся к данному разделу может быть найдена здесь:

Уровни запуска

Однопользовательский режим

Возвращаясь к содержимому раздела рассказывающеи о загрузчиках, мы вспоминаем о возможности передачи параметров ядру. Одним из таких наиболее часто используемых параметров является параметр "s", приводящий к тому, что система загружается однопользовательском режиме. Этот режим позволяет смонтировать только корневую файловую систему с минимальным набором сценариев инициализации, а также запустить оболочку отличную от необходимой для входа в систему. Кроме всего прочего, в этом режиме не включается сеть, что исключает влияние внешних факторов на работу системы.

Разбираемся с однопользовательским режимом

Так что же за работа должна выполняться в таком состоянии системы? Чтобы ответить на этот вопрос, необходимо учесть огроменную разницу между Windows и Linux. Windows изначально была разработана для работы в консоли не более одного человека в данный момент времени. И она эффективно использует этот "однопользовательский" режим. С другой стороны, Linux чаще всего использовался для обслуживания сетевых приложений, предоставлял оболочку или X-сессию удалённым сетевым пользователям. Все эти дополнительные переменные весьма нежелательны, когда вы захотите провести сеанс обслуживания системы, вроде восстановления данных из резервной копии, модификации файловой системы, обновления системы с компакт-диска или чего-то подобного. Вот для этих случаев и необходимо использовать однопользовательский режим.

Уровни запуска

Вообще-то совсем нет необходимости в перезагрзуке машины для того, чтобы попасть в однопользовательский режим. Существует программа init, занимающаяся тем, что обеспечивает работу текущего "уровня запуска" системы. стандартные уровни запуска в Linux перечислены следующим образом:

  • 0: Остановить компьютер
  • 1: или s: Однопользовательский режим
  • 2: Многопользовательский режим, без сети
  • 3: Многопользовательский режим, текстовая консоль
  • 4: Многопользовательский режим, графическая консоль
  • 5: аналогично 4
  • 6: Перезагрузка компьютера

Данные уровни запуска сильно варьируются от дистрибутива к дистрибутиву, так что посмотрите этот момент в документации к вашему дистрибутиву.

Команда telinit

Чтобы перейти в однопользовательский режим, необходимо вызвать команду telinit. Вот как надо инструктировать telinit для смены уровня запуска:

# telinit 1

Как видно из примера выше, таким же образом мы можем потушить или перезагрузить компьютер. Команда telinit 0 выключит компьютер, а telinit 6 его перезагрузит. Когда вы используете telinit, то она запускает сценарий для запуска или остановки соответствующих служб.

Этикет при использовании уровней запуска

Однако, прошу заметить, что это весьма бесцеремонно так обходиться с пользователями, которые в этот момент могут работать в системе (и которые будут потом весьма злы на вас). Команда shutdown позволит вам обеспечить более разумный способ смены уровня запуска предупреждая при этом пользователей. Аналогичная возможность есть у команды kill, позволяющая отсылать различные сигналы процессу. Команда shutdown может быть использована для полного останова системы, перезагрузки, или перехода в однопользовательский режим. К примеру, вот как можно перейти в однопользовательский режим в течение пяти минут:

# shutdown 5
Broadcast message from root (pts/2) (Tue Jan 15 19:40:02 2002):
The system is going DOWN to maintenance mode in 5 minutes!

Если вы нажмёте сочетание клавиш Control-C, то вы остановите переход в однопользовательский режим. Сообщение выше появится на всех терминалах в системе, так что у пользователей будет разумное количество времени, чтобы сохранить свою работу и выйти из системы (Хотя тут ещё можно поспорить, является или не является 5 минут достаточным для этого).

Аргументы "now" и halt.

Если вы единственный пользователь этой системы, то вместо указания времени можно использовать аргумент now, как это сделано в примере ниже:

# shutdown -r now

Возможностей для нажатия Control-C не будет в этом случае. Система пойдёт выключаться сразу же. И, наконец, опция для полного останова системы:

# shutdown -h 1
Broadcast message from root (pts/2) (Tue Jan 15 19:50:58 2002):
The system is going DOWN for system halt in 1 minute!

Уровень запуска по умолчанию

Как вы уже смогли разобраться, программа init весьма важна для работы системы. Сконфигурировать программу init можно с помощью файла /etc/inittab, который детально описывается в man-странице inittab(5). Но всё же приведём одну важную строчку оттуда:

# grep ^id: /etc/inittab
id:3:initdefault:

На моей системе уровень запуска 3 выставлен по умолчанию. Будет весьма полезным изменить это значение, если вы хотите загружаться сразу же в графическом режиме (обычно, это уровни 4 и 5). Чтобы изменить его, просто отредактируйте файл сменив значение в этой строке. Но будьте осторожными! Если вы измените что-то не то, то вам придётся проворачивать трюк с init=/bin/sh описываемый ранее.

Дополнительная информация

Дополнительная информация касающаяся этого раздела может быть найдена здесь:

Квотирование файловой системы

Введение в квотирование

Квотирование - это возможность предназначенная для отслеживания использования места пользователем или группой. Это весьма полезно для предотвращения ситуаций, когда один пользователь или группа захватывают чрезмерное пространство на файловой системе или полного занятия места. Квоты могут устанавливаться и управляться только суперпользователем root. В этом разделе я опишу как настроить ковотирование и эффективно всем этим управлять.

Поддержка ядром Linux

Квоты - возможность файловой системы. Поэтому нам необходимо, чтобы она была включена в ядре. Дабы удостовериться, что квотирование поддерживается вашим ядром, необходимо сделать следующее используя команду grep:

# cd /usr/src/linux
# grep -i quota .config
CONFIG_QUOTA=y
CONFIG_XFS_QUOTA=y

Если же данная команда вернёт вам что-то менее подходящее (вроде значения того, что CONFIG_QUOTA не установлена), то вам будет необходимо пересобрать ядро с поддержкой квотирования. Процесс несложный, но выходит за рамки рассмотрения в данной статье. Если вы не знакомы с шагами необходимыми для сборки и установки нового ядра, то вам, наверное следует почитать данное руководство.

Поддержка файловой системой

Перед тем как погрузиться в управление квотами, пожалуйста, примите к сведению, что квотирование не поддерживается ядрами Linux серии 2.4 в полном объёме. Данные проблемы касаются поддержки квотирования в файловых системах ext2 и ext3, а ReiserFS их вообще не поддерживает. Поэтому за основу мы возьмём файловую систему XFS, где квоты поддерживаются должным образом.

Конфигурирование квот

Для того, чтобы начать конфигурирование квот в системе, необходимо отредактировать файл /etc/fstab, дабы квоты сработали на указанных файловых системах:

# grep quota /etc/fstab
/usr/users   /mnt/hdc1    xfs    usrquota,grpquota,noauto   0 0
# mount /usr/users

Обратите внимание, что опции usrquota и grpquota не всегда включают поддержку квот. Дабы удостовериться, что всё работает необходимо воспользоваться командой quotaon:

# quotaon /usr/users

И в нагрузку дам команду, которая отключает квотирование, если вы захотите от него отказаться в будущем:

# quotaoff /usr/users

Итак, начиная с этого моменте прежде чем пробовать какие-то команды, убедитесь, что квотирование включено и работает.

Команда quota

Команда quota отображает степень заполнения диска пользователя, для всех смонтированных файловых систем. Опция -v показывает список файловых систем, где включено квотирование, но не указывает том, отведённый пользователю:

# quota -v

Disk quotas for user root (uid 0): 
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
 /dev/hdc1       0       0       0               3       0       0        

В первой колонке, обозначенной как blocks, отображается сколько пространства используется пользователем root, на каждой указанной в списке файловой системе. Следующие колонки quota и limit указывают на лимиты имеющиеся на текущем диске. Разницу между квотой и лимитом, а также значение колонки grace мы разберём позднее. Колонка files показывает сколько файлов принадлежит пользователю root на конкретной файловой системе. Следующие за ней колонки quota и limit относятся к ограничениям на количество файлов.

Просмотр квот

Любой пользователь может использовать команду quota для просмотра своего отчёта о доступных квотах как в предыдущем примере. Но только суперпользователь root имеет право просматривать информацию о квотах у всех остальных пользователей и групп. К примеру, мы говорим ,что у нас есть некая файловая система /dev/hdc1 смонтированная в /usr/users, с имеющимися там двумя пользователями jane и john. Для начала, давайте посмотрим использование диска Джейн и наложенные туда ограничения:

# quota -v jane

Disk quotas for user jane (uid 1003): 
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
 /dev/hdc1    4100       0       0               6       0       0

В данном случае мы видим, что у Джейн квоты установлены в нулевое значение, что означает отсутствие ограничений.

Команда edquota

А теперь давайте зададим пользователю jane некую квоту. Мы будем проделывать это с помощью команды edquota. Прежде чем начать, взглянем сколько же свободного места есть в /usr/users:

# df /usr/users

Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hdc1               610048      4276    605772   1% /usr/users

Это не очень большая файловая система. Всего каких-то 600 мегабайт. Будет разумно, если мы дадим Джейн квоту, чтобы она не смогла использовать больше, чем ей выделено. Когда вы запускаете команду edquota, то появляется специальный временный файл для каждого пользователя или группы указанного в командной строке.

Команда edquota запускает редактор, который включает, добавляет или модифицирует квоты через этот временный файл:

 
# edquota jane

Disk quotas for user jane (uid 1003):
Filesystem         blocks       soft       hard     inodes     soft     hard
 /dev/hdc1           4100          0          0          6        0        0

Аналогично выводу команды quota, рассмотренному выше, в колонках "blocks" и "inodes" указывается количество место и файлов используемых пользователем jane. Вы не можете редактировать количество блоков или инодов. Любое изменение будет отменяться системой. колонки "soft" и "hard" показывают размер квот Джейн, которые, как мы снова видим, являются неограниченными (как и тогда, число 0 означает отсутствие квот).

Разбираемся с edquota

Так называемое "мягкое" ограничение - это максимальное количество использованного дискового пространства выделенное пользователю Джейн на указанной файловой системе (другими словами, её квота). Если Джейн использует больше места, чем выделено ей согласно "мягкому" ограничению, то она получит письмо по электронной почте о превышении размера квоты. Так называемое "жёсткое" ограничение обозначает абсолютный лимит дискового пространства, который не может быть исчерпан. Если Джейн попытается использовать места больше, чем положено по этому лимиту, то она получит сообщение об ошибке "Дисковая квота исчерпана" и не сможет закончить начатую операцию.

Производим изменения

Итак, мы поменяли значение "мягкого" и "жёсткого" ограничения для пользователя Джейн и решили сохранить изменения в файл:

 
Disk quotas for user jane (uid 1003):
Filesystem         blocks       soft       hard     inodes     soft     hard
 /dev/hdc1           4100      10000      11500          6     2000     2500

Запускаем команду quota, чтобы проверить изменения:

# quota jane

Disk quotas for user jane (uid 1003): 
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
 /dev/hdc1    4100   10000   11500               6    2000    2500

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

Как вы помните, на этой файловой системе у нас ещё имеется пользователь Джон. Если мы желаем задать Джону те же квоты, что и Джейн, то необходимо использовать опцию -p с командой edquota, которая использует настройки Джейн в качестве прототипа для всех указанных пользователей. Это очень простой способ для задания квот группе пользователей:

# edquota -p jane john
# quota john

Disk quotas for user john (uid 1003): 
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
 /dev/hdc1       0   10000   11500               1    2000    2500        

Групповые ограничения

Мы так же можем использовать edquota, чтобы ограничить выделение дискового пространства основываясь на идентификаторе группы. К примеру, вот квота для группы users:

# edquota -g users
Disk quotas for group users (gid 100): Filesystem blocks soft hard inodes soft hard /dev/hdc1 4100 500000 510000 7 100000 125000

Смотрим изменившиеся квоты для группы:

# quota -g users
Disk quotas for group users (gid 100): Filesystem blocks quota limit grace files quota limit grace /dev/hdc1 4100 500000 510

Команда repquota

Просмотр квот для отдельно взятого пользователя используя quota бывает весьма утомителен, учитывая, что пользователей в системе может быть весьма много. Существует команда под названием repquota, которая собирает информацию обо всех квотах файловой системы и выводит симпатичный отчётец. Вот, к примеру, отчёт обо всех пользователях и группах имеющихся в /usr/users:

# repquota -ug /usr/users
*** Report for user quotas on device /dev/hdc1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --       0       0       0              3     0     0       
john      --       0   10000   11500              1  2000  2500       
jane      --    4100   10000   11500              6  2000  2500       

*** Report for group quotas on device /dev/hdc1
Block grace time: 7days; Inode grace time: 7days
                        Block limits             File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --       0       0      0               3     0     0       
users     --    4100  500000 510000               7 100000 125000  

Опции repquota

Существует парочка опций у этой команды, знать которые весьма нелишне. Команда repquota -a сообщает обо всех смонтированных на чтение/запись файловых системах, на которых выставлены квоты. Команда repquota -n не переводит идентификаторы групп и пользователей в их имена. Это поможет ускорить вывод больших отчётов.

Наблюдение за квотами

Если вы явялетесь системным администратором, то вам периодически надо посматривать за всем этим, чтобы не исчерпать выставленные лимиты. Самым простым сособом для этого является использоватние утилиты warnquota. Данная команда посылает уведомление по электронной почте при прохождении порога "мягкого" ограничения. Обычно, warnquota помещают в задачи планировщика cron.

Когда пользователь исчерпывает свой "мягкий" лимит, колонка grace в выводе команды quota отобразит срок действия - периода ожидания перед тем, как оно принудительно сработает.

Disk quotas for user jane (uid 1003): 
    Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
    /dev/hdc1   10800*  10000   11500    7days      7     2000    2500

По умолчанию срок срок такого периода для инодов и блоков - неделя.

Меняем срок периода ожидания

Значение периода ожидание можно сменить по своему желанию используя всё ту же edquota:

# edquota -t

Полученные данные будут помещены во временный файл, который будет открыт текстовым редактором:

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem             Block grace period     Inode grace period
/dev/hdc1                    7days                  7days

Текст в файле весьма исчерпывающ. Но убедитесь в том, что вы оставляете достаточно времени пользователям на получение письма, иначе все файлы будут удалены!

Проверка квот на этапе загрузки

Вы также можете проверять значение квот ещё при загрузке. Это можно проделать используя сценарий инициализации с использованием команды quotacheck. Пример такого скрипта доступен в Quota Mini HOWTO. Команда quotacheck также имеет возможность для исправления повреждённых квот. Познакомьтесь подробнее с этой командой с помощью man-странцы quotacheck(8).

Также помните об уже упомянутых командах quotaon и quotaoff. Вам необходимо будет поместить команду quotaon в сценарий загрузки, чтобы включить квоты. Дабы включить квотирование на всех поддерживаемых файловых системах, надо ввести:

# quotaon -a

Журналирование системы

Знакомимся с syslogd

Демон syslogd - служба предоставляющая развитый клиент-серверный механизм для журналирования сообщений от запущенных в системе программ. Syslogd принимает сообщения от демонов или программ, сортирует соообщения по типу и приоритету, затем записывает их в файл согласно заданным системным администратором правилам. В результате имеется ясный и единый подход к управлению системными журналами.

Чтение журналов

Давайте пройдёмся далее и посмотрим на содержимое журнала записанного программой syslog. После этого мы обратимся к конфигурации демона syslog. Стандарт FHS (вторая часть нашей серии руководств) определяет расположение файлов журналов в каталоге /var/log. Давайте воспользуемся командой tail, чтобы взглянуть последние 10 сообщений из файла messages:

# cd /var/log
# tail messages
Jan 12 20:17:39 bilbo init: Entering runlevel: 3
Jan 12 20:17:40 bilbo /usr/sbin/named[337]: starting BIND 9.1.3
Jan 12 20:17:40 bilbo /usr/sbin/named[337]: using 1 CPU
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: loading configuration from '/etc/bind/named.conf'
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: no IPv6 interfaces found
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: listening on IPv4 interface lo, 127.0.0.1#53
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: listening on IPv4 interface eth0, 10.0.0.1#53
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: running
Jan 12 20:41:58 bilbo gnome-name-server[11288]: starting
Jan 12 20:41:58 bilbo gnome-name-server[11288]: name server starting

Если вы помните наш обзор посвящённый обработке текстовых файлов, то знаете, что tail отображает последние строки в файле. В данном случае мы видим запущенный в системе сервер имён, который зовётся bilbo. Если бы мы развернули поддержку IPv6, то наверняка обратили своё внимание то, что он не может найти интерфейсы IPv6. Это указывает на потенциальную проблему. Дополнительно к этому мы также отмечаем, что пользователь только что запустил сессию окружения GNOME, видному по присутствию gnome-name-server.

Слежение за файлом журнала

Знающий системный администратор может воспользоваться командой tail -f, чтобы отслеживать текущий вывод в файл журнала:

# tail -f /var/log/messages

Например, теретически, мы хотим отследить потенциальную проблему с IPv6 используя команду указанную выше в отдельном терминале и перезапустив демон named для мгновенного получения сообщений от него. Данная техника весьма полезна при отладке. Ещё некоторые сисадмины любят оставлять в терминале постоянно запущенный tail -f, чтобы выборочно посматривать на события происходящие в системе.

Используем grep для журналов

Ещё одной полезной программой используемой для поиска по журналам событий является утилита grep, которая была описана во второй части. Для случая выше мы можем воспользоваться командой grep чтобы найти всё, что относится к слову "named":

# grep named /var/log/messages

Общий список журналов

Данная сводка показывает список обрабатываемых syslogd файлов журналов найденных в /var/log:

  • messages: информационные сообщения и сообщения об ошибках для основным систмных программ и демонов.
  • secure: Сообщения об авторизации и ошибки связанные с ними, хранится отдельно от файла messages для большей безопасности.
  • maillog: Сообщения и ошибки связанные с почтой.
  • cron: Сообщения и ошибки связанные с планировщиком cron.
  • spooler: Сообщения и ошибки связанные с UUCP.

Файл syslog.conf

Ну вот, настало самое время познакомиться с содержимым конфигурационного файла для демона syslog - syslog.conf (Примечание: Если вдруг вы не найдёте файла syslog.conf у себя на компьютере, то просто прочтите эту информацию для общего развития. Хотя скорее всего, у вас просто используется другой демон для журналирования). Взглянув на этот файл, вы увидите записи сходные для с журналами выше, плюс некоторые дополнительные. Данный файл имеет следующий формат записи: "условие (facility).приоритет (priority) действие (action)", где все эти поля определяются следующим образом:

Условие: Указывает на подсистему выдающую сообщение. Ключевые слова для условия: auth, authpriv, cron, daemon, kern, lpr, mail, news, syslog, user, uucp и local0 вместе с local7.

Приоритет: Указывает минимальную степень важности сообщения, что означает, что сообщение с указанным приоритетом и выше будут обрабатываться заданным правилом. Ключевые слова: debug, info, notice, warning, err, crit, alert, и emerg.

Действие: поле "действие" может содержать имя файла, терминала (/dev/console, к примеру), удалённую машину обозначенную префиксом "@", разделённый запятыми список пользователей, или отправку сообщений всем подключенным пользователям. Наиболее частоиспользуемое действие - задание имени файла.

Перезпуск и дополнительная информация

Надеемся, что данный обзор конфигурационного файла поможет вам обрести более уверенные знания о системе syslog. Вам следует прочесть справочную страницу syslog.conf(5) для большей информации перед тем как начать выполнять какие-то действия. Дополнительно посоветуем вам посмотреть syslogd(8), содержащем массу подробной информации.

Небольшое примечание перед тем, как задействовать изменения сделанные в файле конфигурации демона syslog: перезапуск демона с помощью посылки сигнала SIGHUP является верным решением, но ещё можно использовать команду killall, для упрощения задачи:

# killall -HUP syslogd


Примечания к безопасности

Следует остерегаться ситуации, когда файлы журналов которые записывает syslog в случае их отсутствия создаётся самой программой. Вне зависимости от настроек umask, такой файл читается всеми подряд. Если вы заботитесь о безопасности, то вам необходимо изменить права доступа файла на значение, когда их может читать и записывать только пользователь root. Дополнительно к сказанному хотелось бы рассмотреть программу logrotate (о ней ниже), которая может создавать файлы журналов с правильными параметрами безопасности. Демон syslog же всегда сохраняет текущие атрибуты файла, так что нет нужды беспокоиться о том, что файл был создан не им.

Демон logrotate

Файлы находящиеся внутри /var/log имеют свойство расти со временем и забивать собой всё свободное пространство на файловой системе. Поэтому рекомендуем воспользоваться программой наподобие logrotate, чтобы периодически сжимать файлы журналов. Данная программа запускается, как правило, ежедневно согласно настройкам cron. Она может быть настроена для архивирования, ротации, удаления или отправки журнала по электронной почте.

По умолчанию конфигурация logrotate ротирует файлы журналов еженедельно, сохраняя журналы за последние 4 недели (номер можно задать в конфигурационном файле) и сжимать последние журналы в архив для сохранения места. К тому же, эта программа может быть настроена для того, чтобы посылать сигнал SIGHUP демону syslog для того, чтобы он понял, что пора очищать файлы журналов и создавать новые.

Более подробная информация о logrotate содержится в man-странице logrotate(8), в которой имеется описание программы и синтаксис конфигурационного файла.

Дополнительная тема - klogd

Перед тем как покончить с syslog, хотелось бы подбросить дополнительного материала для наиболее любознательных читателей. Эти советы могут помочь вам сэкономить нервов при изучении тем, связанных с syslog.

Во-первых, syslogd является частью пакета sysklogd, который имеет в своём составе демон называемый klogd. Задача klogd получать информацию и сообщения об ошибках от ядра и передача их демону syslogd для дальнейшей обработки. Сообщения получаемые klogd весьма похожи на те, чтомы видели при выводе dmesg. Отличие в том, что dmesg выводит текущее содержимое кольцевого буфера ядра, в то время как klogd собирает сообщения передавая их syslog, где они не пропадут, даже если кольцо перестанет работать.

Ещё одна дополнительная тема - альтернативные способы журналирования

Во-вторых, хотелось расказать о существующей альтернативе стандартному пакету sysklogd. Альтернативные пакеты более более эффективны, легче в конфигурировании и более богаты возможностями нежели syslogd. Наиболее популярные альтернативы - Syslog-ng и Metalog. Вы можете изучить их, если не хватает текущих возможностей syslogd.

В-третьих, вы можете журналировать сообщения сами, используя собственные скрипты и команду logger. Для получения подробностей смотрите man-страницу logger(1).

Итоги и ресурсы

Итоги

Поздравяем! Вы всё же дошли до кнца данного руководства! Ну, почти. Существует пара тем, которые мы не рассматривали в виду ограниченного количества места в нашем материале. К счастью у нас есть несколько хороших ресурсов которые помогут вам быстро своить эти темы. Советуем вам изучить эти руквовдства, если вдруг соберётесь сдавать сертификационный экзамен LPIC первого уровня.

Нам не хватило места для того, чтобы рассмотреть в этом руковдстве весьма важную тему касающуюся резервного копирования системы. И опять же к счастью, на сайте IBM developerWorks есть нужное руководство на эту тему под назанием "Резервное копирование вашей машины с Linux". по этому руководству вы сможете научиться резервному копированию операционной системы с помощью варианта программы tar под названием star. Вы также узнаете как использовать команду mt для контроля функций ленточных накопителей.

вторую тему, которую мы так и не рассмотрели - работа с планировщиком задач. Впрочем, существует хорошая документация по планировщику cron, созданная в университете штата Индиана. Планировщик cron разработан для выполнения задач в определённое время и является крайне нужной вещью для системного администратора.

Далее, мы рассмотрим некоторое количество ресурсов, которые могут оказаться весьма полезными при изучении тем рассматриваеимых в данной работе.

Ресурсы

Дабы узнать побольше о возможностях ограничений по файловой системе (квотировании) в Linux, рекомендуем просмотреть Linux Quota mini-HOWTO. Также советуем прочитать man-страницы quota(1), edquota(8), repquota(8), quotacheck(8), и quotaon(8) имеющиеся в вашей системе.

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

Ресурсы по ReiserFS:

Ресурсы по XFS и JFS:

Не забывайте про существование проекта linuxdoc.org. Там вы найдёте большую коллекцию бесценных руководств, учебников, HOWTO, ЧаВО и man-страниц. Периодически просматривайте Linux Gazette и LinuxFocus.

Существует также руководство для системных администраторов лежащих в разделе "Руководства" на сайте проекта Linuxdoc.org, которая очень хорошо завершает эту серию статей. Рекомендуем вам прочитать его! Вы также можете поискать работу Эрика Рэймонда "HOWTO по основам Unix и Интернет".

Ещё имеется серия статей по оболочке Bash с множеством примеров написанная Дэниэлом Роббинсом, которая покажет вам как использовать конструкции bash для написания собственных сценариев. Данная серия статей (особенно первая и вторая часть) будет превосходным дополнительным материалом для подготовки к экзамену LPIC 1-го уровня:

Если вы не знакомы с редактором vi, то мы крайне рекомендуем ознакомиться со статьёй Дэниэла "Введение в vi - шпаргалка-методичка". Данное руководство плавно и быстро введёт в основы по этому весьма мощному текстовому редактору. Рассмотрите этот крайне важный для изучения материал, если вы не знаете как пользоваться vi.


Автор оригинального текста: Дэниэл Роббинс.

Перевод: Буданов Евгений aka r0g3r.