Grub2 - szybkie dodawanie systemu windows

  • Data: 2014

Do napisania tego tekstu skłoniły mnie problemy podczas ostatniej instalacji systemu a raczej problem z tzw. bootloadrem. Odkąd zacząłem korzystać z Linuxa przeważnie korzystałem z poczciwego LILO (LInux LOader), który jest bardzo prosty w konfiguracji natomiast jest już trochę leciwy. Co mnie urzekło to fakt, iż Grub 2 potrafi zbootować obraz iso bezpośrednio z dysku. Jako, że sporadycznie miałem kontakt z poprzednią wersją gruba nie doznałem szoku podczas konfiguracji, jakiego doznali niektórzy użytkownicy przyzwyczajeni do gruba v1 (m.in. brak pliku /boot/grub/menu.lst na rzecz /boot/grub/grub.cfg).

Różnice między Grub1 a Grub2:

  • W poprzedniku do konfiguracji służył plik /boot/grub/menu.lst, który wystarczyło odpowiednio zmodyfikować. W Grubie 2 jest nowa struktura plików i katalogów konfiguracyjnych. Głównym plikiem konfiguracyjnym jest teraz /etc/grub/grub.cfg. Twórcy Gruba nie zalecają "ręcznej" edycji w/w pliku, grub.cfg jest generowany przez odpowiednie skrypty znajdujące się w /etc/grub.d/ ale o tym później.
  • WAŻNE: Zmienia się sposób numeracji partycji.
  • 
               grub1:     grub2:
    
    /dev/sda1  (hd0,0)   (hd0,1)
    /dev/sda2  (hd0,1)   (hd0,2)
    /dev/sda3  (hd0,2)   (hd0,3)
    
    /dev/sdb1  (hd1,0)   (hd1,1)
    /dev/sdb2  (hd1,1)   (hd1,2)
    /dev/sdb3  (hd1,2)   (hd1,3)
    	

    W odróżnieniu od poprzedniego Gruba numeracja partycji zaczyna się od 1 a nie od 0. Numeracja napędów pozostaje bez zmian czyli od 0.

Struktura plików i katalogów konfiguracyjnych Gruba 2 możemy podzelić na:

  • /boot/grub/grub.cfg - główny plik konfiguracyjny generowany przez skrypty
  • /etc/grub.d/ - katalog ze skryptami generującymi (zawartość może się różnić w zależności od dystrybucji, wymienię te, które nas interesują) w/w plik grub.cfg:

  • 05_debian_theme: ustawia tło, kolory tekstu, motyw graficzny
    10_hurd: lokalizuje jądra hurd
    10_linux: lokalizuje jądro Linuksa
    20_memtest86+: test pamięci
    30_os-prober: wyszukuje w każdej partycji systemów operacyjnych (Linux i inne) i integruje je w startowym menu
    40_custom: szablon do tworzenia niestandardowych elementów w menu dla innych systemów operacyjnych
  • /etc/default/grub - konfiguracja gruba wyłączając listę systemów w menu (m.in. limit czasu, kolejność systemów w menu)

  • GRUB_DEFAULT=N: kolejność, który system ma być uruchamiany jako pierwszy (liczymy od zera).
    GRUB_TIMEOUT=N: czas wyboru systemu (w sekundach).
    GRUB_CMDLINE_LINUX_DEFAULTM: parametry przekazywane do jądra systemu podczas startu

Dodawanie systemu Windows:

Dodanie kolejnego systemu można przeprowadzić w dwójnasób, dodać odpowiedni wpis do pliku /etc/grub.d/40_custom lub stworzyć własny skrypt w katalogu /etc/grub.d/. Szczerze mówiąc nie widzę większej różnicy między jednym a drugim sposobem. Ja wybrałem tworzenie własnych skryptów, kierując się zasadą jeden plik - jeden wpis w menu grub-a.

Poniższa konfiguracja przeprowadzona jest w następującej sytuacji (u siebie można sprawdzić wydając polecenie fdisk -l):


dysk nr 1:
   Device Boot      Id  System
/dev/sda1            7  HPFS/NTFS
/dev/sda2            f  W95 Ext'd (LBA)
/dev/sda5            83 Linux
dysk nr 2:
   Device Boot      Id  System
/dev/sdb1   *        c  W95 FAT32 (LBA) #partycja z windows xp
/dev/sdb2            f  W95 Ext'd (LBA)
/dev/sdb5            7  HPFS/NTFS

  • Modyfikacja pliku /etc/grub.d/40_custom :
  • 
    #!/bin/sh
    exec tail -n +3 $0
    # This file provides an easy way to add custom menu entries.  Simply type the
    # menu entries you want to add after this comment.  Be careful not to change
    # the 'exec tail' line above.
    menuentry "Windows XP" {
    set root=(hd1,1)
    drivemap -s (hd0) (hd1) ##WAŻNE: jeśli windows znajduje się na innej partycji niż grub
    chainloader +1
    }
    
  • Po zapisaniu pliku wydajemy polecenie update-grub2 generujące główny plik konfiguracyjny /boot/grub/grub.cfg
  • Tworzenie własnego skryptu:
  • W katalogu /etc/grub.d/ tworzymy skrypt, którego nazwa powinna zaczynać się od liczby, która determinuje kolejność występowania w menu. Niezależnie od dystrybucji w grubie plik generujący wpis dotyczący systemów Linux ma postać /etc/grub.d/10_linux, więc jeśli chcemy Windows-a na pierwszym miejscu należy stworzyć np. touch /etc/grub.d/09_WinXP
  • 
    #!/bin/sh -e
    echo "Dodany Windows XP" >&2	#komunikat przy wykonywaniu update-grub2
    cat << EOF
    menuentry "Windows XP" {	#wpis w menu
        set root=(hd1,1)		#ustawinie dysku i partycji
        drivemap -s (hd0) (hd1)	#WAŻNE:jeśli windows znajduje się na innej partycji niż grub
        chainloader +1		
    }
    EOF
    
  • ...i oczywiście update-grub2

grub2 - automatyczne dodawanie Windows-a

Jeśli ktoś nie jest zagorzałym fanem grzebania w plikach konfiguracyjnych z pomocą przychodzi program o nazwie os-prober. Aplikacja os-prober przeszukuje wszystkie dyski w celu znalezienia dodatkowych systemów, dodając je do menu gruba. Obsługa jest wprost banalna, sprowadza się do instalacji i uruchomienia.


aptitude install os-prober #instalacja dla systemów opartych na Debianie
os-prober
update-grub2

grub2 - bootowanie obrazu iso z dysku HDD

Poniżej przedstawię jak uruchomić obraz ISO znajdujący się na dysku z poziomu GRUB-a. Może to być zarówno LiveCD lub inne programy np. Acronis True Image. W tym przypadku aplikacja os-prober nie jest w stanie nam pomóc, musimy sami stworzyć odpowiedni wpis w /etc/grub.d/. Należy zaznaczyć, iż podana poniżej konfiguracja jest konkretnym przykładem dla systemu LiveCD Slax.

  • tworzymy plik etc/grub.d/44_liveCD_slack
  • 
    #!/bin/sh -e
    echo "Dodawanie Slax LiveCD" >&2
    cat << EOF
    menuentry "slax LiveCD"  {
    loopback  loop /root/iso/slax-6.1.2.iso
    linux       (loop)/boot/vmlinuz from=/root/iso/slax-6.1.2.iso ramdisk_size=6666 root=/dev/ram0 rw autoexec=startx
    initrd      (loop)/boot/initrd.gz
    }
    EOF
    
  • oczywiśćie update-grub2
Powrót »