16

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)

Nicolas Raoul
  • 11,603
  • 1
    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 – leorize Jul 22 '15 at 10:34
  • @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. – David Foerster Aug 01 '15 at 15:09
  • 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. – Matthias Dec 19 '16 at 11:43

3 Answers3

21

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.)

  • 1
    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 – leorize Jul 22 '15 at 10:46
  • That worked! Not sure what eltorito is but it solved the problem. – Nicolas Raoul Jul 23 '15 at 02:28
  • 4
    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 Jul 23 '15 at 07:18
  • 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?? – shaneonabike Jan 31 '16 at 01:13
  • check this link as well: https://ubuntuforums.org/showthread.php?t=1852425 and http://www.thinkwiki.org/wiki/BIOS_Upgrade#Using_grub4dos_.28also_for_Linux.29 – TiloBunt May 16 '17 at 05:03
  • geteltorito outputs Out of memory! for me when executing the command. Any ideas? – fIwJlxSzApHEZIl Aug 16 '20 at 23:22
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
kos
  • 35,891
  • 2
    You must add && sync to dd – xyz Jul 22 '15 at 10:53
  • @prakharsingh95 Fine remark. Thanks – kos Jul 22 '15 at 10:58
  • 2
    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. – Thomas Schmitt Jul 23 '15 at 07:27
2

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".

algo99
  • 21
  • 1
    Lenovo mentions this in their README on the BIOS download page, but it is good to remind folks. –  Jun 27 '17 at 02:33