(Кликните, чтобы показать/скрыть)
даунгрейд до grub-legacy (возврат старой версии).
в случае, если ваша дружба с grub2 так и не состоялась, вы можете заменить его на старый grub (ныне известный как grub-legacy), который на текущий момент более стабилен. и привычен для многих.
для начала, конечно же, сделаем бэкап важных файлов. создайте резервную копию файлов конфигурации как описано конце I-ой главы. также желательно забэкапить папку "/boot/grub". для этого выполните
Код:
sudo cp -R /boot/grub{,.bak}
Код:
sudo apt-get purge grub2 grub-pc
теперь установим grub версии 0.97:
Код:
sudo apt-get install grub
Код:
sudo update-grub
Код:
sudo grub-install /dev/sda
если установка прошла успешно - перезагружаемся и видим старый добрый grub с его menu.lst и без лишних хитростей
(Кликните, чтобы показать/скрыть)
создание аварийно-спасательного GRUB2-liveUSB
здесь мы рассмотрим, как создать загрузочную флэшку с установленным на нее grub2, через который можно будет загрузиться в случае, если grub2 на жестком диске безнадежно испорчен. есть, конечно, возможность восстановления с liveCD, но никогда не помешает дополнительная страховка на случай, если это не спасет. тем более, что потребуется для этого не так уж много.
итак, имеем флэшку. на этой самой флэшке нужно будет создать небольшой раздел для установки туда grub2. здесь подразумевается, что вы уметее создавать и форматировать разделы. если нет установите gparted, почитайте его справку и другую доступную информацию.
итак, откусим кусок свободного места и создадим небольшой раздел. 100 мб будет более чем достаточно (впрочем, хватит и 50). в качестве файловой системы выберите ext4/ext3. причина проста; reiserfs займет на 100-мегабайтном разделе 32 мб, а ext4 - всего 8. закончив с разделом, загрузитесь с liveCD.
примонтируйте свежесозданный раздел как папку "/boot/grub" запущенной live-системы. (здесь и далее будем считать, что раздел именуется "/dev/sdb1". подставляйте свое значение, если это не так)
Код:
sudo mount /dev/sdb1 /boot/grub
Код:
sudo grub-install /dev/sdb
отмонтируем флэшку
Код:
sudo umount /boot/grub
в принципе, вышеописанных операций достаточно для того, чтобы загрузиться с флэшки в работающий grub2. однако, меню загрузки вы не увидете, а попадете сразу в консоль. если у вас нет опыта работы с консолью grub2, или вы просто хотите сделать процесс более удобным, придется совершить еще несколько действий, чтобы получить полноценный grub2 с менюшкой.
грузимся с жесткого диска, запускаем обычную систему.
монтируем раздел с grub2. по умолчанию он смонтируется автоматом в "/media", причем в качестве точки монтирования будет использован uuid раздела. отмонтируйте его через апплет или значок на рабочем столе и примонтируйте в "/mnt":
Код:
sudo mount /dev/sdb1 /mnt
Код:
sudo mkdir -p /mnt/config/{default,grub.d}
Код:
sudo cp -p /etc/grub.d/* /mnt/config/grub.d/
Код:
sudo cp -p /etc/default/grub /mnt/config/default
после внесения необходимых правок мы можем приступить к созданию "grub.cfg" на нашем разделе. для этого потребуется еще несколько манипуляций. нижеприведенные команды вы можете выполнить по отдельности, но я рекомендую для дальнейшего удобства сохранить эти строки в виде скрипта, поместив файл, например, в "/mnt/config/grub-usb-update" и установив ему права 755.
Код:
sudo mount --bind /mnt/config/default/grub /etc/default/grub
sudo mount --bind /mnt/config/grub.d /etc/grub.d
sudo grub-mkconfig -o /mnt/grub.cfg
sudo umount /etc/default/grub
sudo umount /etc/grub.d
если вы последовали совету выше и сохранили скрипт, достаточно будет его запустить одной командой:
Код:
/mnt/config/grub-usb-update
ну а сейчас отмонтируем флэшку
Код:
sudo umount /mnt
загрузка другого grub2 из текущего.
как выяснилось в ходе экспериментов, все весьма просто. загружаемся в grub2, переходим в консоль нажатием "c". загрузка другого grub2 происходит по методу "set root - chainloader - boot". для начала определимся с диском, в MBR которого прописан grub2, который мы собираемся загрузить. выполните команду
Код:
ls
Код:
set root=(hd1)
Код:
root (hd1)
передаем управление по цепочке
Код:
chainloader +1
Код:
boot
консоль grub2 - команды и хитрости.
здесь мы рассмотрим некоторые команды консоли grub2. все мы разбирать не будем, а изучим лишь самые необходимые и полезные. напомню, чтобы попасть в консоль, нужно нажать "c" во время отображения меню загрузки. итак, начнем!
- ls
также она может быть использована как одноименная команда в linux - для вывода содержимого папки. например,
Код:
ls /boot/grub
еще одно полезное свойство комадны "ls" - она позволят получить информацию о любом разделе:
Код:
ls (hd0,5)
- cat
Код:
cat /путь/имя_файла
- linux
Код:
linux файл_ядра опция1=значение опция2 опция3
Код:
linux /boot/vmlinuz-2.6.32-020632-generic root=/dev/sda5 single
- initrd
Код:
initrd /boot/initrd.img-2.6.32-020632-generic
- chainloader
Код:
chainloader /путь/имя_файла
Код:
chainloader +1
- boot
- root
также команда может быть использована для задания другого root-раздела. раздел задается в "grub device" формате, то есть "(hd*,*)". например:
Код:
root (hd0,5)
примечание: "root hd(*,*)" не всегда корректно срабатывает. более предпочтительным вариантом является "set root" (см. ниже)
- set
Код:
set переменная=значение
Код:
set root=(hd0,5)
также с ее помощью можно, например, "на лету" изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. для этого изменяем переменные "color_normal" и "color_highlight" для обычного пункта (и текста в консоли) и выделенного пункта соответсвенно. например, попробуем такой вариант:
Код:
set color_normal=magenta/green
set color_highlight=light-blue/black
- search
имеет следующие ключи:
-u (или --fs-uuid) - поиск раздела по UUID
-l (или --label) - поиск по метке раздела
-f (или --file) - поиск по указанному файлу
-n (или --no-floppy) - не проверять флоппи-дисковод (чтоб не трещал)
-s (или --set) - установить найденный раздел в качестве значения заданной переменной.
зачем это нужно? дело в том, что при подключении/отключении жестких дисков (и в некоторых других случаях) нумерацию дисков и разделов может "поехать", и тогда наша команда "set root=(hd0,5)" в "grub.cfg" будет вести или в никуда или на раздел не того диска. поэтому в "grub.cfg" вы найдете строчку с "search".
для поиска раздела с известным нам uuid запустим "search" с ключом -"u":
Код:
search -u uuid_нужного_раздела
однако, UUID длинный, и хотя его и можно узнать, вводить вручную такое количество символов проблематично, и существует большой шанс сделать ошибку. вместо этого мы воспользуемя поиском по файлу, который точно имеется на нужном разделе. допустим, мы ищем раздел boot-раздел нашей системы. найдем его по файлу "grub.cfg":
Код:
search -f /grub/grub.cfg
получив искомое, можно вручную задать нужный раздел в качестве root-раздела, но гораздо проще воспользоваться ключом "-s". если после него не указана переменная, будет использована "root", то есть найденный раздел как раз и будет задан в качестве корневого. допустим, раздел с Windows имеет метку "C_drive". установим его в качестве корневого для загрузки с него:
Код:
search -l C_drive -s
(Кликните, чтобы показать/скрыть)
- lsfonts
- help
Код:
help r
Код:
help search
- halt
- reboot
- background_image
Код:
background_image /путь/имя_файла
при использовании без параметров сбросит текущее фоновое изображение. однако, заданные цвета останутся, так что если у вас черный цвет текста - на черном фоне вы его не увидите.
примечание: данная команда не заменит ваши настройки оформления, фон будет изменен лишь на текущий сеанс
- vbeinfo
- configfile
Код:
configfile /путь/другой_файл_меню
- terminal_output.console
если вы часто используете консоль grub2, имеет смысл добавить в 40_custom пункт с этой командой, например:
Код:
menuentry "black&white mode"{
terminal_output.console
}
ну и для полного счастья ниже я приведу небольшой список премудростей, которые помогут вам облегчить работу в консоли:
- уже упомянутое автодополнение команд (как в bash) по нажатию tab. tab в пустой строке выведет полный список доступных команд
- это самое автодополнение имеет нетривиальный способ изспользования. если вы не помните, какой раздел вам нужен, напишите "root (hd0," (или "root (hd1." и далее по списку) и нажмите tab. будет выведен список разделов заданного диска с указанием файловых систем, UUID и времени последнего изменения.
- имя раздела вида "(hd*,*)" можно использовать в начале пути к файлу, например, вот так:
Код:
cat (hd0,6)/home/username/папка/файл
Код:
ls (hd0,3)/
создание дополнительных меню загрузки.
в этом разделе мы рассмотрим создание своих собственных загрузочных меню со своей конфигурацией. суть в том, что вместо уже знакомого нам "grub.cfg" можно загрузить другой файл конфигурации. это позволяет создать дополнительное меню, совершенно другое - с другими пунктами, настройками. оформлением. те, кто имел дело с установкой ArchLinux, могли заметить несколько подменю в grub установочного диска. примерно такой метод мы и будем использовать.
итак, создадим наш новый файл конфигурации. писать с нуля мы его, конечно же, не будем, а сотворим на основе имеющегося "grub.cfg". для чего скопируем последний, дав новое имя, например:
Код:
sudo cp /boot/grub/{grub,custom}.cfg
Код:
sudo chmod 744 /boot/grub/custom.cfg
для начала найдем строку "set default=...." (у меня это 13-я строка). здесь можно задать пункт меню по умолчанию, указав или его номер или точное название. далее отыщем строку "set gfxmode...." (24-я в моем случае). здесь задается разрешение экрана в привычном формате WxH. можно также указать глубину цвета, например "1024x768x32". можно указать несколько вариантов, при этом если первый не сможет быть установлен, будет загружен второй, если и он не сработает - третий и т.д. варианты перечисляются через запятую и без пробелов:
Код:
set gfxmode=1024x768x32,1024x768x24,1024x768
настроим оформление нашего меню. для задания фонового изображения найдем строку с "if background_image....." (45). (здесь подразумевается, что в вашем grub.cfg используется фоновое изображение. если нет - смотрите пример файла в конце этого раздела). после команды background_image прописан путь к файлу картинки. поменяйте его на нужный файл. (обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!).
строкой ниже мы можем задать цвета текста. правятся они точно так же, как и в "/etc/grub.d/05_debian_theme" (подробнее о цветах читайте в главе II, раздел "настройка цвета пунктов меню"). еще можно проделать один интересный трюк: уберите строки с "set color_highlight" и "else". теперь настройка будет такой:
color_normal задает цвет/фон текста сверху и снизу (версия grub и комментарии) и текста в консоли
menu_color_normal отвечает за цвет пунктов меню и фон прямоугольника, в котором они находятся
menu_color_higlight задает цвет/фон выделенного пункта меню.
закончив с настройкой, перейдем собственно к пунктам. ниже идут пункты из вашего "grub.cfg". измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус. ниже будет приведен пример с немного отредактированными тремя пунктами загрузки.
настроив свой файл, сохраните его. теперь нам нужно добавить возможность загрузить его вместо "grub.cfg". для этого в последний нужно будет добавить еще один пункт, что мы сделаем через "/etc/default/40_custom". для смены файла конфигурации в grub2 используется команда "configfile". ей мы и воспользуемся, добавив в "40_custom" запись такого вида:
Код:
menuentry "my very custom menu"{
configfile /boot/grub/custom.cfg
}
если вы хотите, чтобы ваше новое меню загружалось вместо стандартного "grub.cfg", установите новый пункт в качестве пункта по умолчанию. также можете установить таймаут для "grub.cfg" в 0 (в "/etc/default/grub"), но перед этим рекомендую протестировать свежеиспеченное меню на работоспособность.
обновите свой "grub.cfg" выполнив
Код:
sudo update-grub
вот, в принципе, и вся премудрость. таких файлов можете насоздавать себе хоть десять штук, тут уж зависит от потребностей. ниже я приведу в качестве образца то, что получилось у меня (файл сильно урезан до необходимого минимума):
(Кликните, чтобы показать/скрыть)
MBR - бэкап, восстановление и загрузка через образ.
для тех, кто не знает, поясню: MBR - фрагмент первого сектора жесктого диска, в котором прописан код, запускающий загрузчик. при загрузке с диска оттуда считывается информация о том, как запустить загрузчик. grub2 прописывает свой код в MBR при установке (и это же мы делаем, выполняя "grub-install ... /dev/sda").
на случай повреждения MBR (причины бывают разными) и для возможности быстрого восстановления работоспособности grub2 полезно будет иметь резервную копию MBR жесткого диска. чтобы создать ее, сначала нужно определиться, с какого из жестких дисков производится загрузка (можно посмотреть с помощью "sudo fdisk -l"). после этого скопируем первый сектор (первые 512 байт) диска в файл с помощью команды dd:
Код:
sudo dd if=/dev/sda of=mbr.bin bs=512 count=1
наш образ готов! данные сохранена в файл "mbr.bin" в вашей домашней директории.
используя полученный образ можно загрузить основной grub2 из-под другого при поврежденном MBR диска. если у вас есть другая установленная linux-система с grub2 на другом жестком диске или загрузочная флэшка с grub2 (создание таковой описано выше) - можете попробовать на практике нижеприведенный совет.
итак, в моем примере я загружаюсь со своей спасительной флэшки с grub2, на которую я предварительно закинул образ MBR своего жесткого диска.
загрузившись в gurb2, выходим в консоль (нажав "c"). указываем в качестве корневого раздела тот жесткий диск, на котором по сценарию попорчен MBR, и с которого мы хотим запустить grub2. можно указать сам диск или любой из его разделов, например так:
Код:
set root=(hd1)
Код:
root
Код:
chainloader (hd0,1)/mbr.bin
Код:
boot
примечание: в MBR (и, соответственно, в полученном образе) нет четкого указания жесткого диска, поэтому через наш образ загрузится grub2 с того раздела, который был указан в качестве корневого (root) в консоли grub2.
загрузив родную систему, мы можем восстановить ид-под нее MBR диска. но если лишнего grub2 у вас под рукой нет, действовать мы будем с livecd.
грузимся с livecd любой linux-системы (в данном случае поддержка grub2 роли не играет). для восстановления MBR нам нужно будет "раскатать" ранее созданный образ обратно в первый сектор диска. но для начала проверим таблицу разделов, ведь вполне возможно, что grub2 не грузился и из-за нее. для этого выполните
Код:
sudo fdisk -l
Код:
sudo dd if=/mnt/mbr.bin of=/dev/sda bs=446 count=1
еще одна полезная возможность - полученный образ можно использовать для загрузки grub2 через NTLDR (в случае, если grub2 не загружает нормально Windows, и вы хотите сделать NTLDR основным загрузчиком). но об этом как-нибудь позже.
Продолжение далее