[make-initrd] Расширение раздела с корнем
Alexey Gladkov
legion at kernel.org
Sat Nov 23 20:59:56 MSK 2024
On Sat, Nov 23, 2024 at 05:18:28PM +0300, Антон Мидюков wrote:
> 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##*/}"
Да, я с этим уже сталкивался. У меня даже есть враппер для этого:
https://github.com/osboot/make-initrd/blob/master/runtime/data/bin/readlink-e
В busybox readlink немного не совместимый с coreutils.
>
> 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.
Я это не реализовал так как в тот момент мне это не было нужно. Но считаю,
что раз возникла потребность, то это стоит сделать. Правда пока не не знаю
несколько это будет хлопотно.
--
Rgrds, legion
More information about the Make-initrd
mailing list