Write bootable BIOS update .ISO to USB stick

18,680

Solution 1

I found what may be a solution to the issue at http://positon.org/lenovo-thinkpad-bios-update-with-linux-and-usb.

First convert the iso image to an img file:

sudo apt-get install genisoimage
geteltorito -o bios.img gruj09us.iso

Then copy to the USB key:

sudo fdisk -l /dev/sdb  # double check that the device is right
sudo dd if=bios.img of=/dev/sdb #Will Erase the drive!! 

That said I think you should just try first whether it boots okay if you just write the .iso with a generic tool as you normally would. (Provided it needs some input and does not automatically start mucking about in your BIOS as you boot up.) Last two times I installed a Linux I didn't use the recommended tool. (I made a bootable USB for 15.04 with SUSE Studio Image Writer since Unetbootin messed it straight up multiple times.It worked fine.)

Solution 2

As Arch user said in the comments, the most straightforward way to write a bootable ISO to an USB drive is to dd the image to the drive.

First triple-check to which block device your USB drive is currently mapped to:

lsblk

Than dd the image to the USB drive. For example if your USB drive happens to be mapped to /dev/sdb:

sudo dd if=/path/to/image of=/dev/sdb bs=8M && sync

Different block sizes usually peform differently, however usually a bigger block size performs better than a smaller block size; a block size of 8M should be enough to let the process run at full speed.

If you want to monitor the progress of the process, install pv:

sudo apt-get update && sudo apt-get install pv

And run this command instead:

pv /path/to/image | sudo dd of=/dev/sdb bs=8M && sync

Solution 3

Just in case someone is still looking for the answer.

The solution above alone was not enough for my Lenovo E470 which is UEFI-capable. The BIOS update utility just does not start from USB stick.

One has to read the README file corresponding to BIOS update file.

On reboot press Enter to interrupt normal startup and after entering the BIOS Setup:

...
-> 7. In "UEFI/Legacy Boot", make sure "UEFI only" is chosen.
   8. Choose "Boot" from the menu. Note the current boot priority order for
      restoration later if you need to modify your boot list.
   9. In "Boot Priority Order", make sure the following device is on top of
      "ATA HDD0".
      - "ATAPI CD0" (when using a ThinkPad internal optical drive)
      - "USB CD"    (when using a USB optical drive)
->    - "USB HDD"   (for my USB stick)

After restart you should be able to boot from you "USB HDD".

Share:
18,680

Related videos on Youtube

Nicolas Raoul
Author by

Nicolas Raoul

I am Nicolas Raoul, IT consultant in Tokyo. Feel free to copy/paste the source code from my StackExchange answers, I release it to the public domain.

Updated on September 18, 2022

Comments

  • Nicolas Raoul
    Nicolas Raoul almost 2 years

    Lenovo distributes BIOS updates as .iso files (example) that are supposed to be burnt on a CD and booted. Burning it to a CD worked and booted correctly, but now I want to use a USB stick instead (because I don't trust my CD drive), how to create this USB stick using Ubuntu?

    There are many tutorials explaining how to create bootable USB sticks from Linux-based ISOs (using UNetbootin and similar, they create Linux-related files at the root of the USB stick) and from Windows-based utilities (with FreeDOS and similar). I believe neither are solutions here as the BIOS update ISO file is not Linux-based nor DOS-based (mounting the ISO does not show any known filesystem)

    • Admin
      Admin almost 9 years
      Have you tried to dump the ISO content to an USB? To do so, run the following command: # dd if=/path/to/iso of=/dev/yourusb bs=4M. WARNING: Your USB will be ERASED. Also please double check the path to your USB block drive
    • Admin
      Admin almost 9 years
      @Archuser: This only works, if the ISO images was made to be able to boot in that particular configuration. Regular bootable ISO images cannot be booted like that.
    • Admin
      Admin over 7 years
      Make sure you call "sudo sync" twice after the dd command. otherwise the kernel might not sync back the written data from the kernel cache to the drive.
  • leorize
    leorize almost 9 years
    After you have updated your BIOS, restore the USB to full capacity with: # dd count=1 bs=512 if=/dev/zero of=/dev/sdb and format the USB after that
  • xyz
    xyz almost 9 years
    You must add && sync to dd
  • kos
    kos almost 9 years
    @prakharsingh95 Fine remark. Thanks
  • Nicolas Raoul
    Nicolas Raoul almost 9 years
    That worked! Not sure what eltorito is but it solved the problem.
  • Thomas Schmitt
    Thomas Schmitt almost 9 years
    For the records: The ISO consists of an empty root directory and a hidden BIOS boot image which is an emulated hard disk. geteltorito finds the disk image by reading the El Torito boot catalog. Then it learns the image size from the MBR partition table in the image. Finally it extracts the image to target file. This boots from USB stick only because all needed software is in the emulated hard disk. A very peculiar situation.
  • Thomas Schmitt
    Thomas Schmitt almost 9 years
    Flatly copied ISO on USB stick only boots via BIOS if the ISO begins by an MBR. This is an extra feature commonly called "isohybrid". All major Linux distros have their installation ISOs equipped this way. But the Lenovo ISO has no MBR, only an El Torito boot catalog for booting via BIOS from CD/DVD/BD. Nevertheless it has all needed stuff in the hidden boot image beginning at ISO block 27, which emulates a hard disk.
  • shaneonabike
    shaneonabike over 8 years
    I tried this but was not able to get it to boot for Lenovo T510. I definitely snagged the bootable BIOS but when it burnt out to the USB there was nothing there (is that normal?). When I tried to boot the error message was that there was no OS? Any ideas??
  • TiloBunt
    TiloBunt about 7 years
  • Admin
    Admin about 7 years
    Lenovo mentions this in their README on the BIOS download page, but it is good to remind folks.
  • fIwJlxSzApHEZIl
    fIwJlxSzApHEZIl almost 4 years
    geteltorito outputs Out of memory! for me when executing the command. Any ideas?