Instalacja Debiana GNU/kFreeBSD 6.0 na ZFS
Kategoria: Artykuły, etykiety: grub2, instalacja, kfreebsd, zfs
Dodany: 2011-03-07 17:39
(zmodyfikowany: 2011-03-07 22:50)
Przez: bercik
Wyświetleń: 11962
Debian Squeeze jest pierwszym wydaniem wspierającym oficjalnie jądra z FreeBSD. Jednym z ciekawszych funkcjonalności wbudowanych w te systemy jest natywne obsługa ZFS. Także instalator wspiera ten system plików, jednak (pomimo kilku prób) nie udało mi się zainstalować z jego pomocą systemu, którego rootfs byłby na ZFS-ie (na ogół błędy dotyczyły zakładania systemu plików lub instalacji gruba). Poniżej przedstawię metodę ręcznej instalacji z wykorzystaniem działającego systemu Debian GNU/kFreeBSD, tak aby całość systemu (łącznie z /boot) znajdowała się pod ZFS-em.
Przygotowanie dysków
Utworzenie tablicy partycji
Tworzymy tablice partycji typu GPT.
root@debian-bsd:~# parted /dev/da0 'mklabel gpt'
Warning: The existing disk label on /dev/da1 will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
Information: You may need to update /etc/fstab.
Utworzenie partycji
Zakładamy dwie partycje: do wgrania gruba (w przykładzie 1 MB) oraz wgrania systemu (w przykładzie 999 GB), możemy też zostawić trochę miejsca ...
root@debian-bsd:~# parted /dev/da0 'mkpart'
Partition name? []? grub
File system type? [ext2]?
Start? 0
End? 1049kB
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
Information: You may need to update /etc/fstab.
root@debian-bsd:~# parted /dev/da0 'mkpart'
Partition name? []? zfs
File system type? [ext2]?
Start? 1000MB
End? 1000GB
Information: You may need to update /etc/fstab.
oraz ustawiamy flagę (dla 1 MB partycji) informującą, iż jest ona przeznaczona pod wgranie gruba (nie jest to /boot, a jedynie partycja bez systemu plików dla samego gruba). Brak tego kroku skutkowałby błędem: "This GPT partition label has no BIOS Boot Partition; embedding won't be possible!".
root@debian-bsd:~# parted /dev/da0 'set 1 bios_grub on'
Information: You may need to update /etc/fstab.
Wszystkie te kroki powtarzamy dla drugiego dysku (w przypadku niektórych systemów wielodyskowych - takich jak Sun Fire X4540, na którym powstawał ten opis - należy zwrócić uwagę aby oba dyski należały do grupy dysków umożliwiających bootowanie maszyny)
Utworzenie poola ZFS-owego
zpool create rpool mirror /dev/da0p2 /dev/da1p2
Instalacja systemu
Do instalacji systemu na przygotowanym dysku można wykorzystać debootstrap lub sklonować system, z którego dokonywaliśmy instalacji poprzez:
root@debian-bsd:~# cd / && tar -cf - --exclude="./rpool/*" --exclude="./proc/*" --exclude="./sys/*" --exclude="./dev/*" --exclude="./tmp/*" . | tar --numeric-owner -C /rpool/ -xf -
Instalacja grub2
Po zainstalowaniu systemu na docelowym dysku należy dokonać instalacji bootloadera, w tym celu skorzystamy z chrootowanego środowiska:
chroot /rpool/
W ramach niego powinniśmy zamontować systemy takie jak /dev, /proc, ...:
mount -t devfs devfs /dev
mount -t linprocfs linprocfs /proc/
mount -t linsysfs linsysfs /sys
A następnie zainstalować gruba i zaktualizować jego konfigurację:
grub-install /dev/da0
grub-install /dev/da1
update-grub
Poprawny wpis uruchomieniowy powinien wyglądać podobnie do poniższego:
insmod part_gpt
insmod zfs
set root='(hd0,2)'
search --no-floppy --fs-uuid --set f3d36c1b24128f4f
echo 'Loading kernel of FreeBSD 8.1-1-amd64 ...'
kfreebsd //@/boot/kfreebsd-8.1-1-amd64.gz
kfreebsd_module_elf //@/lib/modules/8.1-1-amd64/opensolaris.ko
kfreebsd_module_elf //@/lib/modules/8.1-1-amd64/zfs.ko
kfreebsd_module //@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
set kFreeBSD.vfs.root.mountfrom=zfs:rpool
set kFreeBSD.vfs.root.mountfrom.options=rw
Uwagi dodatkowe
Jeżeli instalatorowi systemu, który klonowaliśmy lub debootstrapowi coś nie do końca wyszło, możemy spotkać się z problemami przy restartowaniu usług poprzez /etc/init.d/XXX restart
(komunikat "Warning: Fake start-stop-daemon called, doing nothing") lub invoke-rc.d XXX reload
(komunikat "invoke-rc.d: policy-rc.d denied execution of reload."). Pierwszy z problemów rozwiązuje: apt-get install dpkg --reinstall
drugi natomiast rm /usr/sbin/policy-rc.d
.