Внутренне, мы используем Ubuntu (14.04 Надежных людей) на наших рабочих станциях, и до сих пор мы сделали все наши сборки вручную, включая создание RAID/LVM/LUKS-encrypted объемов. Это не масштабируется, и я теперь работаю для автоматизации некоторых наших процессов для сокращения суммы "рук" на участие, требуемое создавать новую рабочую станцию.
Наша конфигурация жесткого диска следующие:
Разделенный таким образом у нас есть большая, избыточная, корневая файловая система для общего хранения данных и меньший раздел, в который файлы, которые являются чувствительной скоростью ввода-вывода, могут быть помещены (например, базы данных MySQL).
Я пытаюсь копировать это в partman expert_recipe
со связанной конфигурацией так, чтобы это могло быть создано установщиком Ubuntu. Мой основной вопрос - то, что, кажется, нет (работа?) механизм в partman рецепте "язык", чтобы указать, что определенный LV должен быть создан в определенной colume группе, и какие физические тома LVM присвоены каждой группе объема. У меня была более ранняя версия этой конфигурации, работающей, не пытаясь разделить/форматировать/монтировать любые объемы на /dev/sdc
, но как только дополнительный диск "не-RAID" включен, я, может казаться, не выражаю то, что я хочу в partman рецепте.
Соответствующая часть моего preseed.cfg файла следующие:
d-i partman-auto/disk string /dev/sda /dev/sdb /dev/sdc
d-i partman-auto/method string raid
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/new_vg_name string vg_raid vg_ssd
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/expert_recipe string \
boot-root :: \
512 10 1024 raid \
$primary{ } $lvmignore{ } $bootable{ } \
method{ raid } \
device{ /dev/sda /dev/sdb } \
vg_name{ vg_raid } \
. \
4096 20 -1 raid \
$primary{ } $lvmignore{ } \
method{ raid } \
device{ /dev/sda /dev/sdb } \
. \
2048 20 -1 lvm \
$primary{ } \
$defaultignore{ } \
method{ lvm } \
device{ /dev/sdc } \
vg_name{ vg_ssd } \
. \
8192 100 -1 ext4 \
$defaultignore $lvmok{ } \
in_vg{ vg_raid } \
lv_name{ lv_root } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
device{ /dev/sda /dev/sdb } \
. \
4096 100 100% linux-swap \
$defaultignore $lvmok{ } \
in_vg{ vg_raid } \
lv_name{ lv_swap } \
method{ swap } format{ } \
device{ /dev/sda /dev/sdb } \
. \
2048 100 -1 ext4 \
$defaultignore $lvmok{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
device{ /dev/sdc } \
in_vg{ vg_ssd } \
lv_name{ lv_ssd } \
mountpoint{ /ssd } \
. \
d-i partman-auto-raid/recipe string \
1 2 0 ext4 /boot /dev/sda1#/dev/sdb1 . \
1 2 0 lvm - /dev/sda2#/dev/sdb2 .
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-md/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-md/confirm_nooverwrite boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman/mount_style select label
Вы отметите, что я попытался быть довольно конкретным, о котором должны быть помещены разделы/объемы, на которых дисках, но partman, кажется, не соблюдает по крайней мере часть той конфигурации. Я также сохранил минимальные размеры тома довольно небольшими, в то время как я тестирую эту конфигурацию на VM. Когда я выполняю установку с этой конфигурацией на VirtualBox VM с дисками меньшего размера, установка перестала работать с сообщением об ошибке:
Error while setting up RAID
An unexpected error occurred while setting up a preseeded RAID configuration.
Check /var/log/syslog or see virtual console 4 for the details.
Соответствующий раздел из системного журнала следующие:
Jan 13 02:41:54 md-devices: mdadm: No arrays found in config file or automatically
Jan 13 02:41:54 partman: No matching physical volumes found
Jan 13 02:41:54 partman: Reading all physical volumes. This may take a while...
Jan 13 02:41:54 partman:
Jan 13 02:41:54 partman: No volume groups found
Jan 13 02:41:54 partman:
Jan 13 02:41:54 partman-lvm:
Jan 13 02:41:54 partman-lvm: No volume groups found
Jan 13 02:41:54 partman-lvm:
Jan 13 02:41:56 partman-auto: Available disk space (4294) too small for expert recipe (4608); skipping
Jan 13 02:41:57 kernel: [ 91.295036] Adding 2095100k swap on /dev/sdc5. Priority:-1 extents:1 across:2095100k FS
Jan 13 02:41:57 partman: mke2fs 1.42.9 (4-Feb-2014)
Jan 13 02:41:57 apt-install: Queueing package mdadm for later installation
Jan 13 02:41:57 partman-auto-raid: Error: No recipe specified in partman-auto-raid/recipe
Я подозреваю, что строка, 4-я от нижней части, является самой релевантной, поскольку Вы видите, что partman шел вперед и создал область подкачки на /dev/sdc
, который не был тем, что я хотел.
Я попробовал много изменений того, как указаны разделы. Я Погуглил много для условий версий, касающихся partman рецепты, и предварительно отбираю в целом, и я не могу найти каноническую ссылку для различных параметров конфигурации в рецепте и почему они применимы. Я нашел много примеров RAID, и много примеров LVM, но ничто, что смешивает два в способе, которым я пытаюсь использовать их. Этот поток из debian-пользовательского списка рассылки предполагает, что то, что я хочу сделать, не возможно, и которые, кажется, отслеживают с моим впечатлением, что partman языку рецепта не потребовали, чтобы инструменты описали то, чего я пытаюсь достигнуть.
Если кто-либо может указать на то, что я делаю неправильно с моей конфигурацией или даже просто некоторыми хорошими ссылочными материалами по partman expert_recipe
и язык конфигурации включил, это больше всего ценилось бы. В этой точке похоже, что я могу автоматизировать свою всю установку, за исключением части разделения, которая является действительно главным, которое я хотел автоматизировать!
Используя файл перед семенем для создания raid+lvm хитро. В основном Вы не можете создать гибкий конфигурационный файл с помощью предварительного семени. Это не просто и поток как запущение в RedHat/CentOS.
Для меня я должен был создать пользовательские команды с помощью preseed_early синтаксис. Можно измениться, как Вам угодно расценивает конфигурацию. Главная цель состоит в том, чтобы создать RAID-массив, прежде чем partitioner запустится. Демон установки будет как Вы, что никакой / раздел начальной загрузки не определяется, проигнорируйте это. Протестированный на Debian 9
Таким образом, у нас есть четыре диска
/dev/sda1 и/dev/sdb1 является зеркалом RAID1->,/dev/md0/dev/sda2 и/dev/sdb2 являются дорожкой RAID0.->/dev/md1/dev/sdc1 и/dev/sdd1 являются зеркалом RAID1.->/dev/md2
на md0 у него есть / раздел начальной загрузки на md1, у нас есть файл подкачки на md2, / корень.
таким образом, файл перед семенем следующий:
d-i partman-auto/disk представляют строку/dev/md0/dev/md1/dev/md2 d-i partman-auto/method в виде строки lvm
d-i partman-auto/expert_recipe представляют в виде строки \1 1 - 1 lvm \$defaultignore {} \$primary {} \устройство {/dev/md0} \метод {lvm} \vg_name {vg00} \. \1 1 - 1 lvm \$defaultignore {} \$primary {} \устройство {/dev/md1} \метод {lvm} \vg_name {vg01} \. \1 1 - 1 lvm \$defaultignore {} \$primary {} \устройство {/dev/md2} \метод {lvm} \vg_name {vg02} \. \512 512 512 ext4 \$lvmok {} \in_vg {vg00} \lv_name {lv_boot} \метод {формат} формат {} \use_filesystem {} файловая система {ext4} \точка монтирования {/начальная загрузка} \. \512 1024 1 024 подкачки Linux \$lvmok {} \in_vg {vg02} \lv_name {lv_swap} \метод {подкачка} формат {} \. \1000 9000 9 000 ext4 \$lvmok {} \in_vg {vg01} \lv_name {lv_root} \метод {формат} формат {} \use_filesystem {} файловая система {ext4} \точка монтирования {/} \.
d-i grub-installer/bootdev представляют/dev/sda в виде строки/dev/sdb
d-i preseed/early_command представляют/bin/killall.sh в виде строки; \/bin/netcfg; \
echo "o# clear the in memory partition table" >> /tmp/fdisk1;\
echo "n# create new partition" >> /tmp/fdisk1;\
echo "p# type primary" >> /tmp/fdisk1;\
echo "1# no. of partition" >> /tmp/fdisk1;\
echo " # default" >> /tmp/fdisk1;\
echo "+512M# partition size" >> /tmp/fdisk1;\
echo "t# partition type" >> /tmp/fdisk1;\
echo "fd# Linux RAID" >> /tmp/fdisk1;\
echo "w# write changes" >> /tmp/fdisk1;\
echo "n# create new partition" >> /tmp/fdisk2;\
echo "p# type primary" >> /tmp/fdisk2;\
echo "2# no. of partition" >> /tmp/fdisk2;\
echo " # default" >> /tmp/fdisk2;\
echo " # partition size" >> /tmp/fdisk2;\
echo "t# partition type" >> /tmp/fdisk2;\
echo "2# no. of partition" >> /tmp/fdisk2;\
echo "fd# Linux RAID" >> /tmp/fdisk2;\
echo "w# write changes" >> /tmp/fdisk2;\
echo "o# clear the in memory partition table" >> /tmp/fdisk3;\
echo "n# create new partition" >> /tmp/fdisk3;\
echo "p# type primary" >> /tmp/fdisk3;\
echo "1# no. of partition" >> /tmp/fdisk3;\
echo " # default" >> /tmp/fdisk3;\
echo " # partition size" >> /tmp/fdisk3;\
echo "t# partition type" >> /tmp/fdisk3;\
echo "fd# Linux RAID" >> /tmp/fdisk3;\
echo "w# write changes" >> /tmp/fdisk3;\
кошка/tmp/fdisk1 | grep-o '^ [^#]' | fdisk/dev/sda; \кошка/tmp/fdisk1 | grep-o '^ [^#]' | fdisk/dev/sdb; \кошка/tmp/fdisk2 | grep-o '^ [^#]' | fdisk/dev/sda; \кошка/tmp/fdisk2 | grep-o '^ [^#]' | fdisk/dev/sdb; \/sbin/mdadm - создают/dev/md0 - metadata=1.2 - auto=mdp \-raid-devices=2 - level=1/dev/sda1/dev/sdb1; \
кошка/tmp/fdisk3 | grep-o '^ [^#]' | fdisk/dev/sdc; \кошка/tmp/fdisk3 | grep-o '^ [^#]' | fdisk/dev/sdd; \/sbin/mdadm - создают/dev/md1 - metadata=1.2 - auto=mdp \-raid-devices=2 - level=1/dev/sdc1/dev/sdd1; \
/sbin/mdadm - создают/dev/md2 - metadata=1.2 - auto=mdp \-raid-devices=2 - level=0/dev/sda2/dev/sdb2; \