Archiv für den Monat: Januar 2014

FreeBSD: Kernel missing

Boot Environments bieten eine solide Möglichkeit mit Hilfe von duplizierten ZFS Root Datasets (zfs clone snapshot) diverse Testumgebungen zu fahren.
Erstellt man sich jedoch weitere, individuelle ZFS Container, kann man sich schnell sein Bootstrap kaputt spielen.

Zur Vorbereitung des anstehenden Upgrades auf FreeBSD 10.0 diente mein Laptop als Testbuild-Umgebung.

ZFS Volumes:

$
NAME                        USED  AVAIL  REFER  MOUNTPOINT
zroot                      54,0G  59,2G   413M  legacy
zroot/ROOT                 5,17G  59,2G    31K  legacy
zroot/ROOT/make10.0        5,17G  59,2G  5,08G  legacy
zroot/ROOT/system9.2p3      156K  59,2G  5,08G  legacy
zroot/github                599K  59,2G   525K  /github
zroot/tmp                  20,8M  59,2G  20,6M  /tmp
zroot/usr                  48,0G  59,2G  9,62G  /usr
zroot/usr/home             36,3G  59,2G  36,1G  /usr/home
zroot/usr/obj              1,25G  59,2G  1,24G  /usr/obj
zroot/usr/ports             136K  59,2G    33K  /usr/ports
zroot/usr/ports/distfiles    54K  59,2G    54K  /usr/ports/distfiles
zroot/usr/ports/packages     31K  59,2G    31K  /usr/ports/packages
zroot/usr/src               807M  59,2G   748M  /usr/src
zroot/var                   341M  59,2G  18,2M  /var
zroot/var/crash            31,5K  59,2G  31,5K  /var/crash
zroot/var/db                223M  59,2G   170M  /var/db
zroot/var/db/pkg           28,7M  59,2G  25,0M  /var/db/pkg
zroot/var/empty              31K  59,2G    31K  /var/empty
zroot/var/log              87,8M  59,2G  87,6M  /var/log
zroot/var/mail               32K  59,2G    32K  /var/mail
zroot/var/run               246K  59,2G   123K  /var/run
zroot/var/tmp              3,32M  59,2G  3,17M  /var/tmp
$
$
vfs.root.mountfrom="zfs:zroot/ROOT/make10.0"
$

Boot Environments:

$
BE          Active Mountpoint  Space Created
system9.2p3 -      -            1.6M 2014-01-21 23:11
make10.0    NR     /            5.2G 2014-01-22 06:47
$

Um verschiedene Kernelversionen testen zu können, ohne jedes mal eine neue BE verlinken zu müssen, spaltete ich den kompletten /boot kernel von der BE ab, geistig umnachtet wurde der bootstrap nicht beachtet (boot0 -> boot1 -> boot2 -> kernel missing, was zu einem fehlerhalten Systemstart führte:

$
cd /
mv boot boot_
zfs create -o compression=lz4 zroot/boot
zfs set mountpoint=/boot zroot/boot
cp -prfv /boot_/* /boot

reboot
$

Hinweis:

$
zroot/boot                  223M  59,0G   223M  /boot
$

Da sich nichts am zpool verändert hat, funktionierte auch der vorhandene zpool.cache (file)

FreeBSD Beastie Fehler / Lösung

Fehler 1:

$
can't find /boot/zfsloader

FreeBSD/x86 boot
Default: zroot/ROOT/make10.0:/boot/kernel/kernel
\
$

Lösung 1: (stage2 – boot2 fix)

$
boot: zroot/boot:/zfsloader
$

Fehler 2:

$
FreeBSD/x86 ZFS enabled bootstrap loader
\
can't load 'kernel'
OK
$

Lösung 2: (stage 3 – boot3 fix)

$
OK load kernel/kernel
OK load kernel/opensolaris.ko
OK load kernel/zfs.ko
$

Modulprüfung per lsmod

Lösung 3: neues mountfrom setzen und im single-user mode starten

$
OK show

OK set currdev=zfs:zroot/ROOT/make10.0:

OK boot -s
$

Das root filesystem wird im single-user mode automatisch als readonly gemountet!

$
# mount

zroot/ROOT/make10.0 on / (zfs, local, read-only, nfsv4acls)
$

Lösung 4: Kernel für das BE wiederherstellen

$
zfs destroy zroot/boot
rm -rfv /boot

zfs set readonly=off zroot/ROOT/make10.0
mv /boot_ /boot

reboot
$

That’s it.