Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10 (очередное обновление 1.7)
Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Astra Linux Special Edition РУСБ.10015-16 исп. 1
Astra Linux Common Edition 2.12
Автоматическая разметка дисковых разделов с помощью partman-auto
Введение
Директива partman-auto является частью системы управления дисковыми разделами, автоматизирующей разбиение дисков на дисковые разделы. Порядок разбиения управляется рецептами, предоставляемыми в виде файлов, а также может управляться пакетами udeb (пакетами, предназначенными для Debian Installer) или указанием параметров разметки в файле предварительных настроек для автоматической установки preseed. В настоящем документе описываются формы рецептов и порядок их применения.
Форма рецептов
Рецепты представляются в текстовых файлах. Все символы перевода строки и табуляции преобразуются в пробелы. Далее каждые два или более пробела заменяются одним пробелом. Почти все лексемы разделяются пробелами. Важным исключением является открывающая фигурная скобка ("{"); перед которой не должно быть пробелов. Далее в правилах пробелы обозначаются символом подчеркивания ("_").
<рецепт>::=<заголовок>_<раздел> <заголовок>::=<простое имя>|<имя debconf> <простое имя>::=<имя>_:
<имя> может быть, например "Multi user system".
<имя debconf>::=<шаблон debconf>_::
Назначением лексемы <имя debconf> является перевод имен рецептов на другие языки.
<раздел>::=<раздел>|<раздел>_<разделы> <раздел>::=<лимиты>_<спецификации>_. <лимиты>::=<минимальный размер>_<приоритет>_<максимальный размер>_<файловая система>
- <минимальный размер> задает минимальный допустимый размер дискового раздела в мегабайтах. Размер округляется до размера дискового цилиндра, поэтому есть задать минимальный размер 20МБ при размере цилиндра 12МБ размер дискового раздела будет 12МБ. Размеры также могут быть заданы в процентах от общего объёма системного ОЗУ или (начиная с partman-auto версии 87) как число плюс проценты (например, "2000+50%"), что задает размер как указанное число плюс указанный процент от общего объёма системного ОЗУ;
- <приоритет> - некоторое число, обычно между числами <минимальный размер> и <максимальный размер>. Оно определяет приоритеты разделов при назначении размера. Если <приоритет> слишком мал (относительно приоритета другого раздела) этот раздел получит размер ближе к величине <минимальный размер>. Для маленьких разделов рекомендуется задавать <приоритет> больше чем их <максимальный размер>;
- <максимальный размер> - максимальный размер раздела. Специальное значение -1 используется для задания разделов неограниченного размера;
- <файловая система> - файловая система для этого раздела. Может быть задана как $default_filesystem для использования значения по умолчанию (в настоящее время ext3).
<спецификаторы>::=<спецификатор>|<спецификатор>_<спецификаторы> <спецификатор>::=<внутренний спецификатор>|<регулярный спецификатор>|<спецификатор типа> <внутренний спецификатор>::=$primary{_}|$bootable{_}|$default_filesystem{_}
- $primary{_} - раздел должен быть создан как первичный (если это возможно);
- $bootable{_} - раздел должен быть загрузочным;
- $default_filesystem{_} - определяет, что должна использоваться файловая система, заданная по умолчанию (в настоящее время ext3).
<регулярный спецификатор>::=<имя файла>{ <содержимое файла> }
- <file name> - имя файла, который будет создан в разделе (подробности см. часть 2.4 руководства по partman);
- <file contents> - информация, которая будет записана в этот файл.
<спецификатор типа>::=$lvmok{_}|$defaultignore{_}|$lvmignore{_}
- $lvmok{_} - указувает, что раздел может быть логическим томом LVM при использовании LVM;
- $defaultignore{_} - используется для очистки принятых по умолчанию параметров раздела (применимо при использовании LVM);
- $lvmignore{_} - используется для очистки принятых по умолчанию параметров раздела LVM (применимо при неиспользовании LVM)
Спецификаторы defaultignore и lvmignore позволяют в одном рецепте определить разные параметры, например, раздела /boot в LVM-схеме разбиения на разделы и не-LVM схеме.
Примеры рецептов
Пример: корневой раздел и раздел подкачки (swap)
partman-auto/text/atomic_scheme: 500 10000 1000000 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } . 64 512 300% linux-swap method{ swap } format{ } .
Этим рецептом задается, что:
- Раздел root должен быть не менее 500 МБ и фактически не имеет максимального размера. Размер раздела swap изменяется от 64МБ до тройного размера системного ОЗУ;
- Параметр $bootable{ } делает раздел загружаемым, и параметр $primary{ } делает раздел первичным.
Кроме того, в примере используются параметры:
- method{ format } - указывает, что раздел должен быть отформатирован. Для разделов подкачки (swap) используется значение "swap". Для создания раздела без форматирования используется значение "keep" (такой раздел может применяться для резервирования дискового пространства);
- format{ } - следует указать, чтобы раздел был отформатирован;
- use_filesystem{ } - указывает, что на разделе размещается файловая система;
- filesystem{ ext4 } - указывает тип файловой системы для размещения на разделе;
mountpoint{ / } - задает точку монтирования раздела. Дополнительно можно задать опции монтирования, например, для задания опций "nodev,ro":
options/nodev{ nodev } options/ro{ ro }
Также возможно задать метку файловой системы для поддерживающих метки файловых систем. Например, для задания метки "astralinux":
label{ astralinux }
При установке должен быть отформатирован один дисковый раздел, помеченный как:
method{ format }
Пример: корневой раздел, раздел подкачки и отдельный раздел /home
300 4000 7000 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } . 64 512 300% linux-swap method{ swap } format{ } . 100 10000 1000000000 ext4 method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /home } .
Опции, специфичные для LVM
При использовании метода автоматического разбиения "lvm" в рецепте задаются специальные опции. Это позволяет разбить на разделы несколько дисков, определяя разделы, содержащие физические тома, принадлежность этих томов группам томов, имена и принадлежность логических томов.
В одной сессии может быть обработано несколько дисков, что также должно быть указано в рецепте. Разделы, не являющиеся логическими томами и не имеющие назначенных дисков (например, /boot) по умолчанию размещаются на первом диске. Для явного задания физического тома определим раздел следующим образом:
100 1000 1000000000 ext4 $defaultignore{ } $primary{ } method{ lvm } device{ /dev/hdb } vg_name{ vg00 } .
Параметры "device{ ... }" и "vg_name{ }" необязательны.
Указанные в параметре device устройства обязательно должны быть объявлены с помощью параметра partman-auto/disk.
Группа томов, в которую входит логический том, может быть задана как "in_vg{ }", например:
96 512 300% linux-swap $lvmok{ } in_vg{ vg00 } lv_name{ myswap } method{ swap } format{ } .
Параметр "lv_name{ }" задает имя логического тома, который будет создан.
Зависимость от архитектуры
Некоторые архитектуры предъявляют специфические требования к дисковым разделам. Например, многие из них требуют выделения специального дискового радела для поддержки загрузки. В частности, так называемые NewWorld PowerMAC машины требуют загрузочный дисковый раздел, размещенный в начале диска. Ниже приведен фрагмент рецепта для создания такого раздела:
1 1 1 hfs $bootable{ } method{ newworld } .
Этот раздел должен быть первым в списке разделов и он не должен быть отформатирован.
Другой пример — архитектура netwinder, требующая небольшой раздел /boot, отформатированный в файловую систему ext2 версии 0:
50 500 100 ext2 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext2r0 } mountpoint{ /boot } .
И, наконец, пример настройки загрузочного раздела EFI для архитектуры ia64:
100 100 150 fat16 $primary{ } method{ efi } format{ } .
Для других архитектур см. соответствующие рецепты в udeb-пакете partman_auto.
Ограничения
Из-за ограничений реализации partman-auto для того, чтобы было использовано всё свободное дисковое пространство, должен быть задан один раздел максимального размера. Обычно для этого используется раздел /home, которому назначается максимальный размер 1000000000, что достаточно для существующих устройств хранения данных. Если большой раздел /home не нужен, можно задать дополнительный дисковый раздел с размером 1000000000, с методом создания "keep" и оставить его не примонтированным. После завершения инсталляции такой раздел можно удалить.
Порядок вычисления размеров разделов
Предположим, требуется создать N разделов и min[i], max[i] и priority[i] — максимальный размер, минимальный размер и приоритет раздела i как описано в части 1 настоящей статьи.
Предположим free_space — размер свободного места для размещения разделов. Тогда:
for(i=1;i<=N;i++) { factor[i] = priority[i] - min[i]; } ready = FALSE; while (! ready) { minsum = min[1] + min[2] + ... + min[N]; factsum = factor[1] + factor[2] + ... + factor[N]; ready = TRUE; for(i=1;i<=N;i++) { x = min[i] + (free_space - minsum) * factor[i] / factsum; if (x > max[i]) x = max[i]; if (x != min[i]) { ready = FALSE; min[i] = x; } } }
В итоге значение min[i] будет значением размера радела i.