Updating Server BIOS remotely over IPMI using Virtual Floppy Disk
How does one update the BIOS on a remote Supermicro server when Supermicro only supplies floppy-disk based utilities and we don't have a floppy drive? If you have IPMI access to the server, attach a bootable flash drive.
Warning, this approach is for daredevils only.
Updating the bios on my Supermicro servers is incredibly tedious, as Supermicro supplies the BIOS in self-extracting files that attempt to format a floppy disk drive. I don't have floppy disk drives, so I typically burn a bootable CDRom with DOS 6.22 and drive to the data center to manually update the server. Here is an approach that is more convenient, but riskier.
Copy BIOS Settings
I use a screen capture plugin and Dokuwiki to record all of the BIOS settings into my personal wiki. I will use this to restore the settings after the BIOS update.
Create a Bootable Flash Disk
There are various tools available to install a DOS boot image on a flash drive. I use the "HP Format Utility for USB Drives", but any one should also work. The Supermicro bios update utility is extracted and copied to this book flash drive.
I attach the flash drive to my computer and connect it using IPMI. It is important to connect the flash drive in read-enabled mode because the flash utility will attempt to backup the current BIOS version.
IPMI provides the network interface and transport that makes the flash drive appear as if it is attached directly to the server. This is what the drive redirection looks like:
The server's boot order must be updated so that this flash drive boots first.
Reboot the server. It will boot into DOS, where the operating system is coming from the flash drive sitting on my desk. The flash drive light blinks quickly to show that the remote server is booting from it. I use the IPMI console to finish the BIOS update as if I were in front of the server in the data center.
Is this risky? Very. I made dry runs before actually updating the BIOS and was prepared to drive to the data center if anything went wrong.