How to upgrade BIOS on a Lenovo laptop running linux

Usually, Lenovo releases BIOS updates in two formats: a single .EXE file, that needs to be executed on a Windows OS, and a .ISO file that needs to be burned on a CD.

But, how can i perform the upgrade if my laptop doesn’t have the CD reader and my OS is Linux?

My solution is burn the ISO file on a bootable USB stick.
How? Very simple, the keyword is El Torito!

What is El Torito?

The El Torito Bootable CD Specification is an extension to the ISO 9660 CD-ROM specification, introduced in the 90’s and designed to allow a computer to boot from a CD-ROM.
This specification is used till today for bootable ISO images.

In order to convert a ISO file into an image suitable to make a bootable USB stick, we need to extract from the ISO the ElTorito virtual disk section, that contains the bootable image:

~$ isoinfo -i g6uj32us.iso -d
 CD-ROM is in ISO 9660 format
 System id:
 Volume id: G6ETC5WW
 Volume set id:
 Publisher id:
 Data preparer id:
 Application id: NERO BURNING ROM
 Copyright File id:
 Abstract File id:
 Bibliographic File id:
 Volume set size is: 1
 Volume set sequence number is: 1
 Logical block size is: 2048
 Volume size is: 16566
 El Torito VD version 1 found, boot catalog is in sector 20
 Joliet with UCS level 3 found
 NO Rock Ridge present
 Eltorito validation header:
     Hid 1
     Arch 0 (x86)
     ID 'NERO BURNING ROM'
     Key 55 AA
     Eltorito defaultboot header:
         Bootid 88 (bootable)
         Boot media 4 (Hard Disk Emulation)
         Load segment 7C0
         Sys type 6
         Nsect 1
         Bootoff 1B 27

Few simple steps…

  • First, find on Lenovo support website the correct iso download (in this example I’m using an X1 Carbon 1st Gen):
  • Download the ISO file:
$ wget https://download.lenovo.com/pccbbs/mobiles/g6uj32us.iso
  • (Optional) If not already present on your system, install the correct ISO tools.
    For example, on my Debian 10:
$ sudo apt install genisoimage
  • Extract the image using geteltorito utility:
$ geteltorito -o lenovo.img g6uj32us.iso
  • Finally, write the image on a USB stick:
$ sudo dd if=lenovo.img of=/dev/sdb bs=64K status=progress

Now, simply restart the laptop, boot from USB and start the upgrade process.

That’s all, folks!

Related posts

  1. Full Disk Encryption: tools and setup suggestion for personal data protection
  2. The “distroless” approach to Docker containers
  3. How to create a VirtualBox VM from command line
  4. How to record screen on Linux from command line
  5. i3 window manager on laptops: my configuration