How to Flash Server BIOS Using a Bootable DOS USB on Linux

Flashing a server BIOS from Linux is straightforward when the vendor provides a working Linux utility, but that is rarely the case on modern systems. Many server vendors, including Lenovo, Dell, HP, and Supermicro, ship DOS-based BIOS update packages as their most reliable flashing method. Their Linux flash utilities frequently rely on deprecated kernel interfaces that no longer compile against modern kernels, leaving the DOS method as the only practical option. This guide shows how to build a bootable DOS USB drive entirely from Linux, using GRUB and FreeDOS, and use it to run the vendor’s DOS flash utility directly.

We use a real-world example throughout: upgrading the BIOS on a Lenovo ThinkServer TS140 from version FBKT99A (September 2014) to FBKTC7A (June 2016) in preparation for a CPU upgrade. The specific server model, BIOS file URLs, and version strings are all specific to that machine and are used purely as a concrete reference. The underlying method is entirely vendor-independent and applies equally to Dell, HP, Supermicro, ASRock Rack, and any other server that ships a DOS-based BIOS update package.

IMPORTANT
This guide uses a Lenovo ThinkServer TS140 as a working example only. The bootable DOS USB method described here works with any server vendor that provides a DOS-based BIOS flash utility, which covers the vast majority of server hardware currently in use. Once the USB is prepared, it can be reused for future BIOS updates across different servers by simply replacing the vendor BIOS folder contents. The GRUB and FreeDOS boot infrastructure stays the same.

In this tutorial you will learn:

  • How to identify your current BIOS version from the Linux CLI
  • How to find and verify the correct vendor BIOS package
  • How to partition and format a bootable DOS USB drive from Linux
  • How to set up GRUB and FreeDOS memdisk to boot a DOS environment
  • How to run a vendor DOS flash utility and confirm the update
Abstract illustration representing server BIOS flashing using a bootable DOS USB drive on Linux
Build a bootable DOS USB from Linux and flash your server BIOS without a working vendor Linux utility

Software Requirements

Software Requirements and Linux Command Line Conventions
Category Requirements, Conventions or Software Version Used
System Any modern Linux distribution (Debian, Ubuntu, Arch, etc.) on the preparation machine
Software syslinux, syslinux-common, grub-pc-bin, grub2-common, dosfstools, unzip, wget, dmidecode
Hardware USB drive of at least 1GB (will be wiped), server with a DOS-based BIOS update package from the vendor
Other Privileged access to your Linux system as root or via the sudo command.
Conventions # – requires given linux commands to be executed with root privileges either directly as a root user or by use of sudo command
$ – requires given linux commands to be executed as a regular non-privileged user
TL;DR
Format a USB as FAT32, install GRUB, load FreeDOS via memdisk, copy the vendor BIOS zip to the USB, then boot the server and run Flash.bat.

Quick Steps to Flash Server BIOS from DOS USB
Step Command/Action
1. Check current BIOS version dmidecode -t bios | grep -E "Version|Release Date"
2. Partition and format USB parted /dev/sdX --script mklabel msdos mkpart primary fat32 1MiB 100% set 1 boot on
3. Install GRUB + FreeDOS memdisk grub-install --target=i386-pc --boot-directory=/mnt/usb/boot /dev/sdX
4. Boot server, run flash utility C: && cd BIOSDOS && Flash.bat

When You Need This Approach

The most common trigger is a vendor-supplied Linux BIOS flash utility that no longer compiles. Lenovo’s Linux flasher for the TS140 series, for example, relies on a kernel module that uses deprecated ioctl interfaces removed from the Linux kernel years ago. Attempting to compile it on a modern distribution produces errors such as:

error: 'struct file_operations' has no member named 'ioctl'

This is a widespread problem. Server vendor tooling is often written for specific kernel versions and never updated to track upstream API changes. Consequently, rather than hunting for patched versions or downgrading your kernel, the DOS flash utility is the more robust alternative, it runs in a fully isolated environment below the operating system and is therefore unaffected by any Linux kernel version.

Additionally, you will want this approach when:

  • Preparing for a CPU upgrade: A BIOS update is frequently required before installing a newer processor. In our case, upgrading from an Intel Core i3-4330 to a Xeon E3-1281 v3 required a BIOS version that included updated CPU microcode and explicit new CPU support.
  • Applying security patches: CPU microcode updates addressing vulnerabilities such as Spectre and Meltdown are often delivered via BIOS updates on server hardware.
  • Headless servers: Servers without a desktop environment where GUI-based tools are not an option.
  • No Windows available: When the vendor’s only straightforward flash method requires a Windows executable.

Prerequisites

You will need a Linux workstation or laptop to prepare the USB drive, this does not need to be the target server itself. Install all required packages on the preparation machine before proceeding:

$ sudo apt install syslinux syslinux-common grub-pc-bin grub2-common dosfstools unzip wget

IMPORTANT
You also need dmidecode installed on the server to check BIOS versions. It is included by default on most distributions, but can be installed with sudo apt install dmidecode if missing.

Finding and Verifying the Correct BIOS File

Before downloading anything, check the current BIOS version on the server so you can confirm the update is actually newer:

# dmidecode -t bios | grep -E "Version|Release Date"

On our Lenovo ThinkServer TS140 this returned:

Version: FBKT99AUS
Release Date: 09/19/2014

Next, locate the DOS update package from your vendor’s support site. For Lenovo ThinkServer products, files are hosted directly at download.lenovo.com. Since vendor download pages sometimes change, it is worth probing the direct file URL before committing to a download:

$ wget --spider "https://download.lenovo.com/pccbbs/thinkservers/bios_me_ts140-240-440-540_fbktc7a_dos.zip" 2>&1 | grep "HTTP"

A 200 OK response confirms the file is accessible. Many vendors also publish a plain-text changelog alongside the zip. Reading it confirms the version date and whether your specific scenario, such as new CPU support, is addressed:

$ wget -qO- https://download.lenovo.com/pccbbs/thinkservers/bios_me_ts140-240-440-540_fbktc7a_dos.txt | grep -E "Version|Issue date"

Version    C7A
Issue date Jun 24, 2016

The changelog for C7A included the entry “Update to support new CPU”, confirming it was the correct version for our planned Xeon E3-1281 v3 upgrade. Once verified, download the file:

$ wget https://download.lenovo.com/pccbbs/thinkservers/bios_me_ts140-240-440-540_fbktc7a_dos.zip -O /tmp/ts140_bios_c7a.zip

SECURITY ALERT
Always download BIOS packages directly from the official vendor CDN. For Lenovo this is download.lenovo.com. Third-party driver sites frequently repackage firmware files and cannot be trusted for something as sensitive as a BIOS update.

Terminal output showing lscpu and dmidecode commands revealing Intel Core i3-4330 CPU details and BIOS version FBKT99AUS dated 09/19/2014
Using lscpu and dmidecode to identify the current CPU and BIOS version before the update

Preparing the Bootable DOS USB Drive

This section covers partitioning the USB drive, installing GRUB as the bootloader, downloading a minimal FreeDOS image, and configuring GRUB to boot it via memdisk. The result is a USB that boots directly into a DOS environment with your vendor BIOS files accessible.

Step 1, Identify the USB Drive

Insert your USB drive and identify its device name:

$ lsblk -o NAME,SIZE,VENDOR,MODEL

Confirm the correct device before proceeding, all data on it will be erased.

Terminal output of lsblk command identifying a SanDisk Cruzer Switch 7.5GB USB drive as /dev/sda
lsblk -o NAME,SIZE,VENDOR,MODEL /dev/sda confirming the target USB drive before formatting

Step 2, Partition and Format

  1. Unmount any existing partitions on the USB:
    # umount /dev/sda1 2>/dev/null; umount /dev/sda2 2>/dev/null
  2. Wipe existing partition table and create a new MBR layout:
    # wipefs -a /dev/sda
    # parted /dev/sda --script mklabel msdos mkpart primary fat32 1MiB 100% set 1 boot on
  3. Format the partition as FAT32:
    # mkfs.vfat -F 32 -n BIOSDOS /dev/sda1

Step 3, Install GRUB and syslinux MBR

# syslinux --install /dev/sda1
# dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda bs=440 count=1 conv=notrunc
# mkdir -p /mnt/usbdos
# mount /dev/sda1 /mnt/usbdos
# grub-install --target=i386-pc --boot-directory=/mnt/usbdos/boot /dev/sda

IMPORTANT
The syslinux command may print warnings about hidden sectors. These are harmless, the install proceeds successfully regardless.

Step 4, Copy the BIOS Files to the USB

# unzip /tmp/ts140_bios_c7a.zip -d /mnt/usbdos/

This creates a BIOSDOS/ directory on the USB containing Flash.bat, IMAGEFB.ROM, and supporting utilities.

Terminal output showing USB drive partitioning with parted, FAT32 formatting with mkfs.vfat, syslinux installation, and extraction of Lenovo BIOS files into /mnt/usbdos/BIOSDOS/
Partitioning, formatting, installing syslinux and extracting the Lenovo BIOS package to the USB drive

Step 5, Download FreeDOS and Configure GRUB

A minimal DOS kernel is required to boot into. FreeDOS 1.3 provides a floppy-edition image suitable for this purpose. Download it from the Internet Archive FreeDOS 1.3 mirror:

$ wget "https://archive.org/download/freedos-1.3/FD13-FloppyEdition.zip" -O /tmp/freedos.zip
$ unzip /tmp/freedos.zip -d /tmp/freedos/

Copy the 1.44MB boot image to the USB, then copy the syslinux memdisk binary. Memdisk is what allows GRUB to load a floppy disk image directly from USB into memory and boot it:

# cp /tmp/freedos/144m/x86BOOT.img /mnt/usbdos/
# mkdir -p /mnt/usbdos/boot/grub
# cp /usr/lib/syslinux/memdisk /mnt/usbdos/boot/grub/

Create the GRUB configuration file:

# cat <<'EOF' > /mnt/usbdos/boot/grub/grub.cfg
set default=0
set timeout=5

menuentry "FreeDOS - Flash BIOS" {
    linux16 /boot/grub/memdisk
    initrd16 /x86BOOT.img
}
EOF

Step 6, Unmount the USB

# umount /mnt/usbdos

The USB is now ready to use.

Terminal tree output showing the complete bootable DOS USB structure with BIOSDOS folder containing Flash.BAT and IMAGEFB.ROM, boot/grub directory, and x86BOOT.img
tree -L2 showing the complete USB layout — GRUB bootloader, FreeDOS floppy image, and the extracted Lenovo BIOS package

Flashing the BIOS

With the USB prepared, move to the server and follow these steps:

  1. Insert the USB drive into the server.
  2. Power on and press F12 at the vendor splash screen to open the boot menu. The key varies by vendor, common alternatives are F11, Esc, or Del.
  3. Select the USB device from the boot menu.
  4. At the GRUB menu, select “FreeDOS – Flash BIOS” and press Enter. FreeDOS will boot from the floppy image loaded into memory by memdisk.

CRITICAL WARNING
FreeDOS will boot and prompt you with a Y/N question asking whether to install FreeDOS. Type N and press Enter. FreeDOS will then drop you to the A:\> prompt where you can proceed with the BIOS flash. Do not type Y, proceeding with a FreeDOS installation will overwrite your server’s existing OS and data.

  1. At the FreeDOS C:\> prompt, navigate to the BIOS directory and run the flash utility:
    C:
    cd BIOSDOS
    Flash.bat

    The flash utility will display progress and automatically reboot the server when complete.

CRITICAL WARNING
After the flash completes and the server reboots, it will likely enter the BIOS setup screen automatically. The keyboard may appear unresponsive at this point, this is normal behaviour after a BIOS update. Do not power off the server. Wait for the BIOS screen to fully load, then use the keyboard to navigate to the exit option and select “Save & Exit” or “Exit Without Saving” to allow the server to boot normally into the OS. Cutting power at this stage risks corrupting the newly flashed BIOS.

Lenovo BIOS Setup Utility screen showing BIOS flash in progress at 30% with keyboard locked warning and "DO NOT TURN THE POWER OFF" message
The Lenovo BIOS Setup Utility takes over during the flash — keyboard is locked and the system will shut down automatically when complete

SECURITY ALERT
Do not power off or restart the server while the flash is in progress. The process takes approximately 2 minutes. The server will reboot automatically once complete. Interrupting power mid-flash may require a BIOS recovery procedure.

Verifying the Update

Once the server is back up and running your OS, confirm the updated BIOS version with dmidecode:

# dmidecode -t bios | grep -E "Version|Release Date"

Our output after the successful update:

Version: FBKTC7AUS
Release Date: 06/24/2016

The following table summarises the before and after state on the ThinkServer TS140 used in this guide:

BIOS Version Before and After Update, Lenovo ThinkServer TS140
Before After
BIOS Version FBKT99AUS FBKTC7AUS
Release Date September 19, 2014 June 24, 2016
CPU Microcode M32306C3_00000016 M32306C3_0000001c
New CPU Support No Yes (Xeon E3-1281 v3)
Security Fixes No Yes

COMPLETED
BIOS update confirmed. The server is now ready for any hardware changes that required the updated firmware, such as a CPU swap.

Terminal output of dmidecode -t bios command confirming updated BIOS version FBKTC7AUS dated 06/24/2016
dmidecode -t bios confirming the successful BIOS update to version FBKTC7AUS dated June 24, 2016

Applicability to Other Hardware

The GRUB + memdisk + FreeDOS approach is vendor-independent. The only requirement is that your vendor provides a DOS-based flash package, which is true for the vast majority of server hardware currently in use:

Server Vendors with DOS-Based BIOS Flash Utilities
Vendor DOS Flash Utility Notes
Lenovo ThinkServer Yes Flash.bat included in zip package
Dell PowerEdge (older) Yes Also supports iDRAC-based updates on newer models
HP ProLiant (older) Yes SmartStart or standalone DOS .bin files
Supermicro Yes AMI-based, typically ami.bat or flash.bat
ASRock Rack Yes AMI-based, same approach applies

IMPORTANT
Once the USB is prepared, it can be reused for future BIOS updates by simply replacing the contents of the vendor BIOS folder. The GRUB and FreeDOS boot infrastructure stays the same.

Conclusion

Flashing server BIOS from Linux does not require a working vendor Linux utility. The GRUB + FreeDOS memdisk approach provides a clean, kernel-independent path that works across vendors and Linux distributions. Moreover, by running the vendor’s DOS utility in a real DOS environment rather than a Linux compatibility shim, you get exactly the behaviour the vendor tested and supports.

In the example covered here, the update took a Lenovo ThinkServer TS140 from a 2014 BIOS to a 2016 version, adding CPU microcode updates, security fixes, and explicit support for newer Xeon E3-1200 v3 processors. The total time from downloading the BIOS file to confirming the update in dmidecode was under 20 minutes.

Frequently Asked Questions

  1. Can I brick the server with a failed BIOS flash? On most modern server boards, including the Lenovo ThinkServer TS140, the bootblock, the minimal code needed to boot and initiate recovery, is write-protected in hardware. A failed or interrupted flash therefore does not permanently brick the board. Instead, the server enters a recovery mode from which you can re-flash using a recovery USB. Power loss during the roughly 2 minute flash window is the main risk to avoid.
  2. Why not use the vendor’s Linux flash utility instead? Many vendor Linux flash utilities rely on kernel modules that use deprecated APIs removed from the Linux kernel in recent years. Attempting to compile them on distributions shipping kernel 5.x or later typically fails. The DOS method is unaffected by kernel version and is exactly what the vendor’s QA process tested.
  3. Does this work on UEFI-based servers? The method described here targets legacy BIOS / CSM boot mode, which most servers still support alongside UEFI. If your server has disabled legacy boot entirely, you will need to re-enable CSM (Compatibility Support Module) in the UEFI settings before the USB will boot.
  4. Can I reuse the USB drive for other servers? Yes. The GRUB and FreeDOS infrastructure on the USB is generic. To flash a different server, simply replace the vendor BIOS folder contents with the new vendor’s package. The boot chain remains identical.
  5. How do I find which BIOS version is the latest for my server? Check the vendor’s official support or download page for your specific model. You can also probe direct download URLs programmatically using wget --spider to test candidate version strings, as demonstrated in this guide.

Sources



Comments and Discussions
Linux Forum