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 - знает с чего он загрузился - почему он не может поделиться этой информацией с ядром?
.
Этого недостатка нет, наверное, у /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) так:
Ничуть не хуже ручной сборки, и не надо вручную ядро и модули раскидывать по местам.
А так ядро прописывается в конфиге загрузчика:
WiseLord написал(а):ещё стоит
а если не использовать genkernel, uuid не будет работать?
UPD: информацию нашел, просьба удалить мой пост
зачем пост удалять? лучше
зачем пост удалять? лучше поделись информацией ;)
:wq