PC von einem USB-Stick booten meldet „Missing Operating System“ (oder: Lenovo Thinkpad BIOS Updates ohne Windows)

Kürzlich habe ich dank der Funktion dmidecode nicht nur herausgefunden, wie ich aus der Ferne feststellen kann, um welchen Gerätetyp es sich bei einem Laptop-Server konkret handelt …

...
Handle 0x000E, DMI type 1, 27 bytes
System Information
Manufacturer: LENOVO
Product Name: 4236MBG
Version: ThinkPad T420
Serial Number: XXXXXXX
UUID: 045E0181-510B-110B-BEFD-D0C20D7188AE
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: ThinkPad T420
...

… sondern auch, dass die BIOSse meiner Thinkpad-Flotte wohl mal aktualisiert werden sollten:

...
BIOS Information
Vendor: LENOVO
Version: 6QET69WW (1.39 )
Release Date: 04/26/2012
...

Erstaunlicherweise unterhält Lenovo seine Support-Seiten vorzüglich und es fanden sich innert weniger Minuten alle Seiten mit BIOS-Updates für meine Thinkpads X200s, X201, T400 und T420.

Da auf den Dingern kein Windows läuft, kann man das Update über diesen Weg vergessen. Glücklicherweise bietet Lenovo auch noch CD-Images (sog. ISOs) an, mit welchem die ca. 40MB Updatedaten auf CDs gebrannt werden können. Der Laptop kann dann von dieser CD gestartet und die Updates installiert werden, d.h. die Anforderung Windows entfällt so.

Erstes Problem: Die Links auf die ISO-Images auf den Seiten mit dem „BIOS Update Utility for Windows“ funktionieren nicht. Hier hilft Google jeweils kurzerhand weiter: „X200s BIOS Update Bootable CD“ findet dann den korrekten Link der Seite.

Nachdem man sich von dort die ISOs heruntergeladen hat und sie bspw. (graphisch) mit Etcher (oder auf dem CLI mit dd) unter macOS auf einen USB-Stick schreiben will, ein weiterer Showstopper: Etcher meldet nach dem Transfer, dass der USB-Stick kein gültiges Dateisystem enthält.

Wie sich mit etwas googeln herausstellt verwendet Lenovo für seine Boot-CDs den El Torito-Standard. Deshalb muss man aus dem .iso mit dem Perl-Script geteltorito.pl das eigentliche Image extrahieren. geteltorito.pl findet sich unter Debian GNU/Linux im Paket genisoimage. Aus der Boot-CD des BIOS-Updates für ein Lenovo Thinkpad X201 extrahiert man das eigentliche ISO-Image folgendermassen:

#!/bin/bash

/Users/mario/Scripts/cd-dvd/geteltorito.pl -o 6quj19us.img 6quj19us.iso

exit 0

Auf der Kommandozeile liest man dann ungefähr Folgendes:

$ extract.sh
Booting catalog starts at sector: 20
Manufacturer of CD: NERO BURNING ROM
Image architecture: x86
Boot media type is: harddisk
El Torito image starts at sector 24 and has 65536 sector(s) of 512 Bytes

Image has been written to file "6quj19us.img".

Anschliessend schreibt man das .img folgendermassen auf einen USB-Stick, welcher als /dev/rdisk5 gemountet ist:

#!/bin/bash

dd if=6quj19us.img of=/dev/rdisk5 bs=512k

exit 0

Auf der Kommandozeile liest man dann ungefähr Folgendes:

# write.sh
32+0 records in
32+0 records out
33554432 bytes transferred in 6.970957 secs (4813461 bytes/sec)

Einige der folgenden Links waren für die Auskundschaftung dieser Alternative essentiell, andere (weiter unten) Sackgassen:

Updating the BIOS on Lenovo laptops from Linux using a USB flash stick

LENOVO BIOS/UEFI UPDATE FROM USB STICK (WITHOUT BOOTABLE CD)

Solution: dd too slow on Mac OS X

Raspberry Pi: INSTALLING OPERATING SYSTEM IMAGES ON MAC OS

BIOS Upgrade/X Series

Extract an El Torito boot image from an ISO file under linux

Modify a bootable .iso image (macOS)

Die Grösse des USB-Sticks scheint eine Rolle zu spielen

Während einer Stunde habe ich mir dann die Zähne ausgebissen — sowohl mit Etcher als auch mit dd habe ich diverse Images auf einen uralten SanDisk Cruzer USB-Stick mit 512MB geschrieben. Doch jedes Mal, als ich mein Testgerät, ein Lenovo Thinkpad T400, damit booten wollte, erschien die Fehlermeldung „Missing Operating System“.

Erst als ich den USB-Stick auswechselt und einen LaCie itsaKey mit 4GB verwendete, klappte das booten und updaten der Thinkpads reibungslos.

Derzeit bin ich der Meinung, dass dies irgendwie damit zu tun hat, dass der erste USB-Stick mit 512MB kleiner als eine CD mit 640MB ist und dadurch Probleme mit dem Boot-Programm im MBR entstehen. Oder aber dass vom SanDisk-Stick schlicht und einfach nicht gebootet werden kann, weil die Hardware des USB-Sticks das aus mir unerfindlichen Gründen nicht unterstützt.

Zum Schluss noch ein Screenshot, wie die Partition im Disk Utility.app angezeigt wird — mich erstaunt, dass „Bootable“ als „No“ angegeben wird, wobei ich nicht weiss, ob damit gemeint ist, dass Macs gebootet werden können: