Grub2 - szybkie dodawanie systemu windows
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:
- /etc/default/grub - konfiguracja gruba wyłączając listę systemów w menu (m.in. limit czasu, kolejność systemów w menu)
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
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
}
#!/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
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