Сейчас /sbin/installkernel ставит при установке новых ядер в конфиг grub/lilo указание корневого раздела в виде /dev/[hs]d[a-z][0-9]+. Насколько я понимаю, в свете последних же ядер (> 2.6.27) стОйт добавлять вместо этого UUID/LABEL.
(In reply to comment #0) > Насколько я понимаю, в свете последних же ядер (> 2.6.27) Ты тоже перепутал баг udev с ожидаемым поведением новых ядер или у тебя другие соображения?
Надоело редактором menu.lst править под каждое новоя ядро.
(In reply to comment #2) > Надоело редактором menu.lst править под каждое новоя ядро. Это надо было сделать один раз после переезда IDE на libata.
Я и сделал давно для ядра по умолчанию. Да и новые с root=/dev/ работают какбы и так, но как-то неаккуратно. Это даже скорее не [FR], а Proposal.
bootloader-utils-0.4.1-alt1 -> sisyphus: * Wed Sep 16 2009 Vladislav Zavjalov <slazav@altlinux> 0.4.1-alt1 - installkernel: - change lilo restarting logic (closes #1014, #1015, #20695): old behaviour: restart lilo if first bootloader found in devices from /proc/partitions is lilo new one: restart lilo when lilo bootloader is found in device from boot= setting in lilo.conf - when detectliloboot.sh fails to find device, there are no need to run detectloader.sh (thx Dmitry V. Levin) (closes: #21106) - suppress unwanted output from cd - - detectloader: replace by two shell scripts: detectliloboot.sh -- to get boot device from lilo.conf detectloader.sh -- to get bootloader type on the given device or file - bootloader_utils.pm: - (getroot): recognize UUID and LABEL (thx Dmitry V. Levin) (closes: #2194, #18127) - remove unused functions (partitions, typeOfMBR) used in removed detectloader program - rebootin - remove GRUB support - fix working with quoted labels in lilo.conf (closes: #11446). - cleanup code, improve error and help messages - add long options, add -l option for listing available labels. - update manpage - remove URL and Packager tags (thx Dmitry V. Levin).
Спасибо.
Хорошо, только не работает. Столкнулся при обновлении ядра вот с такими синдромами: http://lists.altlinux.org/pipermail/sisyphus/2005-July/283571.html (только уже std-def и без ругани от modprobe). Также создались симлинки, "Can't convert grub partition" два раза подряд и ничего не добавилось в menu.lst. bootloader-utils уже 0.4.2-alt1. Конфигурация такая: evg@evg ~ $cat /proc/cmdline root=LABEL=NEWROOT vga=788 quiet evg@evg ~ $GR LABEL=NEWROOT /etc/fstab LABEL=NEWROOT / ext3 defaults 1 1 evg@evg ~ $df -h /boot Файловая система Разм Исп Дост Исп% смонтирована на /dev/hda2 3,0G 2,5G 342M 89% /
Created attachment 3954 [details] Патч на bootloader-utils-0.4.2-alt1 Мне помог приложенный патч. Дело в том, что mnt2dev забыли обучить возвращать dev (/dev/foo) если mnt (аргумент) имеет вид LABEL/UUID=XXX, что происходит при наличии этого самого LABEL/UUID=XXX в cmdline (и таким образом getroot возвращает LABEL/UUID=XXX). Соответственно dev2grub не знал, как преобразовать LABEL/UUID=XXX в (hdY, Z). Патч же "восстанавливает историческую справедливость" :-)
mnt2dev() вообще-то совсем не для того - это поиск устройства по точке монтирования. Применять ее же еще и для поиска устройства по UUID/LABEL, как в этом патче - весьма странно. Я попробую тут разобраться.
Но, вообще-то и без патча устройства и точки монтирования кажутся перемешанными в этом кусочке: my $bootdev = mnt2dev("/boot"); my $boot = $bootdev ? "" : "/boot"; my $root = getroot; my $grub_part = dev2grub($bootdev ? $bootdev : $root); die "Can't convert grub partition\n" unless $grub_part; Это при том, что dev2grub хочет только аргументы вида /dev/sda3
(В ответ на комментарий №10) у меня отладка этого куска под perl-debugger-ом дала следующее: my $bootdev = mnt2dev("/boot"); -> undef/nil my $boot = $bootdev ? "" : "/boot"; -> "/boot" my $root = getroot; -> "LABEL=NEWROOT" my $grub_part = dev2grub($bootdev ? $bootdev : $root); -> undef/nil die "Can't convert grub partition\n" unless $grub_part; > Это при том, что dev2grub хочет только аргументы вида /dev/sda3 Поэтому и обучил его принимать uuid/label.
(В ответ на комментарий №9) > mnt2dev() вообще-то совсем не для того - это поиск устройства по точке > монтирования. > Применять ее же еще и для поиска устройства по UUID/LABEL, как в этом патче - > весьма странно. Согласен, странно, но я старался минимизировать патч и максимально использовать существующий код.
Ну т.е. до "обучения" getroot-а UUID/LABEL цепочка вызовов(результатов) была такая: getroot(/dev/hda2)->dev2grub(hd0,1) а после стала такой: getroot(LABEL=NEWROOT)->dev2grub(nil) т.к. getroot возвращающий LABEL/UUID=XXXX судя по коду используется в /u/s/loader/lilo, то ломать его я не стал, а стал править dev2grub. Для того чтобы минимумом движений преобразовать LABEL в /dev/hda2 мне проще всего показалось использовать код mnt2dev.
> Но, вообще-то и без патча устройства и точки монтирования кажутся > перемешанными в этом кусочке: прошу прощения, тут все хорошо. > Согласен, странно, но я старался минимизировать патч и максимально > использовать существующий код. Но mnt2dev совсем уж не для того. В ней действительно есть (странный на мой взгляд) финт: если в fstab UUID/LABEL - взять устройство из mtab. Но это, наверное, не повод наделять ее неочевидным двойным назначением (искать аргумент и среди точек монтирования и среди устройств вида UUID/LABEL) Надо бы, наверное, придумать отдельную функцию либо на эту тему, либо на тему blkid. И прогонять через нее все, что отдается в dev2grub. Тогда, кстати, и от финта в mnt2dev можно будет избавиться.
> Но mnt2dev совсем уж не для того. В ней действительно есть (странный на мой > взгляд) финт: если в fstab UUID/LABEL - взять устройство из mtab. Мне кажется, финт правильный: если для /mnt в fstab устройство указано путём UUID/LABEL, попытаться определить /dev/blah из mtab. > Но это, наверное, не повод наделять ее неочевидным двойным назначением (искать > аргумент и среди точек монтирования и среди устройств вида UUID/LABEL) Вообще, если нет четко определённого интерфейса (определения, кто что делает и кто кому что возвращает), то и нарушение то это небольшое. Чисто на уровне интуиции. Можно просто переименовать mnt2dev в any2dev :-) > Надо бы, наверное, придумать отдельную функцию либо на эту тему, либо на тему > blkid. И прогонять через нее все, что отдается в dev2grub. > Тогда, кстати, и от финта в mnt2dev можно будет избавиться. "Мне всё равно, кого пытать, лишь бы работало хорошо"(с) :-)
этот код используется и в detectliloboot.sh и в alterator-lilo. Не вынести ли его в отдельнй скрипт? http://git.altlinux.org/people/slazav/packages/?p=bootloader-utils.git;a=commit;h=8682de9c104292286d80f331481e8249da829b9f
Я бы рекомендовал использовать фичу wildcard (info grub wildcard) и сказать installkernel'у никогда-никогда не обновлять menu.lst.
Интересная идея. P.S.: на что только не идут люди, чтобы не читать документацию. Это я про себя :-)
Идея эта оказывается единственно рабочей, поскольку у grub нет глобального "append". Если какой-то нестандарт в опциях появляется, сразу либо только дефолтное ядро, либо после каждого обновления с болью и страданиями копипастить эти опции на все ядра. Поскольку grub у нас официально не поддерживается (или не поддерживается официально), лучше всю его недоподдержку убрать совсем.
Этого то я и боялся. :-) Однако, тоже вариант, и вполне себе нормальный.
bootloader-utils-0.4.3-alt1 -> sisyphus: * Mon Oct 05 2009 Vladislav Zavjalov <slazav@altlinux> 0.4.3-alt1 - add convertdev.sh script co convert UUID=.. or LABEL=.. to device names use it in detectliloboot.sh and grub scripts (closes #18127) - bootloader_utils.pm: mnt2dev(): don't use mtab to convert device names
Столкнулся с тем, что не установилось в /b/g/menu.lst ядро 2.6.32-std-def-alt10 с руганью Can't convert grup partition. Оказалось, это связано с тем что в /b/g/menu.lst прописан диск /dev/hda, который после одного обновления ядра виден как /dev/sda. Возможно, стОйт ослабить требование на полное совпадение строк (например, для тех кто будет обновлять старый дистрибутив до нового)? 2raorn: wilcard работает, работает.
Первый grub был выпилен из сизифа поганой метлой и ссаными тряпками.
Ах, как я мог забыть. Ну, мир его праху.