Crucial M550 SSD firmware update

or, How To Get From Here to There In Only 359 Easy Steps

I have had for a number of years some Crucial-branded SATA SSDs. Various models, various sizes, acquired at different times.

More recently, the motherboard in my main desktop machine died, and I built a replacement Ryzen 7 system. One — only one — of the SSDs is not detected by the B350-chipset motherboard. If anyone else has had SATA SSD compatibility issues with a new Ryzen system, I would be interested to hear about them.

In looking into the issue, I found there was a newer firmware MU02 for the Crucial SSD (it shipped with MU01). It isn't specifically documented to fix any issues which look related to my failure-to-detect problem, but it was worth a try. However, I had a lot of difficulty getting to the point where I could flash the newer firmware to the M550.

Crucial supplies Storage Executive, their management tool that includes the firmware updater, as a Windows application. For those of us without Windows machines, this presents a problem.

Luckily, they also provide it on a supposedly-bootable ISO-9660 image. I don't have any machines with an optical drive on which I can do the update, however.

So, dump it to a USB flash drive and boot from USB, right? Nope. This image would not boot on any machine I had access to. These machines for the most part can boot from other USB bootable media, so it's something specific to this particular image. Maybe it's some USB-ZIP/USB-HDD confusion or something; I couldn't get to the bottom of it.

Here's what worked for me. You should be able to do this from pretty much any Linux-based system. Download the "bootable" ISO-9660 image by going to Crucial's SSD firmware page, click on the appropriate model, and then rather than using the "download 64-bit" or "download 32-bit" buttons (which give you the Windows executable), use the "Manual boot file for Windows and Mac download firmware" button in the table below the warning message.

  1. Take a small USB flash drive. 1GB is fine. I used a 4G.
  2. Wipe the partitions info and other early boot data on it:
    dd if=/dev/zero of=/dev/sdX bs=4M count=1
  3. Partition it with parted or fdisk. Create an MS-DOS partition table containing one primary partition spanning the whole device. Mark it bootable.
  4. Format the new partition /dev/sdX1 with the ext2 file system. ext3/4 work too, but why use a journal on a flash device?
  5. Mount the filesystem you just created (assume /mnt/tmp). Create /boot and /images dirs in its base directory.
  6. Ensure you have grub installed, along with the appropriate boot files for the target architecture, which may not be installed by default. I'm using an EFI-based machine, but I wanted the USB flash drive to boot on an older BIOS-based one, so I had to install the grub-pc-bin package or grub would fail below.
  7. Install grub to the MBR of the flash drive:
    grub-install --verbose --target=i386-pc --boot-directory=/mnt/tmp/boot/ /dev/sdX
    Alter the --target argument to match the architecture of the machine you want to boot the image on.
  8. Copy the M550_SED_UPDATE_MU02_BOOTABLE.iso ISO-9660 image file to the /images/ dir on the flash drive.
  9. Create /boot/grub/grub.cfg on the flash drive, containing this:
    # Grub2 config file
    set default=0
    set timeout=15
    insmod ext2
    set root=(hd0,1)
    menuentry "Crucial Storage Executive ISO-9660" {
    set isofile="/images/M550_SED_UPDATE_MU02_BOOTABLE.iso"
    loopback loop (hd0,1)$isofile
    linux (loop)/boot/vmlinuz boot=boot iso-scan/filename=$isofile noprompt noeject toram
    initrd (loop)/boot/core.gz
  10. Unmount /mnt/tmp and eject the flash drive. Boot it in the computer you want to do the firmware upgrade. You'll get the standard grub boot menu, with one entry in it; hit enter or wait the default 15s to boot into this image.
  11. A Linux kernel image will be booted with an initrd. When the text on the console stops scrolling, it will look like the kernel hanged, but just hit enter, and you will be logged in as a user. I believe the image is Tiny Core Linux with the added Storage Executive files. The firmware is in /opt/firmware/, and the commandline executable is /sbin/msecli.
  12. Run `sudo /sbin/msecli -L` to see a listing of detected SSDs, and `sudo /sbin/msecli -?` for help/usage. The firmware update command is listed last. For the firmware directory argument, use /opt/firmware/, not any subdir of that directory.
  13. Enjoy the updated firmware. It takes 20 or 30s to complete.

I hope this saves someone else the time I spent banging my head on the table trying to figure out why Crucial's bootable image would not boot from USB.