[make-initrd] Расширение раздела с корнем
Антон Мидюков
antohami at basealt.ru
Sat Nov 23 17:18:28 MSK 2024
16.11.2024 16:28, Alexey Gladkov пишет:
> On Sat, Nov 16, 2024 at 12:23:09PM +0700, Egor Shestakov wrote:
>> Всем привет!
>>
>> Есть ли у initrd возможность штатными средствами расширить раздел
>> с корнем на всё свободное место? Это необходимо после установки образа
>> системы на sd-карточку. Фича kickstart вроде умеет создавать разделы, но
>> как с ним работать не понятно, и можно ли её использовать на уже
>> установленной системе?
>
> Это можно сделать через kickstart. У команды partition есть опция --grow [1].
> Вот тут [2] есть пример использования. Чтобы расширить существующий раздел
> нужно использовать опцию --resize.
>
> [1] https://github.com/osboot/make-initrd/wiki/feature-kickstart#part-or-partition
> [2] https://github.com/osboot/make-initrd/blob/master/testing/test-root-efi-partition.cfg
>
Я попробовал. Столкнулся с проблемами.
1. Какой-то не такой readlink используется в initrd, который не знает опцию -e.
Обошёл так:
diff --git a/make-initrd/features/kickstart/data/bin/kickstart-sh-storage b/make-initrd/features/kickstart/data/bin/kickstart-sh-storage
index 2cd7b12c..de9b9c1a 100644
--- a/make-initrd/features/kickstart/data/bin/kickstart-sh-storage
+++ b/make-initrd/features/kickstart/data/bin/kickstart-sh-storage
@@ -820,7 +825,7 @@ part()
local partnum
read -r partnum < "/sys/class/block/$partdev/partition"
- dev="$(readlink -ev "/sys/class/block/$partdev")"
+ dev="$(readlink -v "/sys/class/block/$partdev")"
dev="${dev%/*}"
dev="${dev##*/}"
2. Есть потребность считать корневым разделом тот, что скрывается за переменной ROOT, чтобы не нужно было привязываться к конкретному UUID или LABEL и соответственно в случае их изменения пересобирать initrd. Поэтому сделал такой патчик:
diff --git a/make-initrd/features/kickstart/data/bin/kickstart-sh-storage b/make-initrd/features/kickstart/data/bin/kickstart-sh-storage
index 2cd7b12c..de9b9c1a 100644
--- a/make-initrd/features/kickstart/data/bin/kickstart-sh-storage
+++ b/make-initrd/features/kickstart/data/bin/kickstart-sh-storage
@@ -12,6 +12,11 @@ ks_devname()
{
local devname=''
case "$1" in
+ root)
+ [ -n "$ROOT" ] || fatal "root is not specified"
+ ks_devname "$ROOT"
+ return
+ ;;
LABEL=*)
devname="$(blkid -o device -L "${1#LABEL=}")"
;;
kickstart файл у меня получился такой:
part --onpart=root --resize --grow --useexisting
3. Раздел увеличивается, но файловая система нет. Так и должно быть? Или я что-то делаю не так.
Сразу не заметил, так как в /etc/fstab был указан параметр монтирования x-systemd.growfs, благодаря чему файловая система расширялась systemd.
--
С уважением, Антон Мидюков <antohami at basealt.ru>
More information about the Make-initrd
mailing list