[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 написал(а): Есть

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 написал(а): Но ядро

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

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

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

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

почему?

>>по старинке Ну да, в metro

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

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

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

sspphheerraa

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

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

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

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

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

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

Beelzebubbie

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

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

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

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

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

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

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

Только учти, что UUID и

Только учти, что 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. Признаю, что, действительно, ошибался. Гифку можешь не показывать. :)

зачем вообще grub?

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

Итак, спустя 3 года,

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

GRUB_DEVICE="PARTUUID=XXXXXXXXXXX"

в /etc/fstab

UUID=XXXXXXXXX

Ну и ну!

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

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".