вторник, 1 июня 2010 г.

Grub 2 (part 3)

востановление GRUB2 с LiveCD. способ 3 (совсем простой)
в случае, если нужно только восстановить MBR диска (например, после (пере)установки Windows), все можно сделать еще проще, вообще ничего не монтируя.
все так же грузимся с liveCD. определить, какой нужен жесткий диск можно опять же с помощью "sudo fdisk -l". если он один - значит, sda.
и вот, собственно, команда на "мат в один ход":
Код:
sudo grub-install --root-directory=/tmp /dev/sda
измените /dev/sda на нужный диск. все! можно снова грузиться с этого диска

создание LiveCD с GRUB2
в случае, если ваш компьютер не поддреживает загрузку с usb, можно создать cd-диск с grub2, через который можно будет загрузить свою систему при неисправности основного grub2.
для начала создадим в удобном месте папку, в которой будем собирать наш диск, а в ней вложенные папки "/boot" и "/boot/grub":
Код:
mkdir -p tmp/iso/boot/grub
теперь сразу же определимся с оформлением. если вам нужно простое черно-белое загрузочное меню - следующее действие можно пропустить. если же вы хотите получить менюшку с настраиваемым разрешением, более гибкой настройкой цветов и даже по желанию фоновым изображением - нам нужно будет добавить на диск шрифт, который используется для отображения графического меню. скопируем его:
Код:
cp /usr/share/grub/unicode.pf2 tmp/iso/boot/grub
теперь нам нужно написать файл конфигурации "grub.cfg", содержащий загрузочное меню и настройки. вы можете взять за основу ваш "/boot/grub/grub.cfg" и изменить его под текущие нужды, а можете написать его с нуля - оба варианта подходят если вы понимаете структуру "grub.cfg". в противном случае вы можете взять готовый шаблон, помещенный в конце этого раздела и отредактировать его.
для тех же, кто избрал "путь самурая" - подробнее о создании собственного "grub.cfg" вы можете почитать выше, в разделе "создание дополнительных меню загрузки". здесь же опишу лишь некоторые специфичные для LiveCD вещи.
если вы берете за основу "/boot/grub/grub.cfg" - уберите из него строки, задающие ваш рут-раздел системы в качестве root ("search.... uuid_раздела...."). корневым разделом должен быть cd-диск!
если вы выбрали вариант с графическим меню - нужно обязательно подгрузить скопированный ранее шрифт. кроме того, следует, собственно, включить графический режим. для этого добавьте такие строки:
Код:
loadfont /boot/grub/unicode.pf2
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else terminal gfxterm; fi
и еще один очень важный момент: в начале файла должна иметься такая строка:
insmod part_msdos
загрузка данного модуля обязательна! без него полученный grub2 увидит только жесткий диск, но не увидит таблицу разделов на нем, и такой LiveCD будет бесполезен.
про настройки цветов/разрешения и всего прочего читайте в вышеупомянутом разделе. а теперь же перейдем к созданию самого меню.
вы можете скопировать нужные пункты из "/boot/grub/grub.cfg", но я рекомендую написать их с нуля, ибо для корректной работы тамошних пунктов потребуется загрузка дополнительных модулей. а написать их несложно, для Linux-системы пункт меню должен иметь такой вид:
Код:
menuentry "9.10 @ 2.6.32" {
search -u uuid_раздела -s
linux /boot/vmlinuz-xxxxxxx root=/dev/sdXY quiet splash single или_что_там_еще
initrd /boot/initrd.img-xxxxxx
}
в качестве uuid нужно задать тот раздел, где находится ваш /boot (если у вас общий / - пишите его, если отдельный /boot-раздел - именно его и указываем, а не /. в случае с отдельным /boot пути будут выглядеть как "/vmlinuz...." и "/initrd....")
для Windows будет что-то такое:
Код:
menuentry "winxp" {
searсh -u uuid_раздела_с_win -s
chainloader +1
}
закончив с файлом, сохраняем его как "grub.cfg" в целевой папке (в моем случае - "~/tmp/iso/boot/grub/grub.cfg"). теперь мы готовы к созданию iso-образа нашего LiveCD. в этом нам поможет утилита grub-mkrescue. команда будет выглядеть так:
Код:
grub-mkrescue --overlay=tmp/iso/ tmp/grub.iso
вместо "tmp/iso" укажите свою папку, вместо "tmp/grub.iso" - путь, куда сохранить полученный iso-образ.
если все успешно - получаем на выходе очень небольшой iso-шник (~2.8M), прожигаем его на rw-шку и пробуем грузиться!
ниже, как и обещал, привожу пример файла "grub.cfg", корректно работающего на LiveCD с комментариями:
(Кликните, чтобы показать/скрыть)

создание LiveCD с GRUB2 на базе имеющегося дистрибутива.
(за идею спасибо тов. komix)
поскольку тратить целую болванку ради записи iso-шника с grub2 в 3 мегабайта было бы глупо, можно совместить приятное с полезным, а именно: LiveCD с grub2 и установочный диск какой-нибудь системы. исходить мы будем из того, что имеется iso некоего LiveCD, к которому мы хотим прикрутить grub2.
порядок действий будет в целом аналогичен описанному в предыдущем пункте. первым делом создадим папку, в которой будем собирать наш новый диск. в ней же создадим папку /boot/grub и папку, в которую будут помещены файлы нашей live-системы (я назову ее live):
Код:
mkdir -p tmp/iso/{boot/grub,live}
теперь нам нужно примонтировать iso-образ нашей системы в свежесозданную папку для нее:
Код:
sudo mount -o loop downloads/some-live-system.iso tmp/iso/live
теперь создайте "grub.cfg", как это описано в предыдущем пункте (не забудьте скопировать файл шрифта, если хотите использовать графическое меню). здесь все аналогично вышеописанному способу, но с той лишь разницей, что в меню мы добавим пункт для загрзуки нашей live-системы.
как именно нужно запускать "живое ядро"? на этот вопрос нет универсального ответа. узнать это можно, покопавшись в настройках прилагаемого загрузчика (обычно это isolinux или же старый grub - в обоих случаях понять логику несложно). приведу конкретный пример для мини-дистрибутива Parted Magic:
Код:
menuentry "Parted Magic" {
linux /live/bzImage
initrd /live/initramfs
}
в данном случае этого будет достаточно. для других систем могут потребоваться дополнительные параметры загрузки ядра. ядро же может лежать в "/live/boot" или в другой папке в зависимости от конкретного дистрибутива.
обратите внимание на то, что здесь не используются строки вида "set root..." или "search...". если вы создали правильный "grub.cfg", то корневым разделом при загрузке устанавливается cdrom, поэтому нет нужды его задавать повторно.
после того, как "grub.cfg" готов, можно приступить к созданию iso-образа:
Код:
sudo grub-mkrescue --overlay=tmp/iso tmp/my-live-system-grub2.iso
продолжительность процесса зависит от размера оригинального дистрибутива. по окончании получаем свежеиспеченный iso-образ с оригинальным дистрибутивом и бонусом в виде grub2.
отмонтируем оригинальный iso:
Код:
sudo umount tmp/iso/live
и прожигаем новый iso-шник на болванку. грузимся и проверяем результат

1 комментарий:

Анонимный комментирует...

Ты, кстати, не знаешь, как из груба загрузить опенсолярку, которая лежит на образе iso на жёстком диске? У меня что-то не получается.

P.S. Да, кстати, так верстают (ну ты понял) - посмотри хоть, что ты написал, и можно ли это прочитать. :) Выдели заголовки жирным крупным шрифтом и т.п... чтобы ориентироваться было проще.