Основы Linux, часть 4

Прежде, чем вы начнете

Об этом руководстве

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

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

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

LPI лого -- торговая марка Linux Professional Institute.

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

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

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

Для начала я познакомлю вас с "блочными устройствами". Самое знаменитое блочное устройство, вероятно, устройство, которое представляет первое устройство IDE в вашей системе Linux:

/dev/hda

Если ваша система использует устройства SCSI, то первый ваш диск будет:

/dev/sda

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

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

Разделы диска

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

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

Введение в fdisk

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

Замечания:

Альтернативные интерфейсы к таблице разделов диска включают 'cfdisk' , 'parted' и 'partimage' . Я рекомендую избегать использования 'cfdisk' (несмотря на то, что может говорить страница man для fdisk), поскольку он иногда вычисляет геометрию диска неправильно.
# 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"), а также раздел подкачки (помеченный как "Linux swap").

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

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

Обзор разделения диска, продолжение

Все разделы, начиная с hda5 -- логические разделы. Номера с 1 по 4 зарезервированы за первичными или расширенными разделами.

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

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

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

Использование fdisk создать разделы диска

Теперь, когда вы имеете понятие о том, как в Linux разделяется диск, самое время пройтись по процессу создания разделов диска и файловых систем на новой инсталляции 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/hda2) используется для пространства подкачки (swap). Ядро использует пространство подкачки как виртуальную память, когда RAM становится недостаточно. Этот раздел, если его сравнивать с остальными, относительно мал, обычно около 512 MB. Если у вас устройство SCSI, этот раздел вероятно будет называться /dev/sda2.

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

Начнем

Хорошо, теперь нужно создать разделы, приведенные в примере выше. Во-первых начните с fdisk, набрав 'fdisk /dev/hda' или 'fdisk /dev/sda' , в зависимости от того, что вы используете: IDE или SCSI. Затем, наберите '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' , чтобы создать раздел размером 100MB. Вот вывод этих шагов:

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

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

Далее, давайте создадим раздел swap. Чтобы сделать это, наберите 'n' , чтобы создать новый раздел, затем 'p' , чтобы сообщить fdisk, что вы хотите первичный раздел. Затем наберите '2' , чтобы создать второй первичный раздел, в нашем случае /dev/hda2. Когда у вас запросят первый цилиндр, нажмите ввод. Когда у вас спросят последний цилиндр, наберите '+512M' , чтобы создать раздел размером 512MB. После того, как вы сделали это, наберите '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

Как сделать его загружаемым

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

Замечание:

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

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

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

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

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

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

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

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

Linux поддерживает множество различных типов файловых систем; каждый тип имет свои сильные и слабые стороны и свой набор характеристик. В этом руководстве мы рассмотрим создание файловых систем ext2, ext3, XFS, JFS и ReiserFS. Прежде чем создать в нашей тестовой системе какую-нибудь файловую систему, давайте кратко рассмотрим различные файловые системы, доступные в Linux. Позже в этом руководстве мы рассмотрим файловые системы более подробно.

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

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

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

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

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

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

ReiserFS -- файловая система, основанная на B-деревьях, которая имеет очень хорошую рабочую производительность и при работе с малыми файлами (до 4K) значительно, зачастую в 10-15 раз, превосходит ext2 и ext3. ReiserFS также чрезвычайно хорошо масштабируется и имеет журналирование метаданных. Начиная с ядра 2.4.18+, ReiserFS незыблемая и очень рекомендуемая для файловых систем общего назначения и в экстремальных случаях, таких как создание больших файловых систем, использование большого числа маленьких файлов, очень больших файлов и директорий, содержащих десятки тысяч файлов. ReiserFS файловая система, которую мы по умолчанию рекомендуем для всех разделов, кроме загрузочных.

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

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

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

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

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

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

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

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

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

Создаем swap

'mkswap' это команда, которая используется для инициализации разделов подкачки (swap):

# mkswap /dev/hda2

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

# swapon /dev/hdc6

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

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

Вы можете использовать команду 'mke2fs' для создания файловой системы ext2:

# mke2fs /dev/hda1

Если вы хотите использовать ext3, вы можете создать файловую систему 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 будет требовать, по крайней мере, одну группу размещения на каждые 4GB вашего раздела, так что, например, если у вас раздел размером в 20GB, вам нужно минимум 5 групп. Команда 'l size=32m' увеличивает размер журанла до 32MB, увеличивая производительность.

Чтобы создать файловую систему JFS, используйте команду 'mkfs.jfs' :

# mkfs.jfs /dev/hda3

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

Как только файловая система создана, мы можем смонтировать ее с помощью команды 'mount' :

# mount /dev/hda3 /mnt

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

Скажем, мы хотим смонтировать наш загрузочный раздел в /mnt. Мы могли бы сделать это, выполнив следующие шаги:

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

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

Чтобы посмотреть, какие смонтированы файловые системы, наберите саму команду 'mount' Вот вывод 'mount' на нашей выполняющейся сейчас системе Linux, которая имеет конфигурацию разделов, идентичную нашему примеру:

/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/hda3, и /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...."? Такие системы, как у меня, которые используют для /dev управление устройствами файловых системам devfs, имеют более длинные официальные имена для разделов и блочных дисковых устройств, чем использовались в прошлом. Например, /dev/ide/host0/bus1/target0/lun0/part7 -- официальное имя для /dev/hdc7, а само /dev/hdc7 просто символьная ссылка, указывающая на официальное блочное устройство. Вы можете определить, использует ли ваша система devfs, проверив существует ли файл /dev/.devfsd; если да то devfs активно.

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

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

or

# mount /dev/hda3 /mnt -t reiserfs

Опции команды mount

Можно настроить различные атрибуты файловой системы, которую нужно смонтировать, указав опции монтирования. Например, вы можете смонтировать файловую систему "только для чтения" с помощью опции "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

Заметим, что эти команды remount не будут успешно выполнены, если какой-нибудь процесс имеет открытые файлы или директории в /mnt. Чтобы освоиться со всеми опциями mount, доступными в Linux, наберите 'man mount' .

Введение в fstab

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

Хорошо, ядро 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

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

Посмотри на строку /dev/hda1; вы видите, что /dev/hda1 это файловая система типа ext3, которую нужно монтировать в точку монтирования /boot. Теперь посмотрим на опции монтирования /dev/hda1 в колонке opts. Опция noauto говорит системе, что автоматически во время загрузки монтировать /dev/hda1 не нужно; без этой опции /dev/hda1 была бы автоматически смонтирована в /boot во время загрузки системы.

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

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

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

С записью в /etc/fstab для /dev/cdrom, подобной приведенной выше, монтирование устройства CD-ROM становится легче. Вместо набора:

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

Мы можем теперь набрать:

# mount /dev/cdrom

В сущности использование /etc/fstab позволяет нам воспользоваться опцией user. Опция монтирования user сообщает системе, что эта конкретная файловая система может монтироваться любым пользователем. Это оказывается удобным для съмных устройств, таких как CD-ROM. Без этой опции монтирования в fstab, только суперпользователь root имел бы возможность использовать CD-ROM.

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

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

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

# umount /mnt

или

# umount /dev/hda3

После размонтирования, любой файл в /mnt, который был "перекрыт" смонтированной в нем файловой системой, появится снова.

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

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

Важно!

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

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

Проблемы с fsck

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

Чтобы решить эту проблему, были разработаны новые типы файловых систем, так называемые журналируемые файловые системы. Журналируемые файловые системы записывают на диск протокол последних изменений метаданных файловой системы. В случае поломки драйвер файловой системы проверяет протокол. Так как он содержит точный отчет о последних изменениях на диске, только эти части метаданных файловой системы нуждаются в проверке на ошибки. Благодаря этому важному конструктивному отличию, проверка целостности журналируемой файловой системы обычно занимает немного времени, порядка секунд, независимо от размеров файловой системы. По этой причине журналируемые файловые системы получили популярность в сообществе Linux. Более подробную информацию о журналируемых файловых системах смотри в Funtoo Filesystem Guide, part 1: Journaling and ReiserFS.

Давайте рассмотрим главные файловые системы, доступные в Linux вместе со связанными с ними командами и опциями.

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

Файловая система ext2 была стандартной файловой системой Linux в течение многих лет. Как правило она имеет хорошую производительность для большинства приложений, но не предлагает никаких возможностей журналирования. Это делает ее непригодной для очень больших файловых систем, так как 'fsck' может занять чрезвычайно много времени. В добавок ext2 имеет некоторые встроенные ограничения из-за того, что каждая файловая система ext2 имеет фиксированное число inode, с которыми она может работать. Как было сказано, в целом ext2 рассматривается как чрезвычайно надежная и эффективная нежурналируемая файловая система.

  • В ядрах: 2.0+
  • журналирование: нет
  • команда mkfs: mke2fs
  • пример mkfs: mke2fs /dev/hdc7
  • связанные команды: debugfs, tune2fs, chattr
  • опции mount, связанные с производительностью: noatime.

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

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

  • В ядрах: 2.4.16+
  • журналирование: metadata, ordered data writes, full metadata+data
  • команда mkfs: mke2fs -j
  • пример mkfs: mke2fs -j /dev/hdc7
  • связанные команды: debugfs, tune2fs, chattr
  • опции mount, связанные с производительностью: noatime
  • другие опции mount:
    • data=writeback (отключает журналирование)
    • data=ordered (по умолчанию, метаданные журналирования и данные записываются на диск с метаданными)
    • data=journal (полное журналирование данных для целостности данных и метаданных. Сокращает производительность наполовину).
  • ресурсы ext3:

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

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

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

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

  • В ядрах: 2.5.34+ только, для серии 2.4 требует патч
  • журналирование: metadata
  • команда mkfs: mkfs.xfs
  • пример mkfs: mkfs.xfs /dev/hdc7
  • опции mount, связанные с производительностью: noatime
  • Ресурсы XFS:

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

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

  • В ядрах: 2.4.20+
  • журанлирование: metadata
  • команда mkfs: mkfs.jfs
  • пример mkfs: mkfs.jfs /dev/hdc7
  • опции mount, связанные с производительностью: noatime
  • Ресурсы JFS: Web сайт проекта JFS (IBM).

VFAT

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

Загрузка системы

Об этом разделе

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

MBR

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

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

Сперва BIOS компьютера читает первые несколько секторов вашего жесткого диска. Эти сектора содержат очень маленькую программу, которая называется "Главная запись загрузки" ("Master Boot Record"), или "MBR". В MBR хранится положение ядра Linux на жестком диске (в приведенном примере раздел 1), таким образом он загружает ядро в память и запускает его.

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

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

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' . Эта программа выполняется до прекращения работы системы. Ей всегда назначается идентификатор процесс ID, равный 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

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

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

Больше никаких фанфар в приглашении LILO, но если вы нажмете клавишу <tab>, вам преподнесут список потенциальных ядер (или других операционных систем) для загрузки. Часто в списке только одна строка. Вы можете загрузить одну из списка, набрав ее и нажав <enter>. Или вы можете просто нажать на <enter> и первый элемент из списка будет загружаться по умолчанию.

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

Иногда вы можете захотеть передать во время загрузки опцию ядру. Некоторые из наиболее общих опций суть 'root=' для указания альтернативной корневой файловой системы, 'init=' для указания альтернативной программы init (такой как 'init=/bin/sh' для восстановления ошибочно сконфирурированной системы) и 'mem=' для указания размера памяти в системе (например, 'mem=512M' в случае когда Linux автоматически определяет только 128M). Вы могли бы передать их ядру в приглашении загрузчика 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' . Программа '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

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

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

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

Чтобы передать параметры ядру, вы должны нажать в меню загрузки 'e'. Это даст вам возможность отредактировать (снова нажимая 'e' ) или имя ядра для загрузки, или передаваемые ему параметры. Когда вы закончите редактирование, нажмите <enter>, а затем 'b' , чтобы загрузить ваши изменения.

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

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

/var/log/messages

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

# 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' , который указывает системе запуститься в "однопользовательском" режиме. Этот режим обычно монтирует только корневую файловую систему, запускает минимальное подмножество стартовых скриптов и запускает оболочку, а не подсказку регистрации. Кроме того, сеть не конфигурируется, так что нет никакой возможности, что внешние факторы будут воздействовать на вашу работу.

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

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

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

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

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

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

telinit

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

# telinit 1

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

Этика уровней запуска (runlevel)

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

# 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>; система уже на пути к выключению. Наконец, опция -h останавливает систему:

# 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' очень важна в системе Linux. Вы можете сконфигурировать 'init' , отредактировав файл /etc/initttab, который описан в странице man для inittab(5). Мы только коснемся одной ключевой строки в этом файле:

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

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

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

Дополнительную информацию, связанную с этим разделом, можно найти на:

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

Введение в квоты

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

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

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

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

Если эта команда возвращает что-то менее убедительное (например CONFIG_QUOTA is not set), то вы должны заново построить ваше ядро, включив поддержку квот. Это не трудный процесс, но лежит за рамками этого раздела руководства. Если вы не знакомы с шагами создания и установки ядра, вы можете посмотреть ссылку tutorial.

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

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

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

Чтобы начать конфигурирование квот в вашей системе, вы должны отредактировать /etc/fstab, чтобы смонтировать задействовать квоты в нужных файловых системах. В нашем примере мы используем файловую систему XFS, смонтированные с включенной возможностью квотирования:

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

Заметим, что опции usrquota и grpquota не обязательно делают возможным квотирование файловой системы. Вы можете убедиться, что квоты включены с помощью команды 'quotaon' :

# quotaon /usr/users

Если вы желаете в будущем отключить квоты, то соответствующая команда 'quotaoff' :

# 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, относятся к пределам, установленным в настоящее время для дискового пространства. Мы объясним позже разницу между quota и limit и значение колонки grace. Колонка files показывает, сколько файлов пользователь root имеет в конкретной файловой системе. Следующие колонки quota и limit относятся к пределам для файлов.

Обзор quota

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

# 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

В этом примере мы видим, что для jane квоты установлены в нуль, что означает отсутствие пределов.

edquota

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

# df /usr/users

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

Это не особенно большая файловая система, только 600MB или около того. Кажется благоразумным выделить jane такую квоту, чтобы она не могла использовать больше своей доли. Когда вы запускаете '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 показывают квоты jane, которые, как мы видим, в настоящее время неограничены (еще раз, нуль означает отсутствие квот).

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

Предел soft -- максимальное на файловой системе количество дискового пространства, которое размещается для jane (другими словами, ее квота). Если jane использует больше дискового пространства, чем назначено в ее пределе soft, ей по e-mail будет выдано предупреждение о нарушении е квоты. Предел hard указывает абсолютный предел использования диска, который пользователь не может превысить. Если jane попытается использовать больше дискового пространства, чем указано в пределе hard, она получит сообщение об ошибке "Disk quota exceeded" и не сможет завершить операцию.

Внесение изменений

Итак, здесь мы изменяем пределы soft и hard для jane и сохраняем файл:

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

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

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

# 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        

Ограничения для group

Мы можем также использовать '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

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

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

Команда 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, которые стоит упомянуть. 'repquota -a' сообщит обо всех смонтированных в настоящее время на чтение-запись файловых системах со включенным квотированием. 'repquota -n' не разрешает uid и gid в имена. Это может ускорить вывод больших списков.

Мониторигн квот

Если вы системный администратор, вы захотите иметь способ контролировать квоты, чтобы убедиться, что они не превышены. Простой способ сделать это -- использовать 'warnquota' . Команда 'warnquota' посылает e-mail пользователя, которые превысили совй предел soft. Обычно 'warnquota' запускается демоном cron.

Когда пользователь превышает свой предел soft, колонка grace в выводе команды 'quota' будет указывать период отсрочки, то есть время до того, как будет приведено в силу ограничение soft для этой файловой системы.

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

По умолчанию период отсрочки (grace) для блоков и индексных указателей равен семи дням.

Изменение периода отсрочки (grace)

Вы можктк изменить период отсрочки для файловой системы с помощью 'equota' :

# 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

Текст в файле очень толковый. Убедитесь, что оставите вашим пользователям достаточно времени, чтобы получить их предупреждение по e-mail и найти файлы, которые можно удалить!

Проверка квот во время загрузки

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

Помните также, что мы говорили раньше о командах 'quotaon' и 'quotaoff' . Вы должны включить 'quotaon' в ваш загрузочный скрипт, чтобы включить квоты. Чтобы включить квоты на всех файловых системах, которые поддерживают квотирование, используйте опцию -a:

# quotaon -a

Системные журналы (logs)

Введение в syslogd

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

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

Давайте перейдем прямо в журналы и посмотрим содержимое журнального файла, записанного syslog. Позже мы можем вернуться к конфигурации syslog. FHS (смотри Part 2 этой серии руководств) наказывает помещать эти журнальные файлы в /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' выводит последние строки файла. В нашем случае мы можем видеть, что сервер имен named недавно стартовал в системе под именем bilbo. Если мы используем IPv6, мы можем заметить, что named не нашел интерфейсов IPv6, что указывает на потенциальную проблему. Кроме того, мы можем видеть, что пользователь недавно запустил GNOME, на что указывает присутствие gnome-name-server.

Просмотр хвостовой части журнальных файлов

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

# tail -f /var/log/messages

Например, в случае отладки теоретической проблемы с IPv6, запуск указанной команды в одном терминале во время запуска и остановки named немедленно приводит к появлению сообщения от этого демона. Это может оказаться хорошим приемом во время отладки. Некоторые администраторы даже любят иметь постоянно запущенную в теринале 'tail -f' messages , где они могут посмотреть на системые события.

Журналы и команда grep

Другой полезный прием -- поиск в журнальном файле с помощью утилиты 'grep' , описанной в Part 2 этой серии руководств. В нашем случае мы могли бы использовать grep, чтобы найти, когда изменяется поведение "named":

# grep named /var/log/messages

Обзор журналов (log)

Вот резюме журнальных файлов, которые обычно находятся в /var/log и поддерживается syslog:

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

syslog.conf

В сущности, самое время исследовать конфигурационный файл syslog, /etc/syslog.conf. (Заметим: Если у вас нет /etc/syslog.conf, продолжите чтение ради информации, но вы, возможно, используете альтернативный syslog демон.) Просматривая этот файл, мы видим, что записи есть для каждого упомянутого здесь общего журнального файла плюс возможно другие записи. Файл имеет формат facility.priority action, где эти поля определены следующим образом:

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

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

action: поле action может быть или именем файла, tty (такое как /dev/console), удаленной машиной с префиксом @, разделенным запятыми списком пользователей, или послать сообщение всем зарегистрированным в системе. Самое распространенное -- просто имя файла.

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

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

Заметим, что вы должны информировать демон syslog об изменениях в конфигурации, прежде чем они введутся в действие. Посылка демон сигнала SIGHUP -- правильные метод, и, чтобы сделать это просто, вы можете использовать команду: 'killall' :

# killall -HUP syslogd

Замечание о безопасности

Вы должны остерегаться того, чтобы журнальные файлы, записываемые syslogd, если они не существуют, создавались бы программой. Несмотря на текущие установки umask, файлы будут созданы с правом чтения всеми. Если вы заботитесь о безопасности, вы должны изменить права файлов с помощью chmod так, чтобы они чтение-запись были разрешены только для root. Кроме того программа 'logrotate' (описанная ниже) может быть сконфигурирована так, чтобы создавать новые журнальные файлы с подходящими правами. Демон syslog всегда сохраняет текущие атрибуты существующего журнального файла, так что вам нет нужды беспокоиться об этом, как только файл уже создан.

logrotate

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

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

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

Продвинутая тема -- klogd

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

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

Продвинутая тема -- альтернативные программы журналирования

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

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

Резюме и ресурсы

Резюме

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

У нас нет место, чтобы охватить в этом руководстве важную тему резервного копирования системы. К счастью, IBM developerWorks уже имеет руководство по этой теме, она называется Backing up your Linux machines. В этом руководстве вы узнаете, как выполнять резервное копирование вашей системы Linux с помощью варианта 'tar', который называется star. Вы также узнаете, как использовать команду 'mt' для управления работой с лентами.

Вторая тема, которую мы не совсем смогли вставить, планирование периодических работ. К счастью, есть хорошая документация cron documentation, доступная в Indiana University. 'cron' используется для планирования работ, которые нужно выполнить в указанное время и это важное для системного администратора средство.

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

Ресурсы

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

Дополнительную информацию о процессе загрузки и загрузчиках можно найти на;

Ресурсы ReiserFS:

Ресурсы XFS и JFS:

Не забудьте linuxdoc.org. Вы найдете бесценной коллекцию руководств, HOWTOs, FAQs и страниц man. Обязательно проверьте Linux Gazette а также LinuxFocus.

Руководство системного администратора Linux, доступное на Linuxdoc.org's "Guides" section, хорошее дополнение к этой серии руководств, прочитайте его! Вы можете также найти полезным HOWTO Эрика С. Рэймонда Unix and Internet Fundamentals HOWTO.

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

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


Daniel Robbins

silly photo
This is not really me

Daniel Robbins is the founder of the Gentoo community and creator of the Gentoo Linux operating system. Daniel resides in New Mexico with his wife Mary and two energetic daughters, and is founder and lead of Funtoo. Daniel has also written many technical articles for IBM developerWorks, Intel Developer Services and C/C++ Users Journal.

Chris Houser

Chris Houser has been a UNIX proponent since 1994 when he joined the administration team for the computer science network at Taylor University in Indiana, where he earned his Bachelor's degree in Computer Science and Mathematics. Since then, he has worked on software in a variety of fields including web applications, video editing, UNIX device drivers, and defense, and is currently employed at Sentry Data Systems. He has also contributed to various free software projects such as Gentoo Linux and Clojure. He has most recently co-authored "The Joy of Clojure," available at http://joyofclojure.com.

Aron Griffis

Aron Griffis lives in the Boston area, where he's spent the past decade working for Hewlett-Packard on projects such as Tru64 UNIX network drivers, Linux security certification, Xen and KVM virtualization, and most recently HP's ePrint platform. When he's not actively hacking, Aron mulls over programming problems while riding his bicycle, juggling clubs, or cheering for the Red Sox.