FreeBSD und Adaptec RAID
Für die Massenterminierung von PPPoX Verbindungen gab es die Empfehlung, MPD zu nehmen. Das braucht FreeBSD. Ich habe mir ehrlich gesagt wenig Gedanken gemacht, ob die geplante Hardware im Detail passen wird oder nicht. Das war ein Fehler. Man kann leider bei vielen Betriebssytemen (Mainstream oder nicht) immer wieder erleben, daß aktuelle oder alte Hardware nicht unterstützt wird.
Mit dem stabilen FreeBSD 9.0 bootet das System bis in den Installer, der dann keine Festplatten sieht. Der Adaptec RAID 6805 Controller wird nicht unterstützt. Dies ist ein besonders dummer Fall, weil es die Installation grundsätzlich verbietet. Hat man ein System erstmal auf der Platte, findet sich i.d.R. immer ein Weg, fremde Treiber auf- oder Sourcecodeanpassungen vorzunehmen. Aber ohne Platte?
Adaptec bietet einen Treiber für FreeBSD 8.2, der aber nicht auf den Installationsmedien liegt. In Foren finden sich verschiedene Vorschläge, den Treiber auf anderen Medien bereitzustellen, sei es per FreeBSD formatiertem USB (hab ich nicht) oder FAT formatiertem USB mit zwei CDs (ich hab nur ein Laufwerk und das auch nur via BMC).
Das Installmedium
Was liegt näher, als sich selbst ein individuelles Installationmedium zu bauen? Linux Kenntnisse sind ja glücklicherweise vorhanden:
$ wget ftp://ftpv6.plusline.net/pub/FreeBSD/releases/amd64/ISO-IMAGES/8.3/FreeBSD-8.3-RELEASE-amd64-disc1.iso $ mkdir install-cd # mount -o loop -t iso9660 FreeBSD-8.3-RELEASE-amd64-disc1.iso install-cd $ tar -C install-cd -cf - . | (mkdir cd.adaptec; tar -C cd.adaptec -xvpf -)
Eine Kopie des Images steht nun zur Verfügung. Die muß nun modifiziert werden.
$ wget http://download.adaptec.com/raid/aac/unix/aacraid_freebsd_b18668.tgz $ tar -xzf aacraid_freebsd_b18668.tgz freebsd8/ $ cp -a freebsd8/aacu64.ko cd.adaptec/boot/kernel/ $ chmod u+w cd.adaptec/boot/defaults/loader.conf $ vi cd.adaptec/boot/defaults/loader.conf
Damit ist der Treiber an der richtigen Stelle und ja, es funktioniert auch mit FreeBSD 8.3. In der loader.conf muß nun der Treiber auch aktiviert werden. Der Editor ist schon offen, fehlt also noch der Patch.
--- install-cd/boot/defaults/loader.conf 2011-02-17 03:19:19.000000000 +0100 +++ cd.adaptec/boot/defaults/loader.conf 2012-09-17 14:22:48.000000000 +0200 @@ -455,6 +455,7 @@ ### Other modules ########################################## ############################################################## +aacu64_load="YES" # Adaptec RAID aio_load="NO" # Asynchronous I/O bktr_load="NO" # Brooktree Bt848/Bt878 TV/Video Capture Card ispfw_load="NO" # Qlogic ISP Firmware
Nun noch das bootfähige Medium bauen.
$ mkisofs -R -no-emul-boot -b boot/cdboot -o FreeBSD-8.3-Adaptec-disk1.iso cd.adaptec/
Und davon booten.
Die Scheckminuten
Es bootet. Der Loader läd den Kernel. Er läd das Modul. Die Freude ist groß.
FreeBSD/i386 bootstrap loader, Revision 1.1 Loading /boot/defaults/loader.conf /kernel text=0x277391 data=0x3268c+0x332a8 ... Loading /boot/kernel/aacu64.ko text=0x100042321
Der Loader ist da:
Und dann steht alles. De Zähler ist auf Null. Das Rädchen steht. Absturz.
Versuche mit der 8.2 und anderen Medien blieben erfolglos. Immer ein Absturz, wenn der Loader weiter booten soll.
Und weiter geht's
Irgendwann erwischte mich ein Telefonanruf eines Kunden an dieser Stelle. Ich war eine gute Viertelstunde weg.
Und als ich wieder da war, grinste mich der Installationschirm an. Dieser blöde Loader tut einige Minuten(!) lang gar nichts Sichtbares. Dann geht's plötzlich weiter. Und die Platte steht zur Verfügung. Hurra!
Nach mehreren Fehlversuchen, die durch Kleinigkeiten verursacht wurden, ist das System auf der Platte:
Bei der Automatic-Partitionierung erschienen mir 16G /var und 300G /usr im Mißverhältnis. Also beide Partitionen löschen und neu anlegen. Allerdings ist die zweite Partition immer "Partition to big?". Erst viel später habe ich mitbekommen, daß beim Löschen von /var vor der /tmp Partition eine 16G Lücke reißt, die nicht trivial sichtbar ist. Ich hatte mir die Platte fragmentiert und Platz zwischen den Partitionen verbrannt. FreeBSD schlägt eben nicht, wie dokumentiert, den größten zusammenhängende Bereich vor, sondern den gesamten Restplatz.
Bei dem Anlegen der Nutzeraccounts schlug das System /home/<user> als Verzeichnisbaum vor. Stop! Das liegt auf Root. Da gehört eine extra Partition rein. Also nochmal von vorn.
FreeBSD Disklabel Editor Disk: aacd0 Partition name: aacd0s1 Free: 0 blocks (0MB) Part Mount Size Newfs Part Mount Size Newfs ---- ----- ---- ----- ---- ----- ---- ----- aacd0s1a / 1024MB UFS2 Y aacd0s1b swap 4096MB SWAP aacd0s1d /var 32768MB UFS2+S Y aacd0s1e /tmp 1024MB UFS2+S Y aacd0s1f /usr 32768MB UFS2+S Y aacd0s1g /home 208GB UFS2+S Y
Zum Schluß rebootet das System und endlich läuft alles von der Platte.
Nochmal Adaptec
Unglücklicherweise bootet das System von der Platte ohne den Adpatec Treiber und bleibt so nach dem Kernelladen hängen. Verdammt!
Also nochmal von CD gebootet, und im loader mit "set rootdev=disk1s1a:" (nicht /dev/aacd1s1a) von der Platte weiter gebootet. Dann eingeloggt und via Netzwerk (wie hieß gleich der Treiber, der vom BMC virtualisierte CD Laufwerke erkennt?) das Kernelmodul geholt, loader.conf angepaßt ... Fertig.
Jetzt bootet das System wie gewünscht. Es gibt zwar immer noch die Gedenkminute nach dem Loader, aber ich erschrecke nicht mehr.
Dann: mount -t cd9660 /dev/cd1 /mnt/
Stilistisch würde ich statt
$ vi cd.adaptec/boot/defaults/loader.conf
ein
$ vi cd.adaptec/boot/loader.conf
machen und dort das aacu64_load="YES" eintragen.
Siehe loader.conf(5).
https://0x20.net/8.3-RELEASE-p2+++aac-b18668.g.patch
http://marc.info/?l=openbsd-misc&m=126775051500581
http://marc.info/?l=openbsd-misc&m=128779369427908
View all 10 comments