Using Grub to boot from USB drive

Добрый день,

Очень хотелось бы совета по следующему вопросу. Имеется внешний USB диск со следующей схемой разделов:
0: boot (ext2) ~ 100Mb
1: swap ~ 2Gb
2: root (reiserfs) ~ 30Gb
3: home (vfat) ~ 270Gb
(тут наверное самое важно, что раздел не один)
На этот диск установлен Gentoo Linux (последний на данный момент) и загрузчик Grub. Всё замечательно работает. Но если бы всё было так хорошо.
Если я вставлю в компьютер, скажем, USB-флешку то Linux перестаёт грузиться по вполне очевидной причине. В опциях ядра я передаю real_root=/dev/sdb3. Если флешки в компьютере нет, то /dev/sdb3 - это как раз моя рутовая партиция и всё хорошо, но с USB флешкой /dev/sbd - это как раз флешка, а USB-диск уже /dev/sdc.
Т.е. проблема заключается в том, что я не понимаю как можно указать ядру (даже точне скрипту linuxrc из initramfs) какой раздел и с какого устройства монтировать? Нотация, используемая ядром не подходит, т.к. на разных компьютерах мой USB-диск будет ассоциирован с разными именами устройств. От сюда же вылезает проблема с fstab - там также имеется жёсткая привязка к именам устройств :(
Я вижу решение проблемы в том, чтобы явно указывать ядру, какому устройству дать имя sda и затем использовать имя sda в параметре real_root и в fstab. Но, я к сожалению не нашёл способа сделать это. Загрузчик (grub) знает, что мы грузимся с диска (hd0), но я не нашёл передать это знание в удобоваримом формате для ядра.

Хотелось бы выслушать ваши соображения по этому вопросу.

UUID

http://ru.wikipedia.org/wiki/UUID
UUID - универсальный идентификатор диска. Куда бы диск не повесили, хоть hdc, хоть sdb а UUID будет неизменным. Делать его не надо, он присваивается при создании файловой системы. Посмотреть его можно на выбор:

1. blkid
2. ls -l /dev/disk/by-uuid/

Спасибо

Я пробовал это способ. Правда не уверен, что я его правильно применял. Делал следующее - указывал в параметрах ядра real_root=/dev/disk/by-id/[id of my partition].
Сейчас я начинаю вспоминать, что тогда забыл указать rootdelay - сегодня попробую ещё раз.
Однако, у этого способа есть есть один важный недостаток - я не смогу скопировать образ своего диска на другой такой же без последующей его модификации (т.к. у другого диска - другой uuid). Конечно, можно написать скрипт для копирования образов... Тем не менее, меня не перестаёт мучать вопрос - grub - знает с чего он загрузился - почему он не может поделиться этой информацией с ядром?

.

wonder.mice написал(а):
/dev/disk/by-id/
один важный недостаток

Этого недостатка нет, наверное, у /dev/disk/by-label/ :
http://www.google.com/search?q=site:gentoo.ru+by-label

Зато есть другой недостаток

Вероятность одинаковых label у разных дисков (особенно стандартные названия вроде system, root, boot).

.

согласен. просто он хочет скопировать "образ своего диска на другой такой же без последующей его модификации".
Значит там получится ТОЧНО ТАКОЙ ЖЕ ДИСК, и подключать его ОДНОВРЕМЕННО с другим таким же не очень желательно.
Осталось топикстартеру только решить, какой из недостатков ему по душе.

но тем не менее

Grub идентифицирует загрузочное устройство как (hd0) - ему говорит об это bios.
Когда Grub пускает ядро - оно тоже знает с какого устройства произошла загрузка (по крайней мере, оно может точно также это спросить у bios'a, как это недавно сделал Grub).
Неужели нету способа, узнать какое устройство первое, с точки зрения bios'a?

.

.

неправильно

real_root=/dev/disk/by-id/[id of my partition]

надо

real_root=UUID=/dev/disk/by-uuid/[uuid of my partition]

P.S. Естественно, в /etc/fstab тоже нужны изменения (вместо /dev/hdaX пишем UUID=BLABLA..BLA)

ага, понял

Большое спасибо, думаю в этом и была ошибка - буду пробовать.

Ах да..

ещё стоит добавить, что ядро нужно собирать genkernel-ом.
Я обычно собираю на базе старого конфига (в /proc/config.gz) так:

cd /usr/src/linux; make mrproper
zcat /proc/config.gz > .config
genkernel --no-clean --disklabel --splash=livecd-2007.0 \
          --splash-res=1280x1024 --menuconfig all

Ничуть не хуже ручной сборки, и не надо вручную ядро и модули раскидывать по местам.
А так ядро прописывается в конфиге загрузчика:

title Gentoo Linux 2.6.27-r3
root (hd0,0)
kernel /kernel-genkernel-x86_64-2.6.27-gentoo-r3 root=/dev/ram0 \
        real_root=UUID=e0e56a5e-3b98-a05b-7721-3584e5697ff6 \
        video=uvesafb:1280x1024-32,mtrr:3,ywrap vga=0x31b \
        splash=silent,theme:livecd-2007.0 console=tty1
initrd /initramfs-genkernel-x86_64-2.6.27-gentoo-r3

WiseLord написал(а):ещё стоит

WiseLord написал(а):
ещё стоит добавить, что ядро нужно собирать genkernel-ом.

а если не использовать genkernel, uuid не будет работать?

UPD: информацию нашел, просьба удалить мой пост

зачем пост удалять? лучше

зачем пост удалять? лучше поделись информацией ;)

:wq

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

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