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]
- Wyrzucamy sekcje “/etc/grub.d/00_header”. Zawiera ona skrypty GRUB’a których GRUB Legacy nie obsługuje.
- 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.
- Sekcję “/etc/grub.d/05_debian_theme” zmieniamy na jedno-linijkową postać
color white/black black/light-gray
- 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.
- Wszelkie linie zaczynające się od “insmod” wyrzucamy. Tak samo robimy z liniami “search”, “echo” oraz “recordfail”.
-
set root='(hd0,1)'
zamieniamy na
root (hd0,0)
ponieważ GRUB Legacy numeruje zarówno dyski i partycje od 0
- Słowo “linux” zamieniamy na kernel.
- 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:
- W sposób specyficzny dla naszej dystrybucji instalujemy GRUB’a Legacy. Paczka powinna się nazywać grub-0.97 lub podobnie.
- W konsoli jako root wpisujemy “grub”. Powinno to uruchomić interaktywną powłokę GRUB’a z której przeprowadzimy instalację.
- 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.
- Następnie wpisujemy
setup (hd0)
Zainstaluje nam to GRUB’a w MBR pierwszego dysku.
- Teraz zostaje już tylko wyjść z interaktywnej powłoki poleceniem
quit
I to by było na tyle. :)
=(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 ?
@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.