I tried upgrading the firmware of my old iOmega 1 TB HDD. Internally it’s a Barracuda LP family, ST31000520AS model Segate HDD. Seagate had released a firmware upgrade for this drive in 2010. I’m around 9 years late to the party!

My laptop doesn’t have a CD-ROM drive, also I prefer burning the ISO to a USB stick — why waste a CD, eh? Rufus kindly refused as the supplied Seagate update ISO’s boot format was unrecognizable. In the process, I’d tried using another tool – RMPrepUsb – in vain. It’d done something, owing to some option I chose of course, to overwrite GRUB2 with Windows boot loader — some BCDedit command I guess. My meddling with BIOS didn’t help either as GRUB wasn’t even listed in EFI order, so I reverted to orignial settings1:

SettingValue
Boot ModeUEFI
USB BootEnabled
EFI orderGRUB, Windows Boot Manager, EFI PXE Network
Secure BootDisabled
Fast BootEnabled

Thanks to Debian’s GrubEFIReinstall guide; it made me recall that the Boot Mode should be UEFI; it also gave the way to verify it. I’d to use a UEFI-bootable2 USB stick with Arch Linux ISO. Things were smooth thereon!

root@archiso / # [ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD"
EFI boot on HDD
root@archiso / # mount /dev/lvmg1/root /mnt
root@archiso / # mount /dev/nvme0n1p5 /mnt/boot
root@archiso / # mount /dev/lvmg1/home /mnt/home
root@archiso / # mount /dev/sda5 /mnt/var
root@archiso / # swapon /dev/sda6
root@archiso / # arch-chroot /mnt

Once chrooted3, I’d to reinstall GRUB to fix the issue!

> mount /dev/nvme0n1p1 /boot/efi
> grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

All is well now 😀

GRUB missing in UEFI’s NVRAM

On an ArchLinux box (host) with UEFI + GPT setup, I’d to install Ubuntu on an external SSD, for a machine having legacy BIOS (target). I booted host in Legacy Boot mode and installed Ubuntu by marking the first primary partition on the SSD bootable; everything went well. Rebooting showed GRUB on the SSD with both Ubuntu and ArchLinnux. Since target machine won’t have Arch, I’d to turn off os-prober and regenerate GRUB configuration file 4:

# cat >> /etc/default/grub
GRUB_DISABLE_OS_PROBER=true

# update-grub

However, after switching back to UEFI Boot, I only saw Windows Boot Manager and EFI PXE Network options; GRUB was missing! Mounting the EFI System Partition (ESP) showed GRUB under /EFI/GRUB/grubx64.efi, so it’s just the NVRAM GRUB was removed from. Reinstalling GRUB by booting from an Arch Linux ISO is an option, but I didn’t want to lose my GRUB customizations like wallpaper, etc. Thanks to a good Unix.SE answer helped me put GRUB back in NVRAM

# -c creates an entry with -l taking path in ESP at /dev/nvme0n1p1
efibootmgr -c -d /dev/nvme0n1 -p 1 -l \\EFI\\GRUB\\grubx64.efi -L GRUB

See Also


HDD Upgrade Story

Those still reading to know about the poor ’ol HDD’s fate, read on! It ends well :)

I created a plain Free DOS bootable USB with Rufus; extracted the IMA floppy image to root; this worked since the update ISO was also using Free DOS. The tool, booted with Free DOS, still couldn’t do the deed! It couldn’t detect the drive that was connected via USB; I realised that it expects BIOS to be set to ATA; neither AHCI nor RAID – the only options mine has.

Luckily my 2006 desktop (AMD Phenom X4 machine) had the SATA option (in addition to the other two)! I didn’t even have to resort to a force firmware write, the tool did it straight-forward. I didn’t connect it via USB though; I opened the iOmega case, connected the internal HDD directly to the motherboard’s SATA power and data connectors.

Before firmware upgrade smartctl warned about an older firmware.

> smartctl -i /dev/sdb
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-4.20.3-arch1-1-ARCH] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda LP
Device Model:     ST31000520AS
Serial Number:    XXXXXXXX
LU WWN Device Id: X XXXXXX XXXXXXXXX
Firmware Version: CC32
User Capacity:    1,000,204,886,016 bytes [1.00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    5900 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Mon Jan 21 09:08:22 2019 IST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

==> WARNING: A firmware update for this drive may be available,
see the following Seagate web pages:
http://knowledge.seagate.com/articles/en_US/FAQ/207931en
http://knowledge.seagate.com/articles/en_US/FAQ/213915en

After the upgrade, the warning vanished and Firmware Version reads CC35 😇


  1. GRUB is present in EFI Order since this was made after the recovery. ↩︎

  2. This is rather important; a legacy boot USB stick wouldn’t be bootable when Boot Mode is UEFI. ↩︎

  3. This is important too; without chrooting file paths would be off. ↩︎

  4. Modern machines have grub-mkconfig instead of update-grub ↩︎