Powrót z GRUB2 do GRUB Legacy

Z różnych przyczyn użytkownicy dosyć często szukają sposobów, żeby wrócić do starego GRUB’a. Wychodząc na przeciw tym z Was którzy poszukują instrukcji jak to zrobić, zamieszczam poniższy wpis.

Z góry ostrzegam, że zapewne nie jest to najprostsza metoda, ale nie znam wszystkich mechanizmów siedzących w różnych dystrybucjach, więc nie wiem czy w którejś z nich nie ma np. automatycznych narzędzi do generowania pliku konfiguracyjnego dla GRUB’a Legacy oraz późniejszej jego instalacji. Poniższa metoda jest w 100% manualna, jednak jest ona również sprawdzona i wielokrotnie przeze mnie stosowana.

W spoilerze znajduje się przykładowy plik konfiguracyjny GRUB’a 2 pochodzący z Ubuntu, który znalazłem w internecie. Posłużę się nim jako przykładem.

[spoiler show=”Pokaż: GRUB2 grub.cfg” hide=”Ukryj: GRUB2 grub.cfg”]

 #
 # DO NOT EDIT THIS FILE
 #
 # It is automatically generated by /usr/sbin/grub-mkconfig using templates
 # from /etc/grub.d and settings from /etc/default/grub
 #

### BEGIN /etc/grub.d/00_header ###
 if [ -s $prefix/grubenv ]; then
 load_env
 fi
 set default=0
 if [ ${prev_saved_entry} ]; then
 set saved_entry=${prev_saved_entry}
 save_env saved_entry
 set prev_saved_entry=
 save_env prev_saved_entry
 set boot_once=true
 fi

function savedefault {
 if [ -z ${boot_once} ]; then
 saved_entry=${chosen}
 save_env saved_entry
 fi
 }

function recordfail {
 set recordfail=1
 if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi
 }
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 if loadfont /usr/share/grub/unicode.pf2 ; then
 set gfxmode=640x480
 insmod gfxterm
 insmod vbe
 if terminal_output gfxterm ; then true ; else
 # For backward compatibility with versions of terminal.mod that don't
 # understand terminal_output
 terminal gfxterm
 fi
 fi
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 set locale_dir=($root)/boot/grub/locale
 set lang=en
 insmod gettext
 if [ ${recordfail} = 1 ]; then
 set timeout=-1
 else
 set timeout=10
 fi
 ### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
 set menu_color_normal=white/black
 set menu_color_highlight=black/light-gray
 ### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
 menuentry 'Ubuntu, with Linux 2.6.32-16-generic' --class ubuntu --class gnu-linux --class gnu --class os {
 recordfail
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 linux    /boot/vmlinuz-2.6.32-16-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro   quiet splash
 initrd    /boot/initrd.img-2.6.32-16-generic
 }
 menuentry 'Ubuntu, with Linux 2.6.32-16-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
 recordfail
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 echo    'Loading Linux 2.6.32-16-generic ...'
 linux    /boot/vmlinuz-2.6.32-16-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro single
 echo    'Loading initial ramdisk ...'
 initrd    /boot/initrd.img-2.6.32-16-generic
 }
 menuentry 'Ubuntu, with Linux 2.6.32-14-generic' --class ubuntu --class gnu-linux --class gnu --class os {
 recordfail
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 linux    /boot/vmlinuz-2.6.32-14-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro   quiet splash
 initrd    /boot/initrd.img-2.6.32-14-generic
 }
 menuentry 'Ubuntu, with Linux 2.6.32-14-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
 recordfail
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 echo    'Loading Linux 2.6.32-14-generic ...'
 linux    /boot/vmlinuz-2.6.32-14-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro single
 echo    'Loading initial ramdisk ...'
 initrd    /boot/initrd.img-2.6.32-14-generic
 }
 ### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
 menuentry "Memory test (memtest86+)" {
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 linux16    /boot/memtest86+.bin
 }
 menuentry "Memory test (memtest86+, serial console 115200)" {
 insmod ext2
 set root='(hd0,1)'
 search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
 linux16    /boot/memtest86+.bin console=ttyS0,115200n8
 }
 ### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
 menuentry "Microsoft Windows XP Home Edition (on /dev/sda1)" {
 set root=(hd0,1)
 chainloader +1
 }
 ### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
 menuentry "Jaunty 2.6.28-15-custom" {
 saved_entry=${chosen}
 save_env saved_entry
 set root=(hd0,8)
 linux    /boot/vmlinuz-2.6.28-15-custom root=UUID=48e03255-22b3-488b-ae7e-9dbe4e2beac7 ro  quiet splash
 initrd    /boot/initrd.img-2.6.28-15-custom
 }
 menuentry "SystemRescue" {
 saved_entry=${chosen}
 save_env saved_entry
 set root=(hd0,6)
 linux   /sysrcd/rescuecd subdir=sysrcd setkmap=us
 initrd  /sysrcd/initram.igz
 }
 ### END /etc/grub.d/40_custom ###

[/spoiler]

  1. Wyrzucamy sekcje “/etc/grub.d/00_header”. Zawiera ona skrypty GRUB’a których GRUB Legacy nie obsługuje.
  2. Na samym początku dopisujemy
    default 0
    timeout 300

    Wartość po słowie timeout oznacza ilość sekund przez którą wyświetlane będzie menu i po której zostanie załadowany pierwszy wpis.

  3. Sekcję “/etc/grub.d/05_debian_theme” zmieniamy na jedno-linijkową postać
    color white/black black/light-gray
  4. W kolejnych wpisach słowo “menuentry” zamieniamy na “title”, Słowa zawarte w cudzysłowach/apostrofach są tekstem który wyświetli się w menu GRUB’a.
  5. Wszelkie linie zaczynające się od “insmod” wyrzucamy. Tak samo robimy z liniami “search”, “echo” oraz “recordfail”.
  6. set root='(hd0,1)'

    zamieniamy na

    root (hd0,0)

    ponieważ GRUB Legacy numeruje zarówno dyski i partycje od 0

  7. Słowo “linux” zamieniamy na kernel.
  8. Tak przerobiony plik zapisujemy w “/boot/grub/” jako “menu.lst”.

Powyższy przykładowy plik po zmianach powinien wyglądać mnie więcej tak:
[spoiler show=”Pokaż: GRUB Legacy menu.lst” hide=”Ukryj: GRUB Legacy menu.lst”]

default 0
timeout 300
color white/black black/light-gray

 title Ubuntu, with Linux 2.6.32-16-generic
 root (hd0,1)
 kernel    /boot/vmlinuz-2.6.32-16-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro   quiet splash
 initrd    /boot/initrd.img-2.6.32-16-generic

 title Ubuntu, with Linux 2.6.32-16-generic (recovery mode)
 root (hd0,1)
 kernel    /boot/vmlinuz-2.6.32-16-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro single
 initrd    /boot/initrd.img-2.6.32-16-generic

 title Ubuntu, with Linux 2.6.32-14-generic
 root (hd0,1)
 kernel    /boot/vmlinuz-2.6.32-14-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro   quiet splash
 initrd    /boot/initrd.img-2.6.32-14-generic

 title Ubuntu, with Linux 2.6.32-14-generic (recovery mode)
 root (hd0,1)
 kernel    /boot/vmlinuz-2.6.32-14-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro single
 initrd    /boot/initrd.img-2.6.32-14-generic

 title Memory test (memtest86+)
 root (hd0,1)
 kernel    /boot/memtest86+.bin

 title Memory test (memtest86+, serial console 115200)
 root (hd0,1)
 kernel    /boot/memtest86+.bin console=ttyS0,115200n8

 title Microsoft Windows XP Home Edition (on /dev/sda2)
 rootnoverify (hd0,1)
 chainloader +1

 title Jaunty 2.6.28-15-custom
 root (hd0,8)
 kernel    /boot/vmlinuz-2.6.28-15-custom root=UUID=48e03255-22b3-488b-ae7e-9dbe4e2beac7 ro  quiet splash
 initrd    /boot/initrd.img-2.6.28-15-custom

 title SystemRescue
 root (hd0,6)
 kernel   /sysrcd/rescuecd subdir=sysrcd setkmap=us
 initrd  /sysrcd/initram.igz

[/spoiler]

Skoro już mamy plik konfiguracyjny czas na instalację samego GRUB’a:

  1. W sposób specyficzny dla naszej dystrybucji instalujemy GRUB’a Legacy. Paczka powinna się nazywać grub-0.97 lub podobnie.
  2. W konsoli jako root wpisujemy “grub”. Powinno to uruchomić interaktywną powłokę GRUB’a z której przeprowadzimy instalację.
  3. Wpisujemy
    root (hd0,0)

    Cyfry “0,0” zastępujemy odpowiednimi dla nas. Pierwsza oznacza numer dysku, liczony od zera, na którym znajdują się pliki GRUB’a (znajdują się one zawsze w katalogu /boot/grub/), a druga numer partycji na tym dysku, również liczony od zera. “(hd0,0)” odpowiada zatem pierwszej partycji pierwszego dysku.

  4. Następnie wpisujemy
    setup (hd0)

    Zainstaluje nam to GRUB’a w MBR pierwszego dysku.

  5. Teraz zostaje już tylko wyjść z interaktywnej powłoki poleceniem
    quit

I to by było na tyle. :)

  • Trackback are closed
  • Comments (2)
    • praktycznie
    • 05/13. 2010 8:38pm

    =(hd0,1) na root hd(0,1) Na pewno ?
    GRUB1 partycje liczone od 0
    GRUB2 partycje liczone od 1
    Dodatkowo #>grub itd. sie nie uda gdy nie ma reszty plików stage w katalogu ../grub/.
    Nie wystarczy zwyczajne:
    #>grub-install /dev/sdX ?

  1. @praktycznie
    Co do partycji masz rację. Zagapiłem się. Poprawione. Dzięki.
    Natomiast co do plików to instalacja GRUB Legacy powinna je zainstalować w odpowiednim katalogu.

Comment are closed.