LINUX.ORG.RU
решено ФорумAdmin

PARTUUID вместо UUID при загрузке ядра

 , , ,


0

3

А что за тема, везде пишут, что надо в качестве параметра ядра указывать root=UUID=befdce9b-63ea-4fa2-bfaf-635c9031f7f0 ro init=/usr/lib/systemd/systemd rootfstype=ext4 crashkernel=256 nvidia_drm.modeset=1 delayacct intel_pstate=hwp_only nodhcp.

Однако у меня это не работает. При загрузке паника ядра: Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0).

Но прекрасно работает если отправить PARTUUID="64881135-9900-4c27-b976-3423934bd987".

Зачем в мануалах врут и говорят неверный UUID?

Кстати dracut также неверный UUID подсовывает.

★★★★

А что за тема, везде пишут, что надо в качестве параметра ядра указывать

Где пишут? У меня например в загрузчике указывается и то и это

image=/boot/vmlinuz-6.1.69
        label=crux
        append="root=PARTUUID=0f3bf4cb-01 intel_pstate=active mitigations=off"
        root="UUID=4f226b87-b2dd-435b-aed4-a7063f0bbf89"
        #initrd=/boot/initramfs-linux.img
        read-only

vbcnthfkmnth123 ★★★★★
()
Ответ на: комментарий от keeper_b

Я тоже жалуюсь. Но я не разбирался, просто списал неудачу на свою тупость и тыкал случайные цифры из gparted'a, пока не заработало.

HE_KOT
()
Последнее исправление: HE_KOT (всего исправлений: 1)
Ответ на: комментарий от bormant

Обеим Фомам с «пальцем вниз» на память ;)

Documentation/admin-guide/kernel-parameters.txt

root=[KNL] Root filesystem
Usually this a a block device specifier of some kind,
see the early_lookup_bdev comment in
block/early-lookup.c for details.
Alternatively this can be "ram" for the legacy initial
ramdisk, "nfs" and "cifs" for root on a network file
system, or "mtd" and "ubi" for mounting from raw flash.

block/early-lookup.c
/*
 *	Convert a name into device number.  We accept the following variants:
 *
 *	1) <hex_major><hex_minor> device number in hexadecimal represents itself
 *         no leading 0x, for example b302.
 *	3) /dev/<disk_name> represents the device number of disk
 *	4) /dev/<disk_name><decimal> represents the device number
 *         of partition - device number of disk plus the partition number
 *	5) /dev/<disk_name>p<decimal> - same as the above, that form is
 *	   used when disk name of partitioned disk ends on a digit.
 *	6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
 *	   unique id of a partition if the partition table provides it.
 *	   The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
 *	   partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
 *	   filled hex representation of the 32-bit "NT disk signature", and PP
 *	   is a zero-filled hex representation of the 1-based partition number.
 *	7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to
 *	   a partition with a known unique id.
 *	8) <major>:<minor> major and minor number of the device separated by
 *	   a colon.
 *	9) PARTLABEL=<name> with name being the GPT partition label.
 *	   MSDOS partitions do not support labels!
 *
 *	If name doesn't have fall into the categories above, we return (0,0).
 *	block_class is used to check if something is a disk name. If the disk
 *	name contains slashes, the device name has them replaced with
 *	bangs.
 */
int __init early_lookup_bdev(const char *name, dev_t *devt)
{
	if (strncmp(name, "PARTUUID=", 9) == 0)
		return devt_from_partuuid(name + 9, devt);
	if (strncmp(name, "PARTLABEL=", 10) == 0)
		return devt_from_partlabel(name + 10, devt);
	if (strncmp(name, "/dev/", 5) == 0)
		return devt_from_devname(name + 5, devt);
	return devt_from_devnum(name, devt);
}

И никакого root=UUID=xxxx. Но если почитать стартовый скрипт в initrd, там и найдется и поиск раздела по UUID=, и переключение на него корня...

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от utanho

Я всё время обновлял ядро так:

make menuconfig
make -j20
make modules_install
make install

Раньше всего этого хватало, но последне время Gentoo что-то чудит.

Они вот чёт решили добавить загрузку образа initrd. Зачем-то начали монтировать раздел efi в корень, вместо /boot/efi и стали туда писать файлы загрузки.

keeper_b ★★★★
() автор топика
Ответ на: комментарий от utanho

Да, сейчас глянул впервые пакет sys-kernel/installkernel появился 12 января.

У меня всё время в параметр root= писался скриптом make install корневой раздел /dev/nvme0n1p3, а теперь он решил туда записать UUID и система перестала грузится.

keeper_b ★★★★
() автор топика
Ответ на: комментарий от utanho

Какие новости? Эти?

2024-01-05-usr-initramfs
Title                     Separate /usr now requires an initramfs
Author                    Eli Schwartz <eschwartz93@gmail.com>
Posted                    2024-01-05
Revision                  1

Systems which have /usr and / on separate filesystems have always required a
dedicated initramfs to bring up both partitions. Systems where both /usr and /
are on the same filesystem may use an initramfs if they wish, or choose not
to.

Historically, Gentoo has tried to make the separate filesystems use case work
anyway. Despite all our efforts, it is broken and continues to get more broken
under various configurations. The only workable solution is to support
separate /usr but only when an initramfs is present. For more details on why
this is broken, see:
11 years later, the support is being withdrawn. On 2024-02-05, we plan to
begin work on decommissioning existing workarounds and will not accept any
more.

User Action Required
====================

If you have separate /usr and are not currently using an initramfs, you have
until 2024-02-05 to set up an initramfs. If you do not, then at some point on
or after this date, routine system upgrades will leave your system unbootable.

For details on setting up an initramfs, see:

https://wiki.gentoo.org/wiki/Initramfs/Guide

Ну пробежался по диагонали, у меня раздел /usr не находится на отдельном диске. Меня это вроде как не касается.

keeper_b ★★★★
() автор топика

В общем нашёл такие опции:

GRUB_DISABLE_LINUX_UUID=true
GRUB_DISABLE_LINUX_PARTUUID=false

Первой выключаем UUID, а второй включаем PARTUUID.

После чего командой grub-mkconfig -o /boot/grub/grub.cfg все параметры получат правильный root=PARTUUID=64882135-9900-4c27-b976-3423934bd987.

Ещё можно отправить GRUB_DEVICE="PARTUUID=64881135-9900-4c27-b976-3421970ba987", будет тоже самое.

Но я вообще решил отказаться от GRUB и использовать UEFISTUB. Тогда вообще никакого загрузчика ненадо, токо муторно ядро записывать.

  1. Собираем ядро make oldconfig иmake`.
  2. Собираем драйвер NVidia emerge nvidia-drivers.
  3. Удаляем из прошивки материнки старые метки ядер efibootmgr -b 0 -B 0 и efibootmgr -b 1 -B 1.
  4. Переносим старое ядро в Backup mv /boot/efi/EFI/BOOT/BOOTX64.EFI /boot/efi/EFI/Backup/.
  5. Переносим новое ядро в раздел для загрузки cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/efi/EFI/BOOT/BOOTX64.EFI.
  6. Прописываем новые ядра с параметрами загрузки в прошивке UEFI efibootmgr -c -d /dev/nvme0n1 -L "Gentoo" -l "\EFI\BOOT\BOOTX64.EFI" -u 'root=PARTUUID=64882135-9900-4c27-b976-3421970ba987 ro init=/usr/lib/systemd/systemd rootfstype=ext4 crashkernel=256 nvidia_drm.modeset=1 delayacct intel_pstate=hwp_only nodhcp video=efifb:1920x1080' и efibootmgr -c -d /dev/nvme0n1 -L "Backup" -l "\EFI\Backup\BOOTX64.EFI" -u 'root=PARTUUID=64882135-9900-4c27-b976-3421970ba987 ro init=/usr/lib/systemd/systemd rootfstype=ext4 crashkernel=256 nvidia_drm.modeset=1 delayacct intel_pstate=hwp_only nodhcp video=efifb:1920x1080'.

Муторно, но работает и загрузка идёт быстрее.

keeper_b ★★★★
() автор топика
Ответ на: комментарий от anonymous

причем тут grub? я говорю что systemd-boot позволяет отредактировать одну строку из конфига, нельзя там поменять версию ядра, грузись если че с флешки в чрут, збс загрузчик

HomerSexual
()
Ответ на: комментарий от HomerSexual

и это не считая того факта, что ему ядро на ефи разделе подавай, вобщем-то ничео удивительного, я не удивлен что оно попало в системд, подобное к подобному так сказать

HomerSexual
()
Ответ на: комментарий от anonymous

мельком глянул, и там написано что ядро он ожидает увидеть где-то тут /EFI/Linux/*.efi.

покажи пожалуйста на примере, хочу загрузчик на efi разделе, а /boot раздел с ядрами в ext2, как будет выглядеть конфиг?

HomerSexual
()
Ответ на: комментарий от HomerSexual
Out of Focus

Referencing kernels or initrds on other partitions other than the partition containing the Type #1 boot loader entry. This is by design, as specifying other partitions or devices would require a non-trivial language for denoting device paths. In particular this means that on non-EFI systems boot loader menu entry snippets following this specification cannot be used to spawn other operating systems (such as Windows)

я в английском не силен, что это значит?

HomerSexual
()
Ответ на: комментарий от HomerSexual

Ядро и /loader/entries/*.conf он ожидает увидеть на разделе с типом «Linux Extended Boot» bc13c2ff-59e6-4262-a352-b275fd6f7172.

Драйвера на esp в /efi/systemd/drivers/, вот эти например: https://efi.akeo.ie/, или из refind.

/loader/entries/*.conf

linux x/vmlinuz
initrd x/initramfs
options ...
anonymous
()
Ответ на: комментарий от anonymous

Параметры ядра можно вкомпилять в него.

Я с этого начал, но мне не понравился данный вариант, так как для изменения параметров нужно пересобирать ядро.

keeper_b ★★★★
() автор топика
Последнее исправление: keeper_b (всего исправлений: 1)
Ответ на: комментарий от HomerSexual

А зачем он нужен, если можно ядро напрямую из БИОСа загружать? Получается лишняя сущность как и GRUB. Только GRUBом можно ещё и для флешек загрузчик записывать, а с Limine не понятно.

keeper_b ★★★★
() автор топика