Kein boot nach nach Neuinstallation von FreeBSD 13.1 - can't find /boot/zfsloader

bsd4me

Well-Known Member
Hi Leute,

ich hatte vor längerer Zeit mal ein kleines Programm geschrieben, mit dem ich über eine Kommandozeile leicht die Grundkonfiguration eines Servers installieren kann... das sieht dann so aus:

# host_install
USAGE: host_install poolname zfstype disc{,disc} rootsize swapsize ethdev image

WHERE
poolname - the name of the ZFS pool
zfstype - zfs type like "-", "mirror", "raidz1", "raidz2"
disc - a disc device, like ada0
rootsize - rootsize per disc in GB, like "2" (or "-" if the whole disk)
swapsize - swapsize per disc in GB, like "2"
ethdev - the ethernet device, like em0
image - the os image

DESCRIPTION
This script can be used to create partitions and install a FreeBSD
image on a hard disc. The best to to is in conjunction with PXE
booting.

das hat seinen Dienst auch sehr gut gemacht bisher... Auch mit den letzten 3 Servern unter FreeBSD 13.1

Heute hatte ich allerdings ein Problem nach dem Reboot:

zio_read error 5
ZFS. can't read MOS config
ZFS. can't find pool by guid

can't find /boot/zfsloader

Im anhang das Install programm und ein Bild vom Bildschirm... ich hoffe jemand kann mir einen Tipp geben...

PS: Der Rechner ist ein Supermirco Server mit 8 x 4 TB Festplatten

Lieben Dank! Norbert
 

Anhänge

  • zpool-error.jpg
    zpool-error.jpg
    296,8 KB · Aufrufe: 127
  • host_install.txt
    5,7 KB · Aufrufe: 120
ach, ich vergass: das Installationmedium ist ein USB stick, worauf ich ein mfsbsd image gelegt hatte und einem Verzeichnis install noch die notwendigen Programm und iamges, die man zum Installieren braucht.

beim Lauf des Programmes gab es noch die Fehlermeldung zu

cp /boot/zfs/zpool.cache /zfsmnt/boot/zfs/

:-)
 
Die Meldung
can't find /boot/zfsloader
würde drauf hindeuten, dass er den pool welcher den Folder /boot (per default "zroot") enthält nicht finden kann.

Kannst du mal mit nem Rescue booten und ein "zpool import" absetzen?
 
ja... danke! Aber leider bin ich gerade nicht in der Nähe des Servers, dass kann ich erst morgen wieder machen...
Allerdings nach dem botten von mfsbsd konnte ich den pool mit "zpool import poolname" importieren und der zeigte alles 8 Festplatten in eienm raidz2 an. Auch kein Fehler war dann zu sehen...
 
In Zeile 88 sollte ein 'if' stehen, es steht aber ein 'fi' dort.

Vergiss das, habs zu spät gerafft. :o
 
du meinst:

if [ "$ROOTSIZE" != "" ]; then
gpart add -a 4k -t freebsd-zfs -l r$DISK -s ${ROOTSIZE}G $DISK
# gpart add -a 4k -t freebsd-zfs -l x$DISK $DISK
else
gpart add -a 4k -t freebsd-zfs -l r$DISK $DISK
fi

aber das fi ist korrekt - es schliesst die if und else Bedingung ab :-)
 
Eine Frage: kann es sei, dass /etc/zfs/zpool.cahce nicht korrekt oder nicht da ist?
Ich habe im Programm host_install (welches unter mfsbsd lief) ein
cp /boot/zfs/zpool.cache /zfsmnt/boot/zfs/
Wobei /zfsmnt der temporäre mountpoint der Installation ist. Aber da kam auch eine Felermeldung, dass der Kopiervorgang fehlschlug.
Muss ich dann stat /boot -> /etc nehmen?
VG
 
Hi,

aus dem Skript:
Code:
zfs set mountpoint=/zfsmnt $POOLNAME/ROOT/default

Laut Doku muss das anders lauten:

Code:
NAME                PROPERTY              VALUE                  SOURCE 
zroot/ROOT/default  mountpoint            /                      local
zroot/ROOT/default  canmount              noauto                 local

Am besten, du gibst die Parameter einfach beim Erzeugen des ZFS mit an:

Code:
# zpool create $POOLNAME $ZFSTYPE $PARTS
# zfs set checksum=fletcher4 $POOLNAME
# zfs create -o mountpoint=none $POOLNAME/ROOT
# zfs create -o mountpoint=/ -o canmount=noauto $POOLNAME/ROOT/default
# mount -t zfs $POOLNAME/ROOT/default /zfsmnt

Die Datei zpool.cache würde ich überhaupt nicht vom Installationsmedium kopieren.

Rob
 
Hi KobRheTilla :-) Danke für die Zeilen... :-)

Das kopien mit zpool.cache klappt ja sowieso nicht...

Was
zfs create -o mountpoint=/ -o canmount=noauto $POOLNAME/ROOT/default
von Dir angehet - ich ahbe allerdings schon folgendes im Programm mit drin:
zpool set bootfs=$POOLNAME/ROOT/default $POOLNAME
das sollte doch reichen, oder?

ich habe extra keine mountpoints sonstwie angegben :-)

LG :-)
 
aus dem Skript:
Code:
zfs set mountpoint=/zfsmnt $POOLNAME/ROOT/default
das mache ich ja nur, damit ich weitere Settings in dem zroot pool machen kann. zum Schluss ist ja wieder ein:

zfs set mountpoint=none $POOLNAME/ROOT/default

Im übrigen ist dieses Skript auf 3 ähnlichen Servern die letzten Wochen erfolgreich gelaufen... :-)
 
auf eienm anderen Server sieht das so aus - und der bootet :-)

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 5.83T 56.0T 205K none
zroot/ROOT 6.56G 56.0T 205K none
zroot/ROOT/13.1-RELEASE_2022-08-28_162353 17.1K 56.0T 6.39G none
zroot/ROOT/default 6.56G 56.0T 6.41G none
zroot/backup 217G 56.0T 217G /backup
zroot/data 5.00T 45.0T 5.00T /data
zroot/home 449G 1.56T 449G /home
zroot/local 185G 1.82T 185G /local

das mit dem booten wir mittels

zpool set bootfs=$POOLNAME/ROOT/default $POOLNAME

doch festgelegt...
 
das mit dem booten wir mittels

zpool set bootfs=$POOLNAME/ROOT/default $POOLNAME

doch festgelegt...
Das stimmt wohl.
Ich würde mir mal ansehen, ob die Variablen auch tatsächlich korrekt gesetzt werden.
Gibt es noch weitere Fehlerausgaben, wenn du das Skript ausführst?

Nachtrag: oder einfach mal eine Standardinstallation vornehmen.

Rob
 
zio_read error 5
ZFS. can't read MOS config
ZFS. can't find pool by guid

can't find /boot/zfsloader
Das kann auch eine Folge des "Mein BIOS ist zu blöd mehr als x Sektoren zu lesen"-Problems sein. Eine ekligere, vor allem mit UFS vorkommende Variante davon ist das "Bis zum Update ging es noch, da alle relevanten Dateien vor der magischen Grenze lagen"-Problem. Das betrifft hauptsächlich ältere Maschinen oder bei neueren Maschinen den BIOS-Boot. Wenn das Dateisystem mehr Sektoren umfasst, als die Firmware lesen kann, bricht der Boot mit obskuren Fehlern beim Versuch den Loader oder Kernel zu finden ab. Einfach, da ein Teil der Metadaten oder Dateien zu weit hinten im Dateisystem liegen und für die Firmware nicht erreichbar sind. Dagegen hilft dann leider nur entweder den UEFI-Boot zu probieren und wenn das auch versagt / (oder wenigstens /boot) auf eine kleinere Partition am Anfang der SSD oder hier des Arrays zu legen.

Nachtrag: Um 2012 rum, also in der frühen Eisenzeit, habe ich auch mal eine Variante gesehen, wo die Firmware auseinanderflog, da zu viele Festplatten am Boot beteiligt waren. Das waren verdammt viele, die Kiste ich meine 24 Slots und war voll belegt. Hat mich damals einiges an Rätselraten gekostet darauf zu kommen.
 
Ihr Lieben... Danke für all die Kommentare. So richtig ist mir das nicht klar. Der Supermicro Server ist 3-4 Jahre alt, aber noch nicht uralt. Ich werde morgen nochmals versuchen, das Ding hinzubekommen... Ich hoffe, es liegt nur am /etc/zfs/zpool.cache oder der Variante:
zfs create -o mountpoint=/ -o canmount=noauto $POOLNAME/ROOT/default
Ansosnten werde ich es mal dem Standardinstallationsimage von FreeBSD versuchen.
Viele Grüße, Norbert
 
Noch eine Anmerkung zur Partitionierung, die ich woanders gemacht habe:

# gpart show da0
=> 40 5860533088 da0 GPT (2.7T)
40 1024 1 freebsd-boot (512K)
1064 33554432 2 freebsd-swap (16G)
33555496 5826977624 3 freebsd-zfs (2.7T)
5860533120 8 - free - (4.0K)

in der neuen Installation habe ich den Swap allerdings nur auf 4GB... Ich sehe da jetzt keine "Sektorbegrenzungen"...
 
Code:
33555496  5826977624    3  freebsd-zfs  (2.7T)

Hier wäre sie. Der Loader (in der freebsd-boot Partition) ist ja ein klassisches BIOS-Programm. Also drauf angewiesen, was das BIOS treibt. Oder eben die BIOS-Emulation des UEFI. Wenn es dort eine 2 Terabytebegrenzung gibt, kann es beim Lesen vom /boot/loader oder dem Kernel aus /boot/kernel aus dem ZFS Probleme geben.
 
hi Yamagi :-) das mit der 2TB Grenze ist trotzdem komisch. (1) da sich vorher mal FreeBSD 11.4 installieren lies und (2) das gleiche Script bei anderen Servern und grösseren Festplatten keine Probleme machte. Ich schaue trotzdem morgen mal ins BIOS/UEFI. Vielleicht ist da wirklich der Haken... VG Norbert
 
Es ist ja auch nur eine Vermutung. Ich meine, Supermicro ist ja nun kein Billig-Murks und eigentlich haben sie ihre Firmware im Griff... Aber man hat eben auch schon Pferde vor der Apotheke kotzen sehen.
 
Vielen Dank Euch allen!!! Die Installation mittels des Standard Install Images hat geklappt... Ich muss mal in Zukunft schauen, wo es bei meinem "1-Zeiler" nicht geklappt hat. Auf jeden fall eine enorme Erleichterung heute.
Damit kann man den Thread schliessen :-)
Viele Grüße!!!
 
Zurück
Oben