• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Bootloader auf USB-Stick oder SD-Karte installieren

zuglufttier

Well-Known Member
Themenstarter #1
Ahoi,

ich habe einen HP Microserver Gen 8 und man kann dort nicht direkt von einer SSD z. B. booten, weil es im BIOS diese Option einfach nicht gibt, wenn der RAID-Controller im AHCI-Modus ist. Und genau das will ich, damit ich schön ZFS nutzen kann.
Nun kann man einen Bootloader ja auch ein anderes Medium schreiben. Hier ist eine Anleitung für Linux: https://www.hardwareluxx.de/communi...20lv2-microserver-963207-81.html#post22905333

Also, kurzum, wie geht das unter FreeBSD?
 

pit234a

Well-Known Member
#2
Hat der BIOS oder (U)EFI?

Mit BIOS könntest du auch mal versuchen, ob du nicht "ohne alles" auskommen kannst und einfach auf einen Stick den /boot/boot0 mit dd drauf legen. Der enthält den alten, interaktiven FreeBSD-Loader und der kann mit einer Option auf ein internes System verzweigen und das könnte schon ausreichen, deinen ZFS-Pool zu booten. Bei mir tut es das. Wenig elegant, aber wenig Aufwand und als Test schon mal einfach durchzuführen.
 

zuglufttier

Well-Known Member
Themenstarter #3
Ist noch BIOS. Das muss ich wohl mal ausprobieren...

Also einfach das folgende, wenn /dev/da1 der Stick ist?

dd if=/boot/boot0 of=/dev/da1
 
Zuletzt bearbeitet:

zuglufttier

Well-Known Member
Themenstarter #4
OK, die komplette Lösung findet sich auch schon hier: https://forums.freebsd.org/threads/57297/#post-334517 Ich fasse nochmal zusammen, damit ich es hier später wiederfinden kann...

Zunächst FreeBSD auf die gewünschte Platte installieren, da muss nichts besonderes gemacht werden. Zum Schluss einmal in das Live System rein und den Stick oder die SD-Karte da1 wie folgt behandeln. Das kann man auch später noch erledigen, sogar an einem anderen Rechner.

Partition auf dem Stick erstellen:
gpart create -s GPT da1

Bootloader installieren:
gpart bootcode -b /boot/boot0 da1

Und den Bootloader so einstellen, dass er von der gewünschten Platte startet, bei mir die fünfte am Controller. Gezählt wird von 0x80 an, also ist Nummer fünf dann 0x84. "-s 5" hat nichts mit der Plattenreihenfolge zu tun, sondern sagt nur, dass nicht von einer anderen Platte gestartet werden soll, siehe "man boot0cfg":
boot0cfg -Bv -o setdrv -d 0x84 -s 5 da1
 

pit234a

Well-Known Member
#5
das ist, denke ich mal, nicht anders. Also grundsätzlich mal nicht anders.
Ob du den bootcode boot0 mit dd schreibst, oder mit gpart, dürfte keinen Unterschied machen. Denke ich mal. Auch nicht, ob du GPT oder MBR verwendest, denn du nutzt eh nur den Teil mit boot0 drin.
Mit boot0cfg machst du dann das "Finetuning". Normalerweise, wenn ich das alles noch richtig weiß, hat der Loader die erste Platte konfiguriert und das Gerät, von dem aus er startet oder auch einen PXE-Boot. Dazwischen kann mit Fx Tasten gewählt werden. Nun kannst du mit boot0cfg die Deafult Fx Taste festlegen oder eine andere Platte hernehmen.

Ich dachte mir immer, dass etwas ähnliches auch für ZFS (also gptzfsboot) möglich sein könnte. Dann könnte ich einen Stick so einrichten, dass er das ZFS nicht vom Stick aus nimmt, sondern auf ein anderes Gerät mit dem Pool verweist, eben meine eingebaute Platte.
Dazu habe ich nichts gefunden und dann eben die oben beschriebene Möglichkeit genommen.
Bei mir kann ich das BIOS sogar passend einstellen, es funktioniert nur eben nicht. Ich kann nicht von einer Platte im AHCI-Modus booten.
Für den Betrieb belanglos, aber etwas mehr Arbeit gewesen.
 

das.chaos

Duracellhase 2.0
#6
Hi,

MBR Partitionisierungschema initialisieren:
Code:
# gpart create -s mbr da0
Bootsektor initialisieren:
Code:
# gpart bootcode -b /boot/mbr da0
MBR Partition erzeugen:
Code:
# gpart add -t freebsd da0
Slice anlegen und initialisieren:
Code:
# gpart set -a active -i 1 da0
# gpart create -s bsd da0s1
# gpart bootcode -b /boot/boot da0s1
Bspw. UFS-Partition innerhalb eines slices anlegen:
Code:
# gpart add -t freebsd-ufs  -a 4k -s ${size}   da0s1
usw. usf. ...

Quelle: http://www.wonkity.com/~wblock/docs/html/disksetup.html
 

pit234a

Well-Known Member
#7
MBR Partitionisierungschema initialisieren:
ja, aber das braucht es hier nicht und /boot/mbr ist "der andere" Bootloader, der "ohne Interaktivität" kommt und nur auf ein Ziel booten kann. Ich weiß nicht, ob man den auch so umändern kann, wie das bei /boot/boot0 der Fall ist. Ich habe da immer nur von boot0cfg gelesen.

Das ist schon irgendwie unheimlich, wie klein dieser boot0-Loader überhaupt ist und was der alles kann.

Was das Thema selbst angeht, wollte ich die Gelegenheit nutzen, mal einen Neustart meines PCs hinlegen und dann auch mal unterschiedliche Methoden und Settings testen. Zunächst fällt auch, dass einzelne Optionen geändert werden können, dabei aber die restlichen Werte wieder auf default landeten. Also, unbedingt immer wieder auslesen und prüfen, was man da hat. Ich wollte einmal nur die Ticks verändern und dadurch wurde die Bootreihenfolge dann verändert, wieder zurückgestellt.
Sodann testete ich mit zwei PCs und die reagierten unterschiedlich.
Bei dem einen bootete nur der Stick, der mit dd den boot0 drauf gelegt hatte und bei dem anderen nur der Stick, der mit gpart beschrieben worden war. Jener, der mit gpart beschrieben wurde, hatte auch "mehr Inhalt" im MBR. Ich hatte tatsächlich der Einfachheit halber zwei Sticks verwendet und gleichzeitig verändert und getestet. Man kann das Verhalten ja auch an "normalen" Rechnern testen, die also diese Hilfskonstruktion gar nicht bräuchten.
Es genügt da ja der älteste und kleinste Stick im Bestand.