From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=basealt.ru; s=dkim; t=1732453229; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C9a9RVI0MuWqXvq7ghIYTTf3wJAJdyfCRPHJ72v4pXY=; b=Nrj/jHc/pQkbcRthXURaa1pbmSfHisWp2qLGFRO2wW0pLo0/z/EzrmRKsb83wJgAv9z2GW 2zGlPNxvwX+a3qMRNLZ9S+B0/gCMXiblrHJSuCpdbhP1yYmyTZlMIzJKsiquhyfQklqg8z OS+cN2LEcl05N1WYjK+8Vwr53PlNZNYs5udHf9dCsvqp1yTFOLQEFvvBPLo/HtsDjt13U2 k2V4XuX5PLeT2oa79iT1C9e6yuk3OKiYViP4QN9eq0zzZY0ARUYRI7CjURwvihJHKR2OFs c9yUQZ5ZoFMdJyJa26143Dpwr+/z1su6o/5ARga408sWGYoJIrLCWb3sw9I/6w== Message-ID: Date: Sun, 24 Nov 2024 16:00:28 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: make-initrd@lists.altlinux.org References: <20241116122309.df5fdad73578af49341206ad@basealt.ru> <8a849bcc-e792-40e5-a558-6c8693935278@basealt.ru> <27e1acdc-8776-4089-831d-693dedc642cd@basealt.ru> Content-Language: ru From: =?UTF-8?B?0JDQvdGC0L7QvSDQnNC40LTRjtC60L7Qsg==?= In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: Re: [make-initrd] =?utf-8?b?0KDQsNGB0YjQuNGA0LXQvdC40LUg0YDQsNC30LQ=?= =?utf-8?b?0LXQu9CwINGBINC60L7RgNC90LXQvA==?= X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Nov 2024 13:00:32 -0000 Archived-At: List-Archive: 24.11.2024 15:51, Alexey Gladkov пишет: > On Sun, Nov 24, 2024 at 01:34:46PM +0300, Антон Мидюков wrote: >> 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'? Прислать патч? > > Враппер сам добавляет -v. Просто сделать: > > dev="$(readlink-e "/sys/class/block/$partdev")" > Спасибо. >> >>>> >>>> 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=}")" >>>> ;; >>> >>> Ок. Можно такой алиас сделать. >>> >> >> Замечаний к коду нет? Тогда пришлю патч? > > У меня сомнения связанные с названием. В ks_devname проверяет LABEL=*, > UUID=*, /dev/* а остальное считается поддиректорией в /sys. > > Без патча алиас `root` попадаёт в последнюю категорию. Скорее всего (я > практически уверен) не может быть такого имени в /sys/class/block/*. > > Но может быть использовать `/dev/root` в качестве алиаса ? > > https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/devices.rst#locally-defined-links > Хорошо. Давайте использовать `/dev/root`. >> >>>> kickstart файл у меня получился такой: >>>> part --onpart=root --resize --grow --useexisting >>>> >>>> 3. Раздел увеличивается, но файловая система нет. Так и должно быть? Или >>>> я что-то делаю не так. Сразу не заметил, так как в /etc/fstab был >>>> указан параметр монтирования x-systemd.growfs, благодаря чему файловая >>>> система расширялась systemd. >>> >>> Я это не реализовал так как в тот момент мне это не было нужно. Но считаю, >>> что раз возникла потребность, то это стоит сделать. Правда пока не не знаю >>> несколько это будет хлопотно. >>> >> >> В принципе, пока можно и с x-systemd.growfs жить. Но он привязан к >> systemd и не поддерживает, к примеру, f2fs, которая хорошо подходит для >> флешек (что акутально для планшетов, смартфонов, одноплатников). > > Сначала хотел привести относительно простой патч для поддержки, но беглое > чтение документации превратило патч вот в это: > > diff --git a/features/kickstart/data/bin/kickstart-sh-storage b/features/kickstart/data/bin/kickstart-sh-storage > index 2cd7b12c..5e794586 100644 > --- a/features/kickstart/data/bin/kickstart-sh-storage > +++ b/features/kickstart/data/bin/kickstart-sh-storage > @@ -539,6 +539,59 @@ ks_get_dev_id() > printf '%s\n' "$1" > } > > +ks_requires_ext4=("resizefs") > +ks_requires_xfs=("xfs_growfs") > +ks_requires_f2fs=("resize.f2fs") > +ks_growfs() > +{ > + local PROG > + local fs="" requires="" ret=0 > + > + PROG="kickstart" > + message "command: ${FUNCNAME[0]} $*" > + > + fs="$(blkid --output value --match-tag TYPE -c /dev/null "$1")" || > + return 0 > + > + case "$fs" in > + ext*) requires="ks_growfs_ext4" ;; > + xfs) requires="ks_growfs_xfs" ;; > + f2fs) requires="ks_growfs_f2fs" ;; > + *) > + # resize unsupported. > + return 0 > + ;; > + esac > + > + ks_check_requires "$requires" || > + return 1 > + > + verbose "Increase filesystem to partition size: $1" > + > + case "$fs" in > + ext*) > + resizefs "$1" || > + ret=1 > + ;; > + xfs) > + mount -n -o rw,X-mount.mkdir \ > + "$1" \ > + "$ks_datadir/xfs.dir" > + xfs_growfs \ > + "$ks_datadir/xfs.dir" || > + ret=1 > + umount -f \ > + "$ks_datadir/xfs.dir" > + ;; > + f2fs) > + resize.f2fs "$1" || > + ret=1 > + ;; > + esac > + > + return $ret > +} > + > ks_requires_part=("numfmt" "sfdisk") > part() > { > @@ -828,6 +881,8 @@ part() > > printf ', %s\n' "$size" | > sfdisk -q -N "$partnum" "/dev/$dev" > + > + ks_growfs "/dev/$dev$partnum" > fi > > if [ -n "$encrypted" ]; then > > Попробую и отпишусь. -- С уважением, Антон Мидюков