Handbook:X86/Blocks/Disks

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:X86/Blocks/Disks and the translation is 100% complete.



Таблица разделов

Несмотря на то, что теоретически возможно использовать неразбитый диск целиком для размещения системы Linux (например, для создании btrfs RAID), этого почти никогда не случается на практике. Наоборот, блочные устройства диска разбиваются на меньшие, более удобные для обращения, блочные устройства. В системах x86 они называются разделами. В настоящее время есть две стандартных технологии разметки дисков: MBR (которую ещё иногда называют DOS disklabel) и GPT; оба подхода тесно связаны с двумя типами загрузки системы: загрузка через legacy BIOS и UEFI.

GUID Partition Table (GPT)

GUID Partition Table (GPT, таблица разделов GUID, также может называться GPT disklabel) использует 64-битные идентификаторы разделов. Место, в котором хранится информация о разделах, также гораздо больше, чем 512 байт таблицы разделов MBR (DOS disklabel), что означает, что нет почти никаких ограничений на количество разделов для диска с GPT. Также предельный размер раздела был значительно увеличен (почти 8 ЗиБ — да, зебибайт).

Когда программным интерфейсом системы между операционной системой и прошивкой является UEFI (вместо BIOS), GPT является почти обязательным, так как с DOS disklabel будут возникать проблемы совместимости.

Также GPT использует контрольные суммы и избыточность. Он содержит контрольные суммы CRC32 для обнаружения ошибок в заголовке и таблице разделов. У GPT есть резервная таблица в конце диска. Её можно использовать для восстановления первичной таблицы GPT, которая располагается в начале диска.

Важно
Есть несколько предостережений относительно использования GPT:
  • GPT на компьютерах с BIOS будет работать, но его невозможно будет использовать при двойной загрузке совместно с операционной системой Microsoft Windows, которая попытается загрузиться в UEFI-режиме, если обнаружит разметку разделов GPT.
  • Некоторые сбойные (старые) прошивки материнских карт настроены на загрузку в режиме BIOS/CSM/legacy, что может также привести проблемам при загрузке с GPT-разделов.

Master boot record (MBR) или загрузочный сектор DOS

Загрузочный сектор Master boot record (также известный как загрузочный сектор DOS или DOS disklabel) впервые появился в PC DOS 2.x, выпущенном в 1983 году. MBR использует 32-битные идентификаторы для определения начала сектора и длины раздела и поддерживает три типа разделов: основные, расширенные и логические. Информация о расположении основных разделов хранится в самой главной загрузочной записи — очень небольшом (обычно 512 байт) месте в самом начале диска. Из-за её небольшого размера поддерживаются только четыре основных раздела (например, от /dev/sda1 до /dev/sda4).

Для поддержки большего количества разделов один из основных разделов в MBR может быть помечен как расширенный. Этот раздел может содержать дополнительные логические разделы (разделы внутри раздела).

Важно
Хотя большинство производителей материнских карт до сих пор поддерживают загрузочные секторы MBR, их вместе с ограничениями принято считать устаревшими. Кроме случаев, когда приходится работать с произведённым до 2010 года оборудованием, наилучшим выбором будет таблица разделов GUID. Те, кто всё-таки следует по пути MBR, должны знать о следующих ограничениях:
  • В большинстве материнских карт, произведённых после 2010 года, загрузочный сектор MBR считается устаревшим режимом загрузки (не всегда хорошо поддерживаемым).
  • Из-за использования 32-битных идентификаторов таблицы разделов в MBR не могут обращаться к адресам дискового пространства размером свыше 2 ТиБ.
  • Без использования расширенных разделов MBR поддерживает максимум только четыре раздела.
  • Данный режим не предоставляет никаких средств резервирования главной загрузочной записи, если что-то затрёт таблицу разделов, вся информация будет потеряна.

Однако, MBR и загрузка BIOS до сих пор может часто использоваться в виртуализированных облачных средах, например в AWS.

Авторы Руководства при установке Gentoo рекомендуют использовать GPT везде, где это возможно.

Продвинутая организация хранилища

Установочный CD x86 предоставляет поддержку Logical Volume Manager (LVM). LVM увеличивает гибкость в создании разделов. Он позволяет сочетать разделы и диски в группы разделов и определять группы RAID или кэши на быстрых SSD для медленных жёстких дисков. Инструкции по установке ниже сконцентрируются на использовании «обычных» разделов, но LVM при необходимости также поддерживается. Посетите статью LVM для более подробной информации. Новички, будьте осторожны: полная поддержка LVM выходит за рамки данного руководства.

Схема разделов по умолчанию

В оставшейся части руководства мы рассмотрим два случая: 1) таблица разделов GPT и загрузка UEFI и 2) таблица разделов MBR и устаревшая загрузка BIOS. Хотя эти два случая можно смешивать и сочетать, это выходит за рамки данного руководства. Как уже говорилось выше, при установке на современное оборудование следует использовать таблицу разделов GPT и загрузку UEFI; исключение составляет виртуализированные (облачные) среды, в которых до сих пор часто используется MBR и загрузка BIOS.

Будет использоваться следующая схема разделов как простой пример разбиения диска:

Раздел Файловая система Размер Описание
/dev/sda2 fat32 (UEFI) или ext4 (BIOS) 256M Системный раздел Boot/EFI
/dev/sda2 (swap) Размер ОЗУ * 2 Раздел подкачки
/dev/sda3 ext4 Оставшаяся часть диска Корневой раздел

Если вам этого достаточно, вы можете сразу переходить к разметке диска.

И fdisk, и parted являются инструментами для создания разделов. fdisk широко известен, стабилен и рекомендован для создания разделов MBR. parted был первым в Linux менеджером блочных устройств, имеющим поддержку разделов GPT. Здесь мы используемfdisk, так как у него лучше текстовый интерфейс.

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

Разработка схемы разделов

Сколько разделов и насколько больших?

Расположение разделов на диске сильно зависит от потребностей системы и файловой системы (файловых систем). Если в ней будет много пользователей, рекомендуется разместить /home на отдельном разделе, что улучшит безопасность и значительно упростит резервное копирование (а также другие операции сопровождения). Если Gentoo устанавливается для использования в роли почтового сервера, следует отделить /var, так как вся почта хранится в каталоге /var. Для игровых серверов потребуется отдельный раздел /opt, так как большинство игровых серверов устанавливается туда. Причины выделения те же, что и для каталога /home: безопасность, резервное копирование и сопровождение.

В большинстве случаев /usr и /var должны быть достаточно большого размера. В /usr хранится большинство приложений, доступных системе, а также исходные коды ядра Linux (в каталоге /usr/src). По умолчанию в /var хранится репозиторий пакетов Gentoo (расположенный в /var/db/repos/gentoo), который, в зависимости от файловой системы, занимает около 650 МиБ дискового пространства. Оценка этого пространства не включает каталоги /var/cache/distfiles и /var/cache/binpkgs, в которых будут скапливаться архивы исходных кодов и (не обязательно) двоичных пакетов, которые будут формироваться в самой системе.

Сколько именно и какого объёма разделов нужно системе — всё зависит от сочетания различных факторов, которые необходимо принимать во внимание. Наличие отдельных разделов или томов имеет следующие плюсы:

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


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

  • Если они не настроены правильно, может получиться так, что будет огромное количество свободного места на одном разделе и нехватка на другом.
  • Отдельный раздел для /usr/ может потребовать загрузки с initramfs, чтобы смонтировать раздел прежде, чем запустятся другие загрузочные сценарии. Так как сборка initramfs выходит за рамки данного руководства, мы рекомендуем новичкам не создавать отдельный раздел для /usr/.
  • Также существует лимит в 15 разделов для SCSI и SATA, если только на диске не используются метки GPT.
Заметка
Если вы планируете использовать Systemd, /usr/ должен быть доступен во время загрузки, как часть корневого раздела или смонтированный с помощью initramfs.

Что по поводу пространства подкачки?

Не существует идеального значения для раздела подкачки. Целью пространства подкачки является предоставление дискового пространства ядру в условиях активного использования оперативной памяти. Пространство подкачки позволяет ядру переносить на диск страницы оперативной памяти, которые не будут использоваться в ближайшее время, освобождая её (swap или page-out). Конечно, если эта память вдруг неожиданно понадобится, эти страницы должны быть помещены обратно в память (page-in), что займет намного больше времени, чем чтение с оперативной памяти (так как диски — это очень медленные устройства по сравнению с оперативной памятью).

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

Как правило, рекомендуется создавать пространство подкачки с размером в два раза больше оперативной памяти (ОЗУ). Для систем с несколькими дисками, целесообразно создать по одному разделу подкачки на каждом диске, чтобы их можно было использовать для параллельных операций чтения/записи. Чем быстрее диск может подкачивать, тем быстрее система будет работать, когда ей необходимо прочитать данные с пространства подкачки. При выборе между жестким диском и твердотельным накопителем, с точки зрения производительности лучше создать пространство подкачки на SSD. Также вы можете использовать файлы подкачки вместо разделов подкачки; в основном это необходимо для систем с очень ограниченным дисковым пространством.


Что такое EFI System Partition (ESP)?

При установке Gentoo на систему, использующую UEFI для загрузки операционной системы (вместо BIOS) важно, чтобы был создан системный раздел EFI (EFI System Partition, ESP). Расположенные ниже инструкции содержат необходимую для этого информацию. EFI System Parition не обязателен при загрузке в режиме BIOS/Legacy.

ESP должен быть одним из вариантов файловой системы FAT (иногда отображаемый как vfat на системах Linux). В официальной спецификации UEFI говориться о том, что прошивка UEFI может работать с FAT12, 16 и 32, но для ESP рекомендуется использовать FAT32. После разбивки, отформатируйте раздел ESP:

root #mkfs.fat -F 32 /dev/sda2
Предупреждение
Если раздел ESP не отформатирован под один из вариантов FAT, то не гарантируется, что прошивка UEFI сможет найти загрузчик (или ядро Linux) и, скорей всего, не сможет загрузить систему!


Что такое загрузочный раздел BIOS?

Загрузочный раздел BIOS необходим, только если вы комбинируете разметку дисков GPT с загрузчиком GRUB2 в режиме BIOS/Legacy. Он не требуется при загрузке в режиме EFI/UEFI, и также не требуется при использовании дисков MBR. Это очень маленький (1—2 Мб) раздел, в который загрузчики типа GRUB2 могут разместить дополнительные данные, которые не помещаются в выделенное хранилище. Мы не будем использовать его в данном руководстве.


Создание разделов на диске с GPT для UEFI

Следующие части объяснят, как создать структуру разделов из примера для установки с GPT/UEFI с использованием fdisk (пример структуры разделов приводился выше):

Раздел Описание
/dev/sda2 Системный (и загрузочный) раздел EFI (ESP)
/dev/sda2 Раздел подкачки
/dev/sda3 Корневой раздел

Измените структуру разделов в соответствии с личными предпочтениями.

Просмотр текущей разметки разделов

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

root #fdisk /dev/sda

Нажмите на клавишу p для отображения текущей конфигурации разделов:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 21AAD8CF-DB67-0F43-9374-416C7A4E31EA
 
Device        Start      End  Sectors  Size Type
/dev/sda1      2048   526335   524288  256M EFI System
/dev/sda2    526336  2623487  2097152    1G Linux swap
/dev/sda3   2623488 19400703 16777216    8G Linux filesystem
/dev/sda4  19400704 60549086 41148383 19.6G Linux filesystem

Данный диск был разбит на две файловые системы Linux (каждый раздел соответственно подписан как «Linux»), а также раздел подкачки (названный как «Linux swap»).

Создание нового disklabel / удаление всех разделов

Нажмите g, чтобы создать новую разметку GPT на диске; это удалит все существующие разделы.

Command (m for help):g
Created a new GPT disklabel (GUID: 87EA4497-2722-DF43-A954-368E46AE5C5F).

Для диска с существующей разметкой GPT (смотрите вывод p выше), вы также можете удалять существующие разделы на диске. Нажмите d для удаления раздела. Например, чтобы удалить существующий /dev/sda1:

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

Теперь раздел отмечен для удаления. Он больше не будет отображаться в списке разделов при вводе p, но не будет удален, пока не будут сохранены изменения. Это даёт возможность пользователю прервать операцию, если была допущена ошибка — в этом случае сразу нажмите q и Enter, и раздел не будет удален.

Удалите все разделы, поочерёдно нажимая на p для вывода списка разделов, d и номер раздела — для удаления. В конечном счете, таблица разделов будет пуста:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 87EA4497-2722-DF43-A954-368E46AE5C5F

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

Создание EFI system partition (ESP)

Сначала создадим небольшой системный раздел EFI. Нажмите n, чтобы создать новый раздел, затем 1 для выбора первого основного раздела. При запросе первого сектора, убедитесь, что он начинается с 2048 (может понадобиться для загрузчика) и нажмите Enter. При запросе последнего сектора введите +256M для создания раздела размером 256 Мбайт:

Command (m for help):n
Partition number (1-128, default 1): 1
First sector (2048-60549086, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-60549086, default 60549086): +256M
 
Created a new partition 1 of type 'Linux filesystem' and of size 256 MiB.

Пометьте раздел как системный раздел EFI:

Command (m for help):t
Selected partition 1
Partition type (type L to list all types): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.

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

Для создания раздела подкачки введите n, чтобы создать новый раздел, затем введите 2 для создания второго основного раздела, /dev/sda2. При появлении запроса первого сектора, введите Enter. При появлении запроса последнего сектора, наберите +4G (или любой другой размер, необходимый для подкачки) для создания раздела размером 4 ГБ.

Command (m for help):n
Partition number (2-128, default 2): 
First sector (526336-60549086, default 526336): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (526336-60549086, default 60549086): +4G
 
Created a new partition 2 of type 'Linux filesystem' and of size 4 GiB.

После этого введите t для выбора типа раздела, 2 для выбора только что созданного раздела и введите 19, чтобы установить тип раздела как «Linux Swap».

Command (m for help):t
Partition number (1,2, default 2): 2
Partition type (type L to list all types): 19
 
Changed type of partition 'Linux filesystem' to 'Linux swap'.

Создание корневого раздела

Наконец, чтобы создать корневой раздел, введите n, чтобы создать новый раздел. Затем введите 3, чтобы создать третий основной раздел, /dev/sda3. При запросе последнего сектора нажмите Enter, чтобы создать раздел, занимающий всё оставшееся доступное пространство диска. После завершения этих шагов введите p для вывода на экран таблицы разделов, которая должна выглядеть примерно так:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 87EA4497-2722-DF43-A954-368E46AE5C5F
 
Device       Start      End  Sectors  Size Type
/dev/sda1     2048   526335   524288  256M EFI System
/dev/sda2   526336  8914943  8388608    4G Linux swap
/dev/sda3  8914944 60549086 51634143 24.6G Linux filesystem

Сохранение разметки разделов

Для сохранения разметки разделов и выхода из fdisk введите w.

Command (m for help):w

Разделы созданы, теперь настало время создать на них файловые системы.

Создание разделов на диске с MBR для BIOS / legacy загрузки

Следующие части объяснят, как создать структуру разделов из примера для установки с MBR/BIOS-загрузкой. Приведём пример структуры разделов, упоминавшийся выше:

Раздел Описание
/dev/sda2 Загрузочный раздел
/dev/sda2 Раздел подкачки
/dev/sda3 Корневой раздел

Измените структуру разделов в соответствии с личными предпочтениями.

Просмотр текущей разметки разделов

Запустите fdisk для диска (в нашем примере мы используем /dev/sda):

root #fdisk /dev/sda

Нажмите на клавишу p для отображения текущей конфигурации разделов:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 21AAD8CF-DB67-0F43-9374-416C7A4E31EA
 
Device        Start      End  Sectors  Size Type
/dev/sda1      2048   526335   524288  256M EFI System
/dev/sda2    526336  2623487  2097152    1G Linux swap
/dev/sda3   2623488 19400703 16777216    8G Linux filesystem
/dev/sda4  19400704 60549086 41148383 19.6G Linux filesystem

Данный диск ранее был разбит в GPT-таблицу на две файловые системы Linux (каждый раздел соответственно подписан как «Linux»), а также раздел подкачки (названный как «Linux swap»).

Создание нового disklabel / удаление всех разделов

Введите o, чтобы создать на диске новую разметку MBR (также называемую разметкой DOS); это удалит все существующие разделы.

Command (m for help):o
Created a new DOS disklabel with disk identifier 0xe04e67c4.
The device contains 'gpt' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Для диска с существующей разметкой DOS (смотрите вывод p выше), вы также можете удалять существующие разделы на диске. Нажмите d для удаления раздела. Например, чтобы удалить существующий /dev/sda1:

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

Теперь раздел отмечен для удаления. Он больше не будет отображаться в списке разделов при вводе p, но не будет удален, пока не будут сохранены изменения. Это даёт возможность пользователю прервать операцию, если была допущена ошибка — в этом случае сразу нажмите q и Enter, и раздел не будет удален.

Удалите все разделы, поочерёдно нажимая на p для вывода списка разделов, d и номер раздела — для удаления. В конечном счете, таблица разделов будет пуста:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe04e67c4

Теперь мы готовы создать разделы.

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

Сначала создадим небольшой раздел, который будет монтироваться как /boot. Нажмите n, чтобы создать новый раздел, затем 1 для выбора первого основного раздела. При запросе первого сектора, убедитесь, что он начинается с 2048 (может понадобиться для загрузчика) и нажмите Enter. При запросе последнего сектора введите +256M для создания раздела размером 256 Мбайт:

Command (m for help):n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-60549119, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-60549119, default 60549119): +256M
 
Created a new partition 1 of type 'Linux' and of size 256 MiB.

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

Далее, для создания раздела подкачки введите n, чтобы создать новый раздел, затем введите 2 для создания второго основного раздела, /dev/sda2. При появлении запроса первого сектора, введите Enter. При появлении запроса последнего сектора, наберите +4G (или любой другой размер, необходимый для подкачки) для создания раздела размером 4 ГБ.

Command (m for help):n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (526336-60549119, default 526336): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (526336-60549119, default 60549119): +4G
 
Created a new partition 2 of type 'Linux' and of size 4 GiB.

После этого введите t для выбора типа раздела, 3 для выбора только что созданного раздела и введите 82, чтобы установить тип раздела как «Linux Swap».

Command (m for help):t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Создание корневого раздела

Наконец, чтобы создать корневой раздел, введите n, чтобы создать новый раздел. Затем введите 3, чтобы создать третий основной раздел, /dev/sda3. При запросе последнего сектора нажмите Enter, чтобы создать раздел, занимающий всё оставшееся доступное пространство диска. После завершения этих шагов введите p для вывода на экран таблицы разделов, которая должна выглядеть примерно так:

Command (m for help):p
Disk /dev/sda: 28.89 GiB, 31001149440 bytes, 60549120 sectors
Disk model: DataTraveler 2.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe04e67c4
 
Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1          2048   526335   524288  256M 83 Linux
/dev/sda2        526336  8914943  8388608    4G 82 Linux swap / Solaris
/dev/sda3       8914944 60549119 51634176 24.6G 83 Linux

Сохранение разметки разделов

Для сохранения разметки разделов и выхода из fdisk введите w.

Command (m for help):w

Настало время разместить файловые системы на разделы.