2.1 2005-03-28
Общие сведения о блочных устройствах Блочные устройства

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

Для начала давайте познакомимся с блочными устройствами. Наиболее известным блочным устройством, вероятно, является устройство, представляющее собой первый IDE диск в Linux системе, и известное как /dev/hda. Если в вашей системе используются диски SCSI или SATA, тогда ваш первый жесткий диск будет именоваться /dev/sda.

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

Разделы

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

Существуют разделы трех типов: первичные, расширенные и логические.

Первичный раздел - это раздел, информация о котором хранится в MBR (Master Boot Record - главная загрузочная запись). Т.к. MBR очень маленького размера (512 байт), то может быть определено только четыре первичных раздела (например от /dev/hda1 до /dev/hda4).

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

Логический раздел - это раздел внутри расширенного раздела. Его определения не находятся внутри MBR, но прописаны внутри расширенного раздела.

Дополнительные возможности

На инсталляционном компакт-диске для х86 предоставляется поддержка для EVMS и LVM2. Использование EVMS и LVM2 увеличивает гибкость при создании разделов. В ходе установки мы сфокусируемся на "обычных" разделах, но забывать о поддержке EVMS и LVM2 не стоит.

Разработка схемы разделения диска Схема разделения по умолчанию

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

/dev/hda1ext232MЗагрузочный раздел/dev/hda2(swap)512MРаздел подкачки (Swap)/dev/hda3ext3Оставшаяся часть дискаКорневой раздел
Раздел Файловая система Размер Описание

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

Сколько и какого размера?

Количество разделов очень сильно зависит от используемого ПО. Например если в вашей системе зарегистрировано большое количество пользователей, вероятно вы захотите, чтобы /home находился отдельно для увеличения безопасности и упрощения создания резервных копий. Если вы устанавливаете Gentoo в качестве почтового сервера, то /var должен находиться на отдельном разделе, т.к. вся почта хранится в /var. Правильный выбор файловой системы для разделов позволит увеличить производительность вашей системы. Игровые серверы должны иметь отдельный раздел с /opt, т.к. большая часть ПО для их работы устанавливается в этот каталог. Причина выделения на собственный раздел аналогична для /home: безопасность и резервные копии.

Как вы можете видеть все зависит от ваших целей. Наличие отдельных разделов или томов имеет следующие плюсы:

  • Вы можете выбрать наиболее подходящую файловую систему для каждого раздела или тома
  • Вы не столкнетесь с нехваткой места на диске для всей системы, например если какое-нибудь неправильно работающее приложение постоянно производит запись на раздел или том.
  • В случае необходимости проверка ФС займет меньше времени, т.к. проверка разных разделов может выполняться параллельно (однако еще больший выигрыш по времени дает использование нескольких физических дисков)
  • Безопасность системы может быть улучшена если некоторые разделы будут смонтированы в режиме read-only (только для чтения), nosuid (setuid бит игнорируется), noexec (бит запуска игнорируется) и т.д.

Однако создание множества разделов имеет один большой минус: при неправильной настройке вы можете получит систему в которой много свободного места на одном разделе и полная его нехватка на другом. Также существует ограничение, в размере 15 штук на возможное количество разделов для дисков SCSI и SATA.

В качестве примера мы покажем диск объемом 20 Гб, используемый в составе демонстрационного лэптопа (с установленными веб сервером, почтовым сервером, средой Гном, ...):

$ df -h
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/hda5     ext3    509M  132M  351M  28% /
/dev/hda2     ext3    5.0G  3.0G  1.8G  63% /home
/dev/hda7     ext3    7.9G  6.2G  1.3G  83% /usr
/dev/hda8     ext3   1011M  483M  477M  51% /opt
/dev/hda9     ext3    2.0G  607M  1.3G  32% /var
/dev/hda1     ext2     51M   17M   31M  36% /boot
/dev/hda6     swap    516M   12M  504M   2% <не смонтирован>
(Свободное пространство для будущего использования: 2 Гб)

Раздел, содержащий /usr, как видим, почти полностью израсходован (используется 83%), но когда вы установили все необходимое ПО, то рост этого раздела замедлится. Многие могут посчитать, что места, отведенного под /var слишком много. Однако Gentoo компилирует все программы в каталоге /var/tmp/portage, таким образом /var у вас должен иметь не менее 1 Гб свободного пространства, если вы не собираетесь компилировать большие программы и не менее 3 Гб свободных, если хотите собрать KDE или OpenOffice.org.

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

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

/dev/hda1Загрузочный раздел/dev/hda2Область подкачки/dev/hda3Корневая ФС
Раздел Описание

Измените эту схему в соответствии с вашими пожеланиями.

Просмотр текущей схемы разделения диска

fdisk - это популярная и очень мощная утилита для создания разделов на ваших дисках. Запустите fdisk с указанием вашего диска в качестве параметра (в примере мы используем /dev/hda):

# fdisk /dev/hda

Запустив fdisk, вы увидите приветственное сообщение, выглядящее примерно так:

Command (m for help): 

Type p to display your disk's current partition configuration:

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").

Удаление всех разделов

Сначала мы удалим все существующие разделы с диска. Введите 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, чтобы выбрать первичный раздел и 1 для выбора первого первичного раздела. Когда появится вопрос о первом цилиндре, нажмите ввод. На вопрос о последнем цилиндре введите +32M, чтобы создать раздел размером 32 Мб:

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): +32M

Теперь, когда вы введете 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

Нам необходимо сделать этот раздел загружаемым. Введите a, чтобы установить флаг загрузки с раздела и выберите 1. Если вы введете p заново, то увидите символ *, расположенный в столбце "Boot".

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

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

Ни и наконец, давайте создадим корневой раздел. Чтобы сделать это введите n для создания нового раздела, затем p, чтобы указать fdisk'у, что вы хотите получить первичный раздел. После этого вводите 3, чтобы создать первичный раздел номер три, в нашем случае /dev/hda3. На вопрос о первом цилиндре просто нажмите ввод. На вопрос о последнем цилиндре также нажимайте ввод, чтобы создать раздел, занимающий все оставшееся свободное место на диске. После того как вы проделаете эти операции и введете 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/hda3         82      3876  28690200   83  Linux
Сохранение созданных разделов

Чтобы сохранить все сделанные изменения и выйти из fdisk'а, введите w.

Command (m for help): w

Теперь, когда созданы все разделы перейдем к Созданию файловых систем.

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

Разделы созданы, настало время разместить файловые системы на них. Если вам безразлично, какую ФС использовать и вы вполне довольны файловой системой, используемой нами в этом Руководстве по-умолчанию, вы можете перейти к разделу Размещение ФС на разделе. Если нет, то продолжайте чтение и узнайте больше о доступных для использования файловых системах...

Файловые системы?

Ядро Linux поддерживает различные файловые системы. Мы расскажем о ext2, ext3, ReiserFS, XFS и JFS как о наиболее часто применяемых ФС в Linux-системах.

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

ext3 - это журналируемая версия ext2. Она обладает средствами журналирования метаданных для быстрого восстановления наряду с другими режимами ведения журнала, такими как журналирование всех данных и упорядоченное ведение журнала данных. ext3 - это очень хорошая и надежная ФС. У нее есть дополнительная возможность индексации через хэшированные b-деревья, что позволяет повысить производительность практически в любой ситуации. Подводя итог, можно сказать, что ext3 - превосходная ФС.

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

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

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

Размещение ФС на разделе

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

ext2mke2fsext3mke2fs -jreiserfsmkreiserfsxfsmkfs.xfsjfsmkfs.jfs
Файловая система Команда

К примеру, для создания загрузочного раздела (/dev/hda1 в наших примерах) с ФС ext2 и корневой раздел (/dev/hda3 в наших примерах) с ФС ext3, вы должны выполнить следующие команды:

# mke2fs /dev/hda1
# mke2fs -j /dev/hda3

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

Активация раздела подкачки

mkswap - команда, используемая для инициализации раздела подкачки:

# mkswap /dev/hda2

Для активации раздела подкачки используется swapon:

# swapon /dev/hda2

Создайте и активируйте раздел подкачки, используя команды, приведенные выше.

Монтирование

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

Из-за ошибки в пакете e2fsprogs вам необходимо указывать явно mount -t ext3, в случае применения файловой системы ext3.
# mount /dev/hda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /mnt/gentoo/boot
Если вы хотите разместить /tmp на отдельном разделе, не забудьте изменить права доступа к этому каталогу после монтирования: chmod 1777 /mnt/gentoo/tmp. В этом каталоге размещается /var/tmp.

Нам также необходимо будет смонтировать ФС proc (виртуальный интерфейс ядра) в каталог /proc. Но для начала надо разместить необходимые нам файлы на разделах.

Переходите к разделу Подготовка установочных файлов Gentoo .