Make-initrd development discussion
 help / color / mirror / Atom feed
* [make-initrd] Расширение раздела с корнем
@ 2024-11-16  5:23 Egor Shestakov
  2024-11-16 13:28 ` Alexey Gladkov
  0 siblings, 1 reply; 4+ messages in thread
From: Egor Shestakov @ 2024-11-16  5:23 UTC (permalink / raw)
  To: make-initrd

Всем привет!

Есть ли у initrd возможность штатными средствами расширить раздел 
с корнем на всё свободное место? Это необходимо после установки образа
системы на sd-карточку. Фича kickstart вроде умеет создавать разделы, но
как с ним работать не понятно, и можно ли её использовать на уже
установленной системе?

-- 
Egor Shestakov <shestakovea@basealt.ru>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [make-initrd] Расширение раздела с корнем
  2024-11-16  5:23 [make-initrd] Расширение раздела с корнем Egor Shestakov
@ 2024-11-16 13:28 ` Alexey Gladkov
  2024-11-23 14:18   ` Антон Мидюков
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Gladkov @ 2024-11-16 13:28 UTC (permalink / raw)
  To: make-initrd

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

-- 
Rgrds, legion



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [make-initrd] Расширение раздела с корнем
  2024-11-16 13:28 ` Alexey Gladkov
@ 2024-11-23 14:18   ` Антон Мидюков
  2024-11-23 17:59     ` Alexey Gladkov
  0 siblings, 1 reply; 4+ messages in thread
From: Антон Мидюков @ 2024-11-23 14:18 UTC (permalink / raw)
  To: make-initrd

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@basealt.ru>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [make-initrd] Расширение раздела с корнем
  2024-11-23 14:18   ` Антон Мидюков
@ 2024-11-23 17:59     ` Alexey Gladkov
  0 siblings, 0 replies; 4+ messages in thread
From: Alexey Gladkov @ 2024-11-23 17:59 UTC (permalink / raw)
  To: make-initrd

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



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-11-23 17:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-16  5:23 [make-initrd] Расширение раздела с корнем Egor Shestakov
2024-11-16 13:28 ` Alexey Gladkov
2024-11-23 14:18   ` Антон Мидюков
2024-11-23 17:59     ` Alexey Gladkov

Make-initrd development discussion

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/make-initrd/0 make-initrd/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 make-initrd make-initrd/ http://lore.altlinux.org/make-initrd \
		make-initrd@lists.altlinux.org make-initrd@lists.altlinux.ru make-initrd@lists.altlinux.com
	public-inbox-index make-initrd

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.make-initrd


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git