Вы здесь

[SOLVED]И снова GRUB2 vs UUID...

Доброго времени суток!
Устанавливаю я Gentoo на новый компьютер. При загрузке с LiveCD_minimal жёсткие диски определяются следующим образом:

# parted -l
Модель: ATA ST3000DM001-1CH1 (scsi)
Диск /dev/sda: 3001GB
Размер сектора (логич./физич.): 512B/4096B
Таблица разделов: gpt
Disk Flags: 

Номер  Начало  Конец   Размер  Файловая система  Имя      Флаги
 1     1049kB  3146kB  2097kB                    grub     bios_grub
 2     3146kB  137MB   134MB   ext2              boot
 3     137MB   21,1GB  21,0GB  ext4              rootfs
 4     21,1GB  3001GB  2979GB  ext4              storage

Модель: ATA Hitachi HDS72101 (scsi)
Диск /dev/sdb: 1000GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Disk Flags: 

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
 1     32,3kB  1000GB  1000GB  primary  xfs

Cоответственно, при формировании конфига груба grub2-mkconfig -o /boot/grub/grub.cfg в конфиге появляются такие строки

        echo    'Загружается Linux 3.15.5-hardened-r2 …'
        linux   /vmlinuz-3.15.5-hardened-r2 root=/dev/sda3

При загрузке новоустановленной системы ядро паникует (не находит корень) из-за того, что теперь (в этой новой системе) /dev/sda - уже диск 1TB.
Если перед загрузкой в меню груба руками изменить строчку
linux /vmlinuz-3.15.5-hardened-r2 root=/dev/sda3
на
linux /vmlinuz-3.15.5-hardened-r2 root=/dev/sdb3
то всё нормально загружается.
Если снова загрузиться с LiveCD_minimal, то диски снова именуются 3TB - /dev/sda, 1TB - /dev/sdb.

Теперь вопрос, если загрузка системы напрямую зависит от строки, где раздел указывается как /dev/sd*, то какой толк тогда от UUID?
Ладно первый груб не использовал UUID для загрузки ядра, но почему второй груб тоже этого не делает?

Есть мнение, что здесь на UUID (или может лучше сразу LABEL) нужно переписать и /etc/fstab.

:wq
--
Live free or die

Anarchist написал:
Есть мнение, что здесь на UUID (или может лучше сразу LABEL) нужно переписать и /etc/fstab.

Дык он то переписан (fstab) и там всё ок, но какое отношение он имеет? груб чихал на fstab с высокой колокольни...

Вообще, по умолчанию grub2-mkconfig при генерации Linux конфигураций для указания корневого раздела использует UUID, есть даже соответствующий параметр для отключения использования UUID (GRUB_DISABLE_LINUX_UUID=true), его нужно прописывать в /etc/default/grub, что бы использовать /dev/sdXY для именования корня.

Но ядро само по себе не умеет определять корень по UUID, для этого нужно использовать initramfs (initrd), чего у тебя видимо нет, поэтому grub2-mkconfig и не стал прописывать корень через UUID.

Отсюда вывод: не читаешь ты документацию, если читаешь - то не понимаешь, если понимаешь - то не так.

В общем, если тебе нужен UUID в конфиге GRUB2, то используй initramfs, а до тех пор ССЗБ.

Иди читай документацию прежде, чем кричать, что всё криво работает. По криво работаешь ты сам.

kostik87 написал:
Но ядро само по себе не умеет определять корень по UUID

Ага, теперь всё ясно. За 10 лет ничего не изменилось. А я надеялся, эх...

Костик, ты не совсем прав. Еще и другого в кривизне упрекаешь. Ядро таки умеет UUID без инитрамы (правда таки PARTUUID), но в свете вопроса – монтирования корня по идентификатору без инитрамы – это несущественно.

Да, спасибо за то, что поправили.

т.е. мне нужно прописать в /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="root=PARTUUID=XXXXXXXXXXXXXX"
я правильно понял?

я навскидку не помню в какую переменную вписывать, но верно. можно еще добавить rootfstype= и rootflags= по необходимости.

Ну, в общем, это GRUB_CMDLINE_LINUX_DEFAULT="root=PARTUUID=XXXXXXXXXXXXXX" работает, но по сути - костыль, т.к. просто добавляет значение в конец строки. Получается что-то типа
linux /vmlinuz-3.15.5-r2 root=/dev/sda3 ro root=PARTUUID=ХХХХХХХХХХХХХХХХХХ
Пробовал из меню самого груба изменять root=/dev/sda3 на разные значения - загружается, т.е. последняя директива root= перебивает первую.
Как правильно, всё-таки?

Цитата:
Как правильно, всё-таки?

Редактируй конфиг grub.cfg руками.

Как правильно?
Вариантов масса. я для себя сделал в grub.cfg скриптоту, которая сама читает из файла список ядер и их параметров и формирует меню динамически. Можно еще освоить-таки параметры грабовской генерилки.
Да, и стоит указать, что несмотря на логичность решения root=PARTLABEL, оно не поддерживается – что бы ни писали в интернетах.

kostik87 написал:
Редактируй конфиг grub.cfg руками.

годы идут, софт развивается ...а мы всё по старинке, руками правим
что-то не кажется мне этот способ правильным, по крайней мере по отношению к grub2

Beelzebubbie написал:
несмотря на логичность решения root=PARTLABEL, оно не поддерживается – что бы ни писали в интернетах.

почему?

>>по старинке
Ну да, в metro удобнее наверное. «ничего не править руками» это явно даже не только не в этот дистро, но даже и не в ту ОС. Когда автоматизация от апстрима не устраивает – пишем ее сами. Никакое решение не удовлетворит всех и каждого.

>>не кажется мне этот способ правильным
а нафига тогда у граба2 есть (убогенький конечно), но таки интертрепатор? почему бы им и не пользоваться?

>>почему?
почему _что_именно_ ?

sspphheerraa написал:
kostik87 написал:
Редактируй конфиг grub.cfg руками.

годы идут, софт развивается ...а мы всё по старинке, руками правим
что-то не кажется мне этот способ правильным, по крайней мере по отношению к grub2

Например, сейчас у меня:


# grub2-mkconfig
/usr/sbin/grub2-probe: error: failed to get canonical path of `aufs'.

Поэтому правлю руками, т.к. в 99% случаях исправление - смена версии ядра или раздела с корнем

имхо, нету смысла тратить времени на автоматизацию

Beelzebubbie написал:
почему _что_именно_ ?

почему_вот_это

Beelzebubbie написал:
несмотря на логичность решения root=PARTLABEL, оно не поддерживается – что бы ни писали в интернетах.

просто интересно

да я и запретил. просто так. :D

вероятно, кто-то счел лишним соответствующий код – поскольку LABEL это неТРУЪ, ибо может запомнить каждый. ну и несколько сотен байтов опять же сэкономили.

Только учти, что UUID и PARTUUID - это разные вещи. UUID - это идентификатор файловой системы, а PARTUUID - это идентификатор раздела. Причем последний присутствует только если диск разбит с помощью GPT: при использовании MBR никаких PARTUUID нет.

Цитата:
Причем последний присутствует только если диск разбит с помощью GPT: при использовании MBR никаких PARTUUID нет.

Вы не правы:

# blkid
/dev/sda1: LABEL="PQSERVICE" UUID="12E6EF4FE6EF3221" TYPE="ntfs" PARTUUID="9293a969-01" 
/dev/sda2: LABEL="Acer" UUID="944A6F2B4A6F0976" TYPE="ntfs" PARTUUID="9293a969-02" 
/dev/sda3: UUID="B0EAE837EAE7F78C" TYPE="ntfs" PARTUUID="9293a969-03" 
/dev/sda4: UUID="Yy2Xfp-GRwj-ozYm-TFJQ-oYfo-p1A4-WpVgka" TYPE="LVM2_member" PARTUUID="9293a969-04"


# fdisk -l /dev/sda
Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x9293a969

Устр-во   Загрузочный     Start Конец    Blocks  Id System
/dev/sda1                  2048   33556479  16777216  27 Hidden NTFS WinRE
/dev/sda2 *            33556480  369100799 167772160   7 HPFS/NTFS/exFAT
/dev/sda3             369100800  998246399 314572800   7 HPFS/NTFS/exFAT
/dev/sda4             998246400 1953525167 477639384  8e Linux LVM

А не соизволите ли показать вывод

ls -l /dev/disk/by-partuuid/

?

Его нет и тем не менее, в выводе blkid есть partuuid, другая система, где я не использую LVM (на работе) как раз монтирует корень по PARTUUID, с обычным mbr, завтра вам покажу gif`ку или запись с экрана.

Можете сами проверить то, что я написал просто вызвав утилиту

blkid

Вот выдержка из http://wiki.gentoo.org/wiki/GRUB

Цитата:
Since kernel 3.8 and newer it is possible to use MBR 32-bit UUID, so you can use a MBR partition table as well.
In this case PARTUUID refer to an MBR 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.

Перевод от google:

Цитата:
Поскольку ядра 3,8 и новой можно использовать MBR 32-битный UUID, так что вы можете использовать таблицу разделов MBR, а также.
В этом случае PARTUUID относятся к разделу MBR с помощью формата SSSSSSSS-ПП, где SSSSSSSS является нулями шестигранной представление 32-бит "NT диска подписи", и ПП является нулями шестигранной представление на основе 1 номер раздела.

Так что на MBR так же есть PARTUUID.

Интересная информация. Кстати, а какие утилитки умеют назначать сей UUID/идентификатор диска? fdisk как-то давно в руки не брал, но не припомню там такого… да и вообще не попадалось.

Да, проверил, действительно работает и с MBR. Признаю, что, действительно, ошибался. Гифку можешь не показывать. :)

$subj! есть же UEFI… если комп не особо старый

Итак, спустя 3 года, резюмирую. Чтобы не было чехарды с разделами при загрузке, в системах без initramfs, необходимо задавать:
в /etc/default/grub

GRUB_DEVICE="PARTUUID=XXXXXXXXXXX"

в /etc/fstab

UUID=XXXXXXXXX

Вот это терпение!