|
| Данная статья является переводом статьи : https://github.com/xobs/debian-installer/blob/master/doc/devel/partman-auto-recipe.txt |
Директивы partman-auto задают правила использования пространства данных, предоставляемого накопителем данных. Порядок разбиения дискового пространства на части (дисковые разделы) и форматирования дисковых разделов управляется наборами правил (рецептами). Рецепты могут быть представлены в виде файлов и использоваться пакетами udeb (пакетами, предназначенными для Debian Installer), также могут использоваться в сценариях автоматической установки preseed. В настоящем документе описываются формы рецептов и порядок их применения.
| Установка Astra Linux на дисковые разделы с файловой системой семейства FAT (FAT12, FAT16, FAT32) не поддерживается. Рекомендованной файловой системой является ext или xfs |
Рецепты представляются в текстовых файлах. Все символы перевода строки и табуляции преобразуются в пробелы. Далее каждые два или более пробела заменяются одним пробелом. Почти все лексемы разделяются пробелами. Важным исключением является открывающая фигурная скобка ("{"); перед которой не должно быть пробелов. Далее в правилах пробелы обозначаются символом подчеркивания ("_").
<рецепт>::=<заголовок>_<раздел> <заголовок>::=<простое имя>|<имя debconf> <простое имя>::=<имя>_: |
<имя> может быть, например "Multi user system".
<имя debconf>::=<шаблон debconf>_:: |
Назначением лексемы <имя debconf> является перевод имен рецептов на другие языки.
<раздел>::=<раздел>|<раздел>_<разделы> <раздел>::=<лимиты>_<спецификации>_. <лимиты>::=<минимальный размер>_<приоритет>_<максимальный размер>_<файловая система> |
<спецификаторы>::=<спецификатор>|<спецификатор>_<спецификаторы>
<спецификатор>::=<внутренний спецификатор>|<регулярный спецификатор>|<спецификатор типа>
<внутренний спецификатор>::=$primary{_}|$bootable{_}|$default_filesystem{_} |
<регулярный спецификатор>::=<имя файла>{ <содержимое файла> } |
<спецификатор типа>::=$lvmok{_}|$defaultignore{_}|$lvmignore{_} |
Спецификаторы defaultignore и lvmignore позволяют в одном рецепте определить разные параметры, например, раздела /boot в LVM-схеме разбиения на разделы и не-LVM схеме.
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{ } . |
Этим рецептом задается, что:
Кроме того, в примере используются параметры:
mountpoint{ / } - задает точку монтирования раздела. Дополнительно можно задать опции монтирования, например, для задания опций "nodev,ro":
options/nodev{ nodev }
options/ro{ ro } |
Также возможно задать метку файловой системы для поддерживающих метки файловых систем. Например, для задания метки "astralinux":
label{ astralinux } |
При установке должен быть отформатирован один дисковый раздел, помеченный как:
method{ format }
|
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, то portman-auto некорректно вычисляет размер необходимого дискового пространства, а именно: суммирует размер групп томов LVM (VG) с размерами находящихся в них логических томов LVM (LV). Если при этом вычисленный размер дискового пространства превышает доступный размер, то рецепт игнорируется. В журнале установки при этом фиксируется запись: "Available disk space too small for expert receipe". |
При использовании метода автоматического разбиения "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.