[make-initrd] Расширение раздела с корнем

Антон Мидюков antohami at basealt.ru
Sun Nov 24 13:34:46 MSK 2024


23.11.2024 20:59, Alexey Gladkov пишет:
> 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.
> 

То есть нужно заменить 'readlink -ev' на 'readlink-e -v'? Прислать патч?
 
>>
>> 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.
> 
> Я это не реализовал так как в тот момент мне это не было нужно. Но считаю,
> что раз возникла потребность, то это стоит сделать. Правда пока не не знаю
> несколько это будет хлопотно.
> 

В принципе, пока можно и с x-systemd.growfs жить.
Но он привязан к systemd и не поддерживает, к примеру, f2fs, которая хорошо подходит для флешек (что акутально для планшетов, смартфонов, одноплатников).

-- 
С уважением, Антон Мидюков <antohami at basealt.ru>


More information about the Make-initrd mailing list