Итак, после некоторых исследований (на 4-й, 5-й странице поиска Google! )Я читал (и также почти уверен, )что partman/preseed вычислит общий размер как сумму размеров всех разделов, не имеет значения, есть ли разделы LV, которые часть ВГ.
Если я добавлю числа максимального размера, я действительно получу ~147000 МБ. Итак, что я сделал, чтобы решить эту проблему? Ну для начала я уменьшил минимальный размер разделов в preseed файле до 1/4 или 1/2 от максимального размера, затем поставил все приоритеты выше или равными максимальному размеру (вы можете найти здесь и здесь дополнительная информация по этому поводу)
Это позволило partman/preseed успешно создать все разделы, даже если они были неподходящего размера.
Чтобы добиться нужного размера, я добавил поздний _командный сценарий, который изменил размер всех логических томов до их правильного размера.
Кроме того, чтобы сохранить все свободное пространство, которое осталось бы, если бы разбиение на разделы выполнялось вручную, я создал фиктивные разделы, которые позже удалил в том же позднем _командном сценарии.
Я знаю, что это неортодоксально, но это единственный способ работать с preseed/partman.
Вот также рецепт разбиения:
d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
d-i partman-auto/method string lvm
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 rootvg
d-i partman-auto-lvm/guided_size string 34%
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 infravg
d-i partman-auto-lvm/guided_size string 60%
d-i partman-auto/choose_recipe select diod
d-i partman-auto/expert_recipe diod :: \
511 512 512 ext4 \
$primary{ } \
$bootable{ } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
device{ /dev/sda1 } \
mountpoint{ /boot }. \
39999 40000 40000 ext4 \
$primary{ } \
method{ lvm } \
device{ /dev/sda2 } \
vg_name{ rootvg }. \
69999 70000 70000 ext4 \
$primary{ } \
method{ lvm } \
device{ /dev/sda3 } \
vg_name{ infravg }. \
100 1000 -1 ext4 \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ /part1 }. \
128 1000 128 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ system_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /system }. \
100 1500 1000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ opt_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /opt }. \
100 2500 2000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ home_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /home }. \
100 4500 4000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ usr_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /usr }. \
100 6000 5000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ root_lv } \
method{ format } \
format{ } \
use_filesystem{ } \
filesystem{ ext4 } \
mountpoint{ / }. \
100 5500 5000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ tmp_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /tmp }. \
100 6500 6000 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ var_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /var }. \
100 7500 8000 linux-swap \
$lvmok{ } in_vg{ rootvg } \
lv_name{ swap } \
method{ swap } format{ }. \
100 1000 -1 ext4 \
$lvmok{ } in_vg{ rootvg } \
lv_name{ free1_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /part2 }. \
100 2000 1024 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ chef_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /opt/chef }. \
100 4000 5000 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ images_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /images }. \
100 1000 -1 ext4 \
$lvmok{ } in_vg{ infravg } \
lv_name{ free2_lv } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /part3 } \
.
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select Finish
d-i partman/confirm_nooverwrite boolean true
d-i partman/confirm boolean true
Я исправил это, добавив разрыв после команды touch.
while [ $(pidof $PACKAGE) ]
do
loopcleaner
sleep 2
if [ ! $(pidof $PACKAGE) ]; then
touch /sdcard/successful.txt
break
exit 0;
fi
done
(хотя я очень новичок в bash и не очень уверен в себе, если это лучший подход, поэтому любые дальнейшие изменения/предложения по его улучшению будут высоко оценены)
В моем случае у нас была функция псевдонима touch
bash, определенная как touch -a "$@"
, которая только обновляла время доступа вместо (в дополнение к )времени модификации.
По умолчанию touch
будет обновляться оба раза, но наша функция bash переопределяла это.
Простое изменение функции на touch -am "$@"
решило проблему.