Журнал LinuxFormat - перейти на главную

LXF154:Grub 2

Материал из Linuxformat
Перейти к: навигация, поиск
LXF154.84.1.png
(thumbnail)
Вот так работает Grub 2: вы записываете глобальные установки в один файл и помещаете скрипты для пунктов меню в одну папку.

Содержание

Grub 2: По­со­бие для старта

Hardcore Linux Про­верь­те се­бя на кру­том про­ек­те для про­дви­ну­тых поль­зо­ва­те­лей

Мар­ко Фио­рет­ти рас­ска­зы­ва­ет са­мое важ­ное, что не­об­хо­ди­мо знать о но­вом стан­дарт­ном за­груз­чи­ке Linux.

Grub – это Grand Unified Boot Loader [Ве­ли­ко­леп­ный унифи­ци­ро­ван­ный за­груз­чик], ко­то­рый мно­го лет поч­ти еди­но­лич­но за­гру­жал сис­те­мы GNU/Linux. Пер­вый Grub мед­лен­но, но вер­но по­ки­да­ет на­ши ком­пь­ю­те­ры, уно­ся с со­бой все хит­ро­сти на­строй­ки за­груз­ки, ко­то­рым мы учи­лись го­да­ми. Его пре­емник, Grub 2, бо­лее ги­бок, од­на­ко его фай­лы и про­це­ду­ры на­строй­ки силь­но от­ли­ча­ют­ся. На на­шем уро­ке опи­сы­ва­ют­ся но­вин­ки Grub 2, све­жая струк­ту­ра его основ­ных фай­лов на­строй­ки и про­стей­шие трю­ки его на­строй­ки. В по­следней час­ти пред­став­ле­ны неко­то­рые сред­ст­ва уст­ранения неис­прав­но­стей ра­бо­ты Grub 2, ко­то­рые сле­ду­ет иметь под ру­кой, ес­ли что-нибудь пой­дет на­пе­ре­ко­сяк.

Наш эксперт

Мар­ко Фио­рет­ти – ав­тор The Family Guide to Digital Freedom [Се­мей­ное ру­ко­во­д­ство к циф­ро­вой сво­бо­де]. Он так­же ак­ти­вист сво­бод­но­го ПО и про­грам­мист.

Grub 2 обо­га­тил­ся мас­сой но­вых функ­ций. Не­ко­то­рые из них интересны толь­ко для раз­ра­бот­чи­ков; про них мы здесь упо­ми­нать не станем. Ос­таль­ные мож­но под­раз­де­лить на две груп­пы: «мо­жет, оно мне и не на­до, но как кру­то!» и «луч­ше бы это знать, так, на вся­кий по­жар­ный». В пер­вую ка­те­го­рию по­па­да­ет под­держ­ка не-x86 ар­хи­тек­тур и ме­ню с не-ASCII сим­во­ла­ми и бо­лее мо­дуль­ной ар­хи­тек­ту­рой.

Что но­во­го в Grub 2?

Из­менения, бо­лее за­мет­ные конеч­но­му поль­зо­ва­те­лю, вклю­ча­ют скрип­ты в сти­ле обо­лоч­ки, с услов­ны­ми опе­ра­то­ра­ми, а так­же под­держ­ку универ­саль­ных уникаль­ных иден­ти­фи­ка­то­ров (Universally Unique Identifiers, UUIDs). Это ко­ды, при­сво­ен­ные каж­до­му уст­рой­ст­ву хранения в ва­шем ком­пь­ю­те­ре: их при­менение рез­ко улуч­ша­ет об­ра­щение с внут­ренними и внешними на­ко­пи­те­ля­ми, в осо­бен­но­сти когда вы ис­поль­зуе­те боль­ше од­ной опе­ра­ци­он­ной сис­те­мы. Дру­гая кру­тая шту­ка – Grub 2 мож­но уста­но­вить или пе­реуста­но­вить в лю­бой мо­мент, как лю­бой дру­гой па­кет. Од­на­ко ес­ли вы планируе­те уста­нав­ли­вать па­рал­лель­но дру­гие ди­ст­ри­бу­ти­вы Linux, луч­ше иметь спе­ци­аль­ный раз­дел /boot, от­фор­ма­ти­ро­ван­ный в ext3, что­бы из­бе­жать про­блем с со­вмес­ти­мо­стью раз­ных про­це­дур за­груз­ки.

Ар­хи­тек­ту­ра Grub 2

Са­мые важ­ные час­ти Grub 2 – это ком­плект тек­сто­вых фай­лов и па­ра скрип­тов. Пер­вым де­лом сле­ду­ет оз­на­ко­мить­ся с /etc/default/grub. Это тек­сто­вый файл, где мож­но за­да­вать об­щие пе­ре­мен­ные на­строй­ки (см. врез­ку), а так­же дру­гие свой­ст­ва ме­ню Grub 2.

Сле­дую­щий боль­шой блок Grub 2 – пап­ка /etc/grub.d. Здесь ле­жат все скрип­ты, оп­ре­де­ляю­щие пунк­ты ме­ню, вклю­чая да­же те, что пред­на­зна­че­ны спе­ци­аль­ным ути­ли­там ти­па memtest86. Как пра­ви­ло, все или боль­шин­ст­во этих скрип­тов соз­да­ют­ся во вре­мя про­це­ду­ры уста­нов­ки Grub 2, од­на­ко мож­но соз­дать и соб­ст­вен­ные. Не­за­ви­си­мо от сво­его про­ис­хо­ж­дения, скрип­ты из /etc/grub.d ис­поль­зу­ют­ся для на­строй­ки Grub 2, толь­ко ес­ли они по­ме­че­ны как ис­пол­няе­мые. Дру­ги­ми сло­ва­ми, не обя­за­тель­но уда­лять скрипт, ес­ли вы пе­ре­ста­ли ну­ж­дать­ся в ка­ком-ли­бо пунк­те ме­ню –от­ме­тить его как неис­пол­няе­мый доста­точ­но для де­ак­ти­ва­ции:

chmod +x /etc/grub.d/some_grub_script

На­конец, хо­тя име­на и со­дер­жи­мое этих скрип­тов в раз­ных ди­ст­ри­бу­ти­вах от­ли­ча­ют­ся, вез­де их име­на долж­ны со­дер­жать дву­знач­ный циф­ро­вой пре­фикс. Его цель со­сто­ит в оп­ре­де­лении по­ряд­ка вы­полнения скрип­тов (то есть по­ряд­ка со­от­вет­ст­вую­щих пунк­тов) при сбор­ке ме­ню Grub 2. Ес­ли, ска­жем для про­сто­ты, ваш ка­та­лог /etc/grub.d со­дер­жит толь­ко три скрип­та, ко­то­рые на­зы­ва­ют­ся 10_ubuntu, 15_debian и 20_fedora, в ка­че­­ст­ве ва­ри­ан­тов за­груз­ки вы уви­ди­те Ubuntu, Debian и Fedora имен­но в этом по­ряд­ке. Из это­го сра­зу сле­ду­ет, что ес­ли вам не по ду­ше по­ря­док пунк­тов ме­ню, соз­дан­ный при уста­нов­ке, вы мо­же­те по­ме­нять его, про­сто пе­ре­име­но­вав со­от­вет­ст­вую­щие скрип­ты на под­хо­дя­щие вам чи­сло­вые пре­фик­сы.

Пе­ре­мен­ные на­строй­ки Grub 2

Grub 2 бо­гат пе­ре­мен­ны­ми на­строй­ки – все они подробно опи­са­ны в офи­ци­аль­ной справ­ке, в раз­де­ле, оза­глав­лен­ном «simple configuration handling» (см. врез­ку По­лез­ные ре­сур­сы). Вот неко­то­рые из тех, что вы, быть мо­жет, за­хо­ти­те из­менить в сво­ем /etc/default/grub:

GRUB_TIMEOUT: Зна­чение оче­вид­но. Помните, что за­держ­ка, рав­ная -1, оз­на­ча­ет no timeout – Grub 2 бу­дет бес­конеч­но дол­го дожидаться, по­ка вы не вы­бе­ре­те что-нибудь.

GRUB_DEFAULT и GRUB_ SAVEDEFAULT: Пер­вый со­дер­жит но­мер (на­чи­ная с 0) пунк­та ме­ню, ко­то­рый бу­дет вы­бран, ес­ли поль­зо­ва­тель не сде­ла­ет сво­его вы­бо­ра. Ес­ли GRUB_DEFAULT уста­нов­лен в saved, а GRUB_SAVEDEFAULT – в true, Grub 2 бу­дет ис­поль­зо­вать оп­цию, вы­бран­ную в пре­ды­ду­щей за­груз­ке.

GRUB_DISABLE_OS_PROBER и GRUB_DISABLE_RECOVERY: Когда эти оп­ции уста­нов­ле­ны в true, Grub 2 не ото­бра­жа­ет пунк­ты, соз­дан­ные Os-prober, и пункт recovery, со­от­вет­ст­вен­но. Ес­ли вам ну­жен толь­ко один пункт из этих, вам при­дет­ся воссоз­дать его вруч­ную с ну­ля.

GRUB_GFXMODE: Это раз­ре­шение тек­ста в ме­ню (а не фо­но­во­го тек­ста!). Фор­мат пред­став­ления обыч­ный, на­при­мер 640 × 480. Мож­но ис­поль­зо­вать лю­бое зна­чение, ко­то­рое под­дер­жи­ва­ет ва­ша ви­део­кар­та.

Что­бы уз­нать, ка­кие раз­ре­шения вам доступ­ны, вве­ди­те c в ме­ню Grub 2, а за­тем vbeinfo.

(thumbnail)
Ба­зо­вое строе­ние Grub 2, где учи­ты­ва­ют­ся гло­баль­ные ус­та­нов­ки — поль­зо­ва­те­ли мо­гут за­гру­жать лю­бое из ядер Linux.

Не­ко­то­рые скрип­ты бо­лее или менее оди­на­ко­вы во всех уста­нов­ках Grub 2 в Linux. Пер­вым бу­дет (об­ра­ти­те внимание на пре­фикс!) 00_header: имен­но этот скрипт об­ра­ба­ты­ва­ет все, что вы по­мес­ти­ли в /etc/default/grub. За­тем у вас бу­дут как минимум сле­дую­щие: 10_linux, 20_memtest86, 30_os-prober (в ди­ст­ри­бу­ти­вах на ба­зе Debian) и 40_custom. Пер­вый, об­нов­ляе­мый при ка­ж­дом об­нов­лении яд­ра, соз­да­ет один обыч­ный и один ре­зерв­ный пунк­ты ме­ню для ка­ж­до­го яд­ра в раз­де­ле /boot по умол­чанию. 20_memtest86 за­пуска­ет ути­ли­ту про­вер­ки па­мя­ти memtest86. Os-prober (http://kitenet.net/~joey/code/os-prober/) – это от­ветв­ление от уста­нов­щи­ка Debian, чья за­да­ча со­сто­ит в по­пыт­ке соз­дать пунк­ты ме­ню для дру­гих опе­ра­ци­он­ных сис­тем, рас­по­ло­жен­ных на дру­гих раз­де­лах. Кро­ме Linux, Os-prober рас­по­зна­ет Windows, Mac OS X и GNU Hurd. 40_custom – кон­тейнер, ку­да вы мо­же­те по­ме­щать, как рас­ска­зы­ва­лось ранее, соб­ст­вен­ные до­полнитель­ные пунк­ты. В от­ли­чие от дру­гих скрип­тов, пре­достав­ляе­мых ди­ст­ри­бу­ти­ва­ми, эти не бу­дут пе­ре­за­пи­сы­вать­ся при об­нов­лении Grub 2.

Вход на grub.cfg

Файл, ко­то­рый счи­ты­ва­ет­ся и вы­пол­ня­ет­ся, что­бы ото­бра­зи­лось ме­ню за­груз­ки, на­зы­ва­ет­ся /boot/grub/grub.cfg. В нор­маль­ных усло­ви­ях этот файл из­ме­ня­ет­ся толь­ко при об­нов­лении яд­ра или из­менении тех фай­лов, про ко­то­рые мы толь­ко что рас­ска­за­ли. Од­на­ко пер­вым пра­ви­лом Grub 2 яв­ля­ет­ся «Да не коснет­ся ру­ка твоя grub.cfg, нико­им об­ра­зом». Это мо­гут де­лать толь­ко скрип­ты, соз­дан­ные для дан­ной це­ли! Не­ко­то­рые ди­ст­ри­бу­ти­вы пре­достав­ля­ют воз­мож­ность ис­поль­зо­вать дру­гой файл (/boot/grub2/custom.cfg) и пе­ре­да­вать его со­дер­жи­мое скрип­там в /etc/grub.d. Пре­иму­ще­ст­во та­ко­го под­хо­да – поль­зо­ва­тель­ский файл всегда чи­та­ет­ся при за­груз­ке, да­же ес­ли вы не пред­принимае­те ша­гов, ко­то­рые опи­сы­ва­ют­ся в сле­дую­щем па­ра­гра­фе.

Скорая помощь

Бы­ст­рый и про­стой спо­соб по­лу­чить бо­лее оп­рят­ные ме­ню Grub 2 со­сто­ит в вы­клю­че­нии пунк­тов ме­ню Os-prober и recovery, что дос­ти­га­ет­ся ус­та­нов­кой со­от­вет­ст­вую­щих кон­фи­гу­ра­ци­он­ных оп­ций в true.

Не­важ­но, что имен­но вы за­пи­ше­те в лю­бой из пе­ре­чис­лен­ных скрип­тов – ниче­го не из­менит­ся, по­ка вы, так ска­зать, не ском­пи­ли­руе­те их, что­бы поя­ви­лась но­вая вер­сия /boot/grub2/grub.cfg. Ко­ман­да, про­из­во­дя­щая это дей­ст­вие, на­зы­ва­ет­ся update-grub. На са­мом де­ле это немно­гим боль­ше, чем псев­доним для grub-mkconfig, офи­ци­аль­ной ути­ли­ты на­строй­ки Grub 2. Ес­ли в ва­шем ди­ст­ри­бу­ти­ве нет update-grub, то для из­менения по­ве­дения Grub 2 сле­ду­ет за­пустить ко­ман­ду сле­дую­ще­го ви­да:

grub-mkconfig -o /boot/grub/grub.cfg

и итог бу­дет точ­но та­ким же. Когда бы вы ни вы­зы­ва­ли эту про­це­ду­ру, для соз­дания grub.cfg grub-mkconfig ра­бо­та­ет с уста­нов­ка­ми, оп­ре­де­лен­ны­ми в /etc/default/grub, а все ис­пол­няе­мые фай­лы бе­рут­ся из /etc/grub.d в по­ряд­ке, оп­ре­де­ляе­мом их пре­фик­са­ми.

На­строй­ка Grub 2

В неко­то­рых ди­ст­ри­бу­ти­вах Linux вам (час­тич­но) по­зво­ля­ет­ся на­страи­вать ме­ню за­груз­ки во вре­мя из­на­чаль­ной уста­нов­ки. Наш пер­вый со­вет со­сто­ит в том, что­бы поль­зо­вать­ся этой воз­мож­но­стью как мож­но боль­ше. Пе­рей­ди­те в экс­перт­ный ре­жим, ес­ли в вы­бран­ном ди­ст­ри­бу­ти­ве та­ко­вой име­ет­ся, и рас­планируйте все, что вы хо­ти­те из­менить в Grub 2, до ма­лей­ших де­та­лей. Вы­полнение это­го в бо­лее или менее кон­тро­ли­руе­мом ок­ру­жении ути­ли­ты уста­нов­ки сэ­ко­но­мит вам мно­го вре­мени, а так­же снизит ве­ро­ят­ность оши­бок. Да­же ес­ли вы ниче­го не де­ла­ли во время уста­нов­ки, вы все рав­но в лю­бой мо­мент мо­же­те по­ме­нять ме­ню Grub. Та­кие гра­фи­че­­ские ин­тер­фей­сы, как Grub Customiser, мо­гут уско­рить вы­полнение за­да­чи, но сей­час мы со­сре­до­то­чим­ся на дей­ст­ви­ях, ко­то­рые нуж­но про­де­лать, когда, из-за по­вре­ж­дений сис­те­мы, или по дру­гим при­чи­нам, этот спо­соб не го­дит­ся.

(thumbnail)
Ре­дак­ти­ро­вать тек­сто­вые фай­лы Grub нуж­но уметь, но GUI, по­доб­ные Grub Customiser, уп­ро­стят ва­ши экс­пе­ри­мен­ты (эк­ран­ный сни­мок с omgubuntu.co.uk).

Пунк­ты ме­ню мож­но до­бав­лять ав­то­ма­ти­че­­ски или вруч­ную. Пер­вый слу­чай про­ис­хо­дит, когда вы уста­нав­ли­вае­те дру­гой ди­ст­ри­бу­тив Linux на дру­гой дис­ко­вый раз­дел. При сле­дую­щем вы­зо­ве update-grub Grub 2 про­из­ве­дет по­иск ядер Linux и дру­гих опе­ра­ци­он­ных сис­тем, со­глас­но ин­ст­рук­ци­ям из скрип­та 10_linux, и до­ба­вит их в ме­ню за­груз­ки.

1 #!/bin/sh -e

2 echo “Сообщение для вывода при запуске update-grub”

3 cat << EOF

4 menuentry “То, что я увижу в меню загрузки” {

5 set root=(hd0,1)

6 linux /boot/vmlinuz

7 initrd /boot/initrd.img

8}

9 EOF

Со­храните этот скрипт в ка­та­ло­ге /etc/grub.d с пре­фик­сом, ко­то­рый бу­дет со­от­вет­ст­во­вать его по­зи­ции в ме­ню; сде­лай­те его ис­пол­няе­мым, за­пусти­те update-grub еще раз, и все бу­дет го­то­во. Конеч­но, пре­ж­де чем все это про­де­лать, нуж­но уз­нать зна­чение ко­да в ка­ж­дой стро­ке скрип­та.

Опе­ра­тор cat << EOF в стро­ке 3 оп­ре­де­ля­ет на­ча­ло пунк­та за­груз­ки, ко­то­рый за­кан­чи­ва­ет­ся на стро­ке, со­дер­жа­щей EOF. Та­кие ин­ст­рук­ции, как root=(hdX,Y), со­об­ща­ют Grub 2, что яв­ля­ет­ся корневым дис­ком и раз­де­лом для ОС, ко­то­рой по­свя­щен дан­ный пункт. В Grub 2 раз­де­лы ну­ме­ру­ют­ся с 1, так что пер­вый раз­дел пер­во­го же­ст­ко­го дис­ка будет обо­зна­чать­ся (hd0,1).

Ес­ли ваш ди­ст­ри­бу­тив Linux на­стро­ен на ис­польз­вание UUID’ов, вам при­дет­ся за­менить клю­че­вое сло­во root на uuid и пе­ре­дать ему UUId нуж­но­го раз­де­ла. Что­бы уз­нать UUID’ы всех сво­их раз­де­лов, от­крой­те тер­ми­нал и ско­ман­дуй­те blkid:

  1. > blkid

/dev/sda1: UUID=”long_string_here” TYPE=”ext4”

/dev/sda2: UUID=”another_long_string” TYPE=”swap”

...

За­дав корневой раз­дел, вы долж­ны со­об­щить Grub 2, ка­кое имен­но яд­ро за­гру­жать при вы­бо­ре это­го пунк­та ме­ню, по­сколь­ку в од­ном раз­де­ле мо­жет на­хо­дить­ся несколь­ко ядер. В слу­чае Linux это оз­на­ча­ет до­бав­ление рас­по­ло­жения и имени дей­ст­вую­ще­го яд­ра и об­ра­зов initrd: имен­но это про­ис­хо­дит в стро­ках 6 и 7 на­ше­го при­ме­ра.

Дру­гой спо­соб вста­вить пунк­ты поль­зо­ва­те­ля в ме­ню Grub 2 – до­ба­вить их в 40_custom. Фор­мат это­го пунк­та точ­но та­кой же. Един­ст­вен­ное, о чем сле­ду­ет помнить – нель­зя уда­лять или как-ли­бо ме­нять его стро­ки. Вме­сто это­го сле­ду­ет до­ба­вить ва­ши стро­ки в конец это­го фай­ла.

Двой­ная за­груз­ка Linux и Windows

Что ес­ли вы хо­ти­те иметь Linux и Windows, бок о бок, на од­ном и том же ком­пь­ю­те­ре? Об­щая про­це­ду­ра до­бав­ления пунк­тов ме­ню для Windows ана­ло­гич­на той, что мы толь­ко что опи­са­ли, но здесь нуж­но учи­ты­вать боль­ше па­ра­мет­ров. Во-пер­вых, Grub не мо­жет за­гру­жать DOS или Windows непо­сред­ст­вен­но, и вы долж­ны за­гру­зить их «по це­поч­ке [chain-load]» – то есть (пе­ре­фра­зи­руя ру­ко­во­дство по Grub) за­гру­зить их соб­ст­вен­ный за­груз­чик и пе­ре­дать ему управ­ление. Ко­ман­да Grub 2, вы­пол­няю­щая это дей­ст­вие, долж­на сто­ять вме­сто строк 6 и 7 на­ше­го при­ме­ра и име­ет вид

chainloader +1

В за­ви­си­мо­сти от ди­ст­ри­бу­ти­ва Linux, вер­сии Grub 2 и кон­фи­гу­ра­ции дис­ка, вам, быть мо­жет, по­на­до­бит­ся яв­но пе­ре­дать это­му chainloader по­ло­жение раз­де­ла Windows, да­же ес­ли оно бы­ло оп­ре­де­ле­но в ко­ман­де root:

chainloader (hdX,Y)+1

В лю­бом слу­чае, помните, что Grub 2 до­бав­ля­ет к но­ме­рам не-Linux раз­де­лов пре­фикс, со­от­вет­ст­вую­щий ти­пу таб­ли­цы раз­де­лов. Сле­до­ва­тель­но, раз­дел MS-DOS бу­дет иметь вме­сто (hdX,Y) мет­ку hd(X,msdosY).

Кро­ме то­го, Windows мо­жет за­гру­жать­ся толь­ко с пер­во­го дис­ка. Ес­ли она уста­нов­ле­на на дру­гой диск, на­при­мер, на вто­рой, доступ к нему про­из­во­дит­ся че­рез BIOS; до­бавь­те так­же стро­ку, ко­то­рая ко­ман­дой drivemap вир­ту­аль­но ме­ня­ет дис­ки мес­та­ми:

drivemap -s (hd0) (hd1)

Пунк­ты поль­зо­ва­те­ля и муль­ти­загруз­ка

Двой­ная за­груз­ка двух опе­ра­ци­он­ных сис­тем, ка­ж­дая из ко­то­рых под­дер­жи­ва­ет Grub 2, как пра­ви­ло, не вы­зы­ва­ет про­блем. Когда вы уста­нав­ли­вае­те вто­рую, она пе­ре­за­пи­сы­ва­ет пер­вую уста­нов­ку Grub 2, од­на­ко по­сле это­го ее скрип­ты 10_linux и os-prober об­на­ру­жат пер­вую ОС и до­ба­вят ее в ме­ню. По­сле это­го вы смо­же­те ме­нять их по­ря­док в ме­ню обыч­ным об­ра­зом.

Ес­ли вы­да­ют­ся со­об­щения об ошиб­ке, го­во­ря­щие об от­сут­ст­вии неко­то­рых мо­ду­лей, вам при­дет­ся яв­но ве­леть Grub 2 за­гру­жать их та­кой ко­ман­дой, как, на­при­мер, insmod ntfs (ко­то­рая го­во­рит Grub о том, что на те­ку­щем раз­де­ле – фай­ло­вая сис­те­ма NTFS). Од­на­ко это од­но из тех дей­ст­вий, ко­то­рое нуж­но за­ранее с­ве­рить с дру­ги­ми поль­зо­ва­те­ля­ми то­го же ди­ст­ри­бу­ти­ва Linux и вер­сии Grub!


По­лез­ные ре­сур­сы

Один из ре­сур­сов для по­лу­чения под­роб­ной ин­фор­ма­ции о кон­фи­гу­ра­ции Grub 2 – это поч­то­вая рас­сыл­ка ва­ше­го ди­ст­ри­бу­ти­ва. Но пре­ж­де чем на нее под­пи­сы­вать­ся, вы мо­же­те най­ти ку­чу по­лез­ной ин­фор­ма­ции в офи­ци­аль­ном Ру­ко­во­дстве Grub 2 (www.gnu.org/software/grub/manual). Дру­гой цен­ный ре­сурс – ру­ко­во­дство с www.dedoimedo.com/computers/grub.html (ис­чер­пы­ваю­щее, но немно­го уста­рев­шее), а для поль­зо­ва­те­лей Ubuntu – раз­де­лы Grub 2 офи­ци­аль­но­го wiki (https://wiki.ubuntu.com/Grub2) или до­ку­мен­та­ции со­об­ще­ст­ва (https://help.ubuntu.com/community/Grub2).

На­конец, ес­ли вы ав­то­ма­ти­че­­ски до­ба­ви­ли пункт ме­ню для дру­го­го ди­ст­ри­бу­ти­ва Linux, помните вот что: со­от­вет­ст­вую­щий код не бу­дет ав­то­ма­ти­че­­ски об­нов­лять­ся при об­нов­лении яд­ра это­го ди­ст­ри­бу­ти­ва! Вам при­дет­ся вруч­ную ре­дак­ти­ро­вать стро­ки linuz и initrd, что­бы они ука­зы­ва­ли на но­вые вер­сии vmlinuz и initrd.img, ко­то­рые уже по­лу­чат дру­гие име­на, а за­тем по­втор­но за­пустить update-grub. Един­ст­вен­ная аль­тер­на­ти­ва со­сто­ит в том, что­бы у дру­гих ди­ст­ри­бу­ти­вов vmlinuz и initrd.img всегда соз­да­ва­ли сим­во­ли­че­­ские ссыл­ки на са­мые по­следние об­ра­зы яд­ра и initrd.

Па­ра­дом, конеч­но, ко­ман­ду­ет со­дер­жи­мое (ме­ню за­груз­ки), но его внешний вид то­же ва­жен. Как из­менить фо­но­вый ри­су­нок эк­ра­на за­груз­ки Grub 2? Да лег­ко! От­ре­дак­ти­руй­те скрипт в /etc/grub.d, имя ко­то­ро­го со­дер­жит те­му, что­бы он ука­зы­вал на нуж­ное вам изо­бра­жение. Во-пер­вых, по­мес­ти­те изо­бра­жения в нуж­ный ка­та­лог, ко­то­рый дол­жен быть ли­бо ка­та­ло­гом по умол­чанию (/usr/share/images/desktop-base), ли­бо спе­ци­аль­но соз­дан­ным для этой це­ли, на­при­мер /usr/share/my_grub_images.

(thumbnail)
Ес­ли вам не нра­вит­ся фон, ко­то­рый пре­дос­тав­ля­ет Grub 2, во мно­гих ди­ст­ри­бу­ти­вах су­ще­ст­ву­ют пре­крас­ные па­ке­ты изо­бра­же­ний для за­став­ки.

Grub 2 рас­по­зна­ет изо­бра­жения PNG и TGA без ка­кой-ли­бо спе­ци­аль­ной на­строй­ки. При же­лании вы так­же мо­же­те ис­поль­зо­вать фон в фор­ма­те JPEG, но тогда при­дет­ся яв­но за­гру­зить в скрипт со­от­вет­ст­вую­щий мо­дуль. В сле­дую­щем при­ме­ре да­ны нуж­ные фраг­мен­ты скрип­тов тем:

Скорая помощь

Хо­ти­те со­брать всю ин­фор­ма­цию о ва­ших дис­ках в фор­ма­те, удоб­ном для на­строй­ки и от­лад­ки Grub 2? Ис­поль­зуй­те скрипт boot info script.

use_bg=true

...#код опущен для краткости

for i in {/path/to/folders/containing/grub/backgrounds/} ; do

...#код опущен для краткости

case ($bg) in

  • .png) reader=png;;
  • tga) reader=tga;;
  • jpg) reader=jpeg;;

Пер­вая стро­ка (use_bg=true) ак­ти­ви­ру­ет весь сле­дую­щий код. Ес­ли пе­ре­мен­ной при­сво­ить false, ника­ко­го фо­на по­ка­за­но не бу­дет. По­след­няя стро­ка ве­лит Grub 2 за­гру­зить мо­дуль для чтения изо­бра­жений JPEG. Ес­ли из-за фо­но­во­го ри­сун­ка текст станет нечи­тае­мым, то вам нуж­но с по­мо­щью под­хо­дя­щих пе­ре­мен­ных оп­ре­де­лить но­вые цве­та – на­при­мер, так:

COLOR_NORMAL=”white/black”

COLOR_HIGHLIGHT=”magenta/black”

Два зна­чения – для цве­та тек­ста и фо­на. Уч­ти­те, что в неко­то­рых ди­ст­ри­бу­ти­вах Linux фон black оз­на­ча­ет не чер­ный, а про­зрач­ный.

Ку­да ид­ти при неис­прав­но­стях

До сих пор мы рас­ска­зы­ва­ли о том, что де­лать, когда все хо­ро­шо. Но как по­сту­пить, ес­ли по­сле уста­нов­ки Grub, под­клю­чения но­во­го же­ст­ко­го дис­ка или уста­нов­ки дру­го­го ди­ст­ри­бу­ти­ва Linux что-нибудь не ра­бо­та­ет?

Ес­ли пра­виль­но за­дать во­прос он­лайн, то есть пре­доста­вив нуж­ную ин­фор­ма­цию, это силь­но по­мо­жет в ре­шении про­бле­мы, но как же это сде­лать? Во-пер­вых, помните, что, на­хо­дясь в Grub, вы мо­же­те из­менить пункт ме­ню, ес­ли на­жать на e на вы­бран­ном пунк­те. В неко­то­рых слу­ча­ях это­го мо­жет ока­зать­ся доста­точ­но, что­бы по­нять, где коренится про­бле­ма, и вре­мен­но ликвидировать неис­пра­вность.

Сле­дую­щее, что нуж­но дер­жать под ру­кой при тес­ти­ро­вании но­вых кон­фи­гу­ра­ций Grub – это ис­чер­пы­ваю­щий спи­сок со­об­щений об ошиб­ках с www.linuxselfhelp.com/gnu/grub/html_chapter/grub_13.html#SEC101.

Дру­гая по­лез­ная про­грам­ма, к ко­то­рой сто­ит об­ра­тить­ся при про­бле­мах с Grub – скрипт ин­фор­ма­ции о за­груз­ке boot info script (http://bootinfoscript.sourceforge.net/). Эта ути­ли­та со­би­ра­ет всю свя­зан­ную с кон­фи­гу­ра­ци­ей за­груз­ки ин­фор­ма­цию со всех же­ст­ких дис­ков и со­хра­ня­ет ее в фай­ле с именем RESULTS.txt. Ес­ли за­пустить этот скрипт с live Linux CD и вста­вить его вы­вод в за­прос служ­бы под­держ­ки, то это об­лег­чит жизнь вам и тем, кто за­хо­чет по­мочь вам. Ес­ли вы нам не ве­ри­те, по­смот­ри­те на при­мер в кон­це уро­ка.

Ес­ли вы хо­ти­те ис­пра­вить (или ди­аг­но­сти­ро­вать) все са­мо­стоя­тель­но, мо­же­те соз­дать ава­рий­ный CD Grub 2 с соб­ст­вен­ным ме­ню, за­дей­ст­во­вав сле­дую­щую ко­ман­ду:

grub-mkrescue –output=<name>.iso /boot/grub

Та­кой CD по­зво­лит вам за­гру­жать­ся на ком­пь­ю­тер и ис­прав­лять кон­фи­гу­ра­цию Grub 2. Од­на­ко есть бо­лее про­стой, хоть и не оп­ти­маль­ный спо­соб про­де­лать то же са­мое. Зай­ди­те на www.supergrubdisk.org, ска­чай­те ли­бо об­раз Rescatux, ли­бо SGB (Super Grub 2 Disk), и за­пи­ши­те его на CD. Rescatux мо­жет ис­прав­лять глав­ную за­гру­зоч­ную запись Windows, фай­ло­вую сис­те­му Linux, или ме­ню Grub 2.

Он так­же со­дер­жит boot info script. За­да­ча­ми SGB, на­про­тив, яв­ля­ют­ся «по­мочь за­гру­зить ОС, чей за­груз­чик неис­пра­вен» и об­лег­чить изу­чение прин­ци­пов ра­бо­ты Grub 2.

За­кон­чим при­ме­ром, ко­то­рый мы взя­ли из wiki скрип­та boot info script, где по­ка­за­но, на­сколь­ко по­лез­ной мо­жет стать эта ути­ли­та. Что ес­ли по­сле уста­нов­ки ди­ст­ри­бу­ти­ва Linux с Grub 2 Windows пе­ре­станет за­гру­жать­ся? Что ес­ли ути­ли­та update-grub не рас­по­зна­ет Windows и вы­да­ет со­об­щение та­ко­го ви­да:

(thumbnail)
Вот это сред­ст­во вы за­хо­ти­те дер­жать на сто­ле пе­ред на­ча­лом ис­поль­зо­ва­ния Grub 2: ава­рий­ный CD Rescatux!

ls: cannot access [some/path]/boot

Boot: No such file or directory

При­чи­на мо­жет ока­зать­ся в том, что Grub 2 был уста­нов­лен с вы­бо­ром сис­тем­но­го раз­де­ла Windows, где рас­по­ло­жен Windows /Boot, в ка­че­­ст­ве корнево­го ка­та­ло­га (/boot).

Так как раз­де­лы NTFS нечув­ст­ви­тель­ны к ре­ги­ст­ру, Windows при­дет в смя­тение и не смо­жет за­гру­зить­ся от то­го, что «уви­дит» две пап­ки с одним и тем же именем, при­чем со­дер­жи­мое од­но­го из них неиз­вест­но – на­при­мер, grub/core.img. И да, невер­ное рас­по­ло­жение фай­лов Grub 2 – это как раз то, о чем в пер­вую оче­редь до­ло­жит скрипт boot info script!

Ре­шение? Из Linux уда­ли­те или пе­ре­име­нуй­те пап­ку /boot (в нижнем ре­ги­ст­ре, не /Boot, ина­че Windows никогда боль­ше не за­гру­зит­ся).

Персональные инструменты
купить
подписаться
Яндекс.Метрика