Firmware Upgrade Utility for Linux

Hi,

I use only Linux, and I’m planning to buy a WD SSD. I’d like to know if there is a utility I can use to upgrade my SSD firmware without depending on Windows only software.

1 Like

Hi,

As far as I know the WD SSD Dashboard is the only software that can help you to upgrade the firmware. I would recommend that you connect the drive to a Windows computer in order to update the firmware.

The nvme utility in the nvme-cli package (Ubuntu/Mint/Debian etc) has the ability to show installed versions and update with new firmware (list, fw-download, fw-activate sub-commands) but I can’t find anywhere to download the actual firmware files.

I suspect I’m going to have to install Windows and configure dual-boot, just to find out that I already have the latest (B35900WD)…

Have there been any updates on this? I have a filesystem consisting of 8 WDS400T1R0A-68A4W0 SSDs with firmware version 411000WR. Now one of them failed and I got a replacement. But it has version 411010WR. And that gives me an OCD (or even CDO) feeling that I should upgrade the 7 other devices to the l8test and gr8test version.

Surprisingly, there seems to be (still!) no firmware update tool available for the most frequently used OS on the planet (i.e. Linux). How is that even possible? All I could find and try was this old package / utility, but it fails to detect the SATA SSDs, because (IIUC) it is an outdated tool from ~2013 that only updates very old rotating disks (also called “RED” back then).

Then how can one perform a firmware upgrade? Are there any known working firmware flashing flags for (e.g.) hdparm --fwdownload? (And where does one download the firmware file?) (Side note: These are SATA SSDs, not NVMEs, so the nvme command doesn’t really apply to my case.)

To save other people’s time, here are my answers to a few somewhat common and obvious FAQs:

  • No, I do not have a Windows computer.
  • No, I will not have (access to) a Windows computer.
  • No, I will not connect devices with my data to a Windows computer.
1 Like

anddrejpodzimek
I totally agree with your statement on Windows, once I was introduced to Linux Ubuntu debian I’ve never went back to Windows. If you have the time to learn which I’ve had to do to save myself a lot of headaches the Linux is the best, a lot of people don’t have patience to learn Linux but I have learned so much without costing me mega bucks
radc5335

I found recently that somebody on the frame.work forum has gone to great lengths to figure out how to do this on Linux without needing Windows for any step of the process.

Interesting. That makes me wonder if the .fluf files are actually raw firmware images flashable directly using the nvme tool in a running system. (If that was the case, the entire EmbeddedLinux.zip and EFI app boot steps wouldn’t be needed.) But more likely the .fluf doesn’t have a format for direct flashing, it may be a container with extra metadata / checksums or whatnot.

Anyhow, this is (unfortunately) irrelevant for my case, because

  1. my WD SSDs are SATA SSDs, not NVMe, so hdparm --fwdownload seems to be the only way to flash a firmware image (custom tools aside) and
  2. on the XML list there is no WDS400T1R0A-68A4W0 (or anything with a WDS40 prefix), so I’m assuming that firmware updates for these SATA SSDs are obtained somewhere else. Tried my luck with the download link fabrication described there (with my device type and desired firmware version filled in): https://wddashboarddownloads.wdc.com/wdDashboard/firmware/WDC_WDS400T1R0A-68A4W0/411010WR/device_properties.xml. But nope, that just gives me a NoSuchKey error.

Even if a .fluf file for my devices was available, I’m still not sure how that could work in my case, because my SATA SSDs are on an Adaptec SAS/SATA actuator (kernel module: smartpqi), which is in an external PCIe enclosure connected to the machine’s Thunderbolt port. I can’t imagine how a bootable EFI-based tool would penetrate through all of these layers without a fully fledged kernel’s driver machinery.[0] Perhaps if I connected the SSDs via a USB<—>SATA bridge, one by one, the tool might be able to reach them, but I’m not sure about that either. And I would need to find that firmware image first…

But the fact that WD provides something Windows-independent is a positive piece of news for sure.

[0] Or maybe that’s what the EmbeddedLinux in the tool’s name stands for? Could it have the usual all-M build of modules bundled with it? But then why embed it this way, why not make the tool(s) work on a “real” Linux system?

I successfully upgraded a SN570 using the standard NVMe firmware update protocol.
On systems with nvme-cli (I ran this on Linux 6.1) you can run this:

nvme fw-download -f 1234WD.fluf /dev/nvmeX
nvme fw-commit -s 2 -a 3 /dev/nvmeX

At least for the SN570 this can be done online, i.e. while the disk is in operation. If that’s not possible (check with nvme id-ctrl -H /dev/nvmeX | grep 'Firmware Activate Without Reset Supported') change to -a 2 and reset the NVMe or reboot.

Please make sure that you only try to flash the correct firmware, the disk should verify it according to the NVMe spec, but I warned you.

It is really interesting. I have a real problem with my SSD.

Some specs of the SSD:

Model Family:     WD Blue / Red / Green SSDs
Device Model:     WDC  WDS250G2B0A-00SM50
Firmware Version: 401020WD

I have following error periodically in my system (6.1.0-0.deb11.7-amd64). This error happens abruptly after 1-2 days uninterrupted work of my PC (I wake up in the morning and see it in dmesg):

[356853.523135] systemd-journald[382]: Failed to write entry (23 items, 756 bytes), ignoring: Read-only file system
[356858.746966] systemd-journald[382]: Failed to write entry (23 items, 757 bytes), ignoring: Read-only file system
[356878.526954] systemd-journald[382]: Failed to write entry (23 items, 757 bytes), ignoring: Read-only file system
[356892.553716] systemd-journald[382]: Failed to write entry (23 items, 757 bytes), ignoring: Read-only file system
[356912.931846] systemd-journald[382]: Failed to write entry (23 items, 756 bytes), ignoring: Read-only file system
[356913.931492] systemd-journald[382]: Failed to write entry (23 items, 719 bytes), ignoring: Read-only file system
[356913.931537] systemd-journald[382]: Failed to write entry (23 items, 748 bytes), ignoring: Read-only file system
[356913.934932] systemd-journald[382]: Failed to write entry (16 items, 411 bytes), ignoring: Read-only file system
[357094.422887] systemd-journald[382]: Failed to write entry (17 items, 386 bytes), ignoring: Read-only file system
[357231.782196] systemd-journald[382]: Failed to write entry (24 items, 742 bytes), ignoring: Read-only file system
[357231.782235] systemd-journald[382]: Failed to write entry (21 items, 617 bytes), ignoring: Read-only file system
[357231.782776] systemd-journald[382]: Failed to write entry (24 items, 734 bytes), ignoring: Read-only file system
[357231.782796] systemd-journald[382]: Failed to write entry (24 items, 764 bytes), ignoring: Read-only file system

I think it is no SSD corruption, but software lack. And… may be it is not, but I want try to upgrade the firmware of the SSD. It would be nice to learn more about how this can be done, outside of the general guidance (like *sudden* editing of syslinux.cfg).

I’d recommend finding a brand that supports applying firmware updates with Linux. I have the same issue with MacOS. I went to the library to use their Windows PC to upgrade my Sandisk but it couldn’t recognize the device so I had to return it to have WD send me an updated one under warranty. Still waiting… so decided to buy a different brand that supports firmware updates from a MacOS device.

Hi, just to share:

I have just successfully updated firmware for WD_BLACK SN850X 2000GB from 620311WD to 620331WD using nvme-cli=2.3-2 (on Ununbu 22.04).

  1. To download new firmware file use this manual.
  2. To upload the firmware:
> sudo nvme fw-download -f 620331WD.fluf /dev/nvme0
Firmware download success
  1. To switch on new firmware:
> sudo nvme fw-commit -s 2 -a 3 /dev/nvme0
Success committing firmware action:3 slot:2
Multiple Update Detected (MUD) Value: 1568322
Detected an overlapping firmware/boot partition image update command sequence due to processing a command from an Admin SQ on a controller
  1. rebooted, but should not be necessary due to action=3. The current status:
> sudo nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x2
frs1 : 0x4457313133303236 (620311WD)
frs2 : 0x4457313333303236 (620331WD)

Good luck! P.S. JFYI only, no warranty!!! :smiley:

Exactly the post I was looking for. I followed these instructions and have successfully updated to 620361WD. Host was running Proxmox VE 8.1.3.