GRUB to program rozruchowy, wykorzystywany m.in. przez Ubuntu. A jeśli posiadacz Ubuntu zapragnie startować za jego pomocą FreeBSD to w sieci może natknąć się na kilka, mniej lub bardziej aktualnych przykładów. Poniżej zamieszczę trzy, działające z aktualną wersją (w Ubuntu 10.04 wykorzystywany jest GRUB w wersji 1.98).

Przede wszystkim, jeśli mamy robić to We Właściwy Sposób (czyli przewidziany przez autorów dystrybucji) to nasz wpis dodamy na końcu pliku /etc/grub.d/40_custom (nie usuwamy komentarzy!) a następnie wywołamy polecenie sudo update-grub.

W omawianym przypadku FreeBSD znajduje się na partycji, rozpoznawanej przez linuksy jako /dev/sda2, GRUB określa ją obecnie jako (hd0,2). Główna partycja FreeBSD to (wedle nomenklatury FreeBSD) /dev/ad4s2a, GRUB rozpoznaje ją jako (hd0,2,a).

Przy okazji chciałbym zwrócić uwagę na pewien niuans: w wersji „legacy”, czyli 0.x, GRUB numerował partycje od „0”. Stąd partycja /dev/sda2 zapisywana była jako (hd0,1). W obecnej wersji (aka GRUB2) numeracja partycji zaczyna się od „1”, stąd zapis (hd0,2).

1. Podejście klasyczne czyli chainloader

menuentry "FreeBSD (chainloader)" {
	set root=(hd0,2,a)
	chainloader +1
}

Jak zapewne pamiętamy, w ten sposób możemy ładować praktycznie każdy system.

2. Z wykorzystaniem programu rozruchowego FreeBSD

menuentry "FreeBSD (/boot/loader)" {
	insmod ufs2
	set root=(hd0,2,a)
	kfreebsd /boot/loader
}

Tutaj pozwalamy, by GRUB złapał bezpośrednio za naszą partycję i wczytał znajdujący się tam /boot/loader.

3. Wszystko Sami

menuentry "FreeBSD (direct)" {
	insmod ufs2
	set root=(hd0,2,a)
	search --no-floppy --fs-uuid --set 4be684b3dcfeba3b
	kfreebsd                 /boot/kernel/kernel
	kfreebsd_loadenv         /boot/device.hints
	set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ad4s2a
	set kFreeBSD.vfs.root.mountfrom.options=rw
}

W tym przypadku odpowiedni UUID (do umieszczenia w drugiej linii) uzyskamy z poziomu linuksa, za pomocą polecenia grub-probe -d /dev/sda2 -t fs_uuid. Powinniśmy zadbać też o właściwą wartość parametru kFreeBSD.vfs.root.mountfrom.

Reklamy