4

Goal is updating a NVMe SSD firmware on a Mac without optical drive via USB stick that should contain a minimal Linux, flasher and payload.

The instructions (PDF) for a firmware update utility say to use Unetbootin on MacOS to write an iso-file to a FAT32 formatted (erased) USB stick.

That works. No errors shown.

What then doesn't work is booting a MacBook Pro 2015 from that stick.

The external USB-drive never shows up in the boot menu.


What I tried:

  • erasing the sticks a few times with DiskUtility
  • partitioning the sticks to either MBR or GPT
  • 3 different sticks
  • different laptops (Mac & Windows)
  • writing the iso file with dd directly to the stick (and in another round using Balena etcher and universal usb installer)
  • different versions of DiskUtility (Sierra and Mojave)
  • Windows on-board tools on a PC for re-formatting the sticks
  • gparted and fdisk mkfs.vfat on a Linux machine
  • using a different iso (not matching the target device) from the vendor site (works without any issues according to instructions, but can't update my device…)
  • writing to customer support (answer: "iso looks good, should work, please try again")
  • booting a fresh virtual machine on a Mac host with just the needed iso attached. Frustratingly, that indeed boots as intended, but can't update the device either. Neither a Windows PC, nor a Linux laptop can boot the sticks I prepared.
  • searching net and especially Ask Different for solutions

The sticks just aren't recognised on any Mac laptop as 'bootable' once the procedure outlined in the manual is finished. All Laptops can boot from external drives (Thunderbolt & USB) and the boot manager updates without interaction once I plug those in.

Possible reasons : - assuming that DiskUtility from 10.12 and 10.14 can't properly format the sticks? - is latest version of Unetbootin acting up? - is the iso for my device incomplete/damaged?

The last item here may be the culprit:

The firmware iso for a Samsung 970 EVO is just so much smaller than for a EVOplus:

  • NVMe SSD-970 EVO Plus Firmware ISO 2B2QEXM7 | 28 MB (works, unneeded)
  • NVMe SSD-970 EVO Firmware ISO 2B2QEXE7 | 17.4 MB (doesn't work, needed)

The EVO-iso is mountable directly in macOS and just contains

 bzImage  initrd  isolinux >
                  boot.cat  isolinux.bin  isolinux.cfg  ldlinux.c32

The EVO-plus-iso is not mountable but when written to stick with Unetbootin it shows an EFI folder and GRUB files, etc… Since this one does boot and scans the computer for eligible devices, I am a bit stuck here.


None of these similar questions on AskDifferent offered a working solution:

Copy Crucial SSD Firmware Update ISO to Bootable USB

Is it possible to make a bootable USB stick for a Macbook Pro to do firmware update?

How to install a bootable ISO onto a single partition of a usb stick?

How to create USB Ubuntu boot disk in OS X so that it boots on *non-Apple* computer?

How to make and use an USB stick with GParted that will boot on a Mac?

How to create a Mac bootable gparted or Parted Magic thumb drive?


Since playing with around with DiskUtilities options it seems to be the case that it is a bit buggy. Switching around between various partitions and filetypes related to FAT/FAT32 results in DiskUtility not recognising its own products, with different options greyed out at different times. Looks to me as if some flag or structural anomaly that DiskUtility introduces keeps this from working, like I might have to really wipe down the stick. Alas, neither wipefs nor gparted did that successfully and I do not know what to look for here.

2
  • 3
    Wish you luck on this one :) - I've always ended up just wiping the whole drive & doing it on a Win machine [where it's remarkably simple]
    – Tetsujin
    Apr 6, 2020 at 17:41
  • I would ask Samsung to provide a Mac-friendly method.
    – benwiggy
    Sep 24, 2020 at 6:56

2 Answers 2

1

First find USB key disk number from diskutil list. This method will destroy everything on the disk you copy to so take care. Mine was /dev/disk3 and looked like this:

/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *32.0 GB    disk3
   1:                        EFI EFI                     209.7 MB   disk3s1
   2:       Microsoft Basic Data FAT32                   31.8 GB    disk3s2

Make sure no volumes are mounted, then use dd to copy the unmounted ISO file to your device (do not append a partition number, so do not use something like /dev/disk3s2).

This worked for me with the NVMe SSD-970 EVO Firmware ISO 2B2QEXE7 from here.

[hali@macOS] ~ $sudo dd bs=4m if=/Users/hali/Downloads/Samsung_SSD_970_EVO_2B2QEXE7.iso of=/dev/disk3
Password:
4+1 records in
4+1 records out
17825792 bytes transferred in 8.546376 secs (2085772 bytes/sec)
[hali@macOS] ~ $sync
[hali@macOS] ~ $

diskutil list now looks like this:

/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            Samsung                *32.0 GB    disk3

and in Disk Utility like this:

Disk Utility

Reboot holding and pick the yellow boot option on USB key called "Windows". It should load the firmware utility fine (it did for me on 2015 MBP).


Afterwards, as mentioned in Arch Wiki the ISO signature needs deleting.

Warning: This will irrevocably destroy all data on /dev/sdx. To restore the USB drive as an empty, usable storage device after using the Arch ISO image, the ISO 9660 filesystem signature needs to be removed by running wipefs --all /dev/sdx as root, before repartitioning and reformatting the USB drive.

As wipefs doesn't exist in macOS, this can be achieved by using gdisk to write a new gpt partition table. Simply reformatting in Disk Utility didn't work to recover use of the USB resulting in lots of "Operation not permitted" errors.

4
  • As I wrote, dddidn't work either. Data gets written to the correct device, but BM doesn't pick it up. What was on that stick before? Prepared for/from Windows? Was it MBR or GPT? Apr 6, 2020 at 19:09
  • It was GPT before (formatted on mac) but now it is neither. Writing to device /dev/disk3 rather than partition /dev/disk3sX overwrites the partition table and macOS sees it as a ISO. I'll add a picture to make it clearer...
    – lx07
    Apr 6, 2020 at 19:12
  • On my stick it was called Samsung (like in your screenshots?). But apart from that, everything looks exactly like you describe, as visible from macOS) only that the boot-manager still fails to detect it. Tried it with GNU dd & BSD dd with disk & rdisk, (and even previously with wipefs on Linux). Apr 6, 2020 at 21:03
  • Odd as we have same age mbp and it worked for me. Only difference is that I've installed Catalina... Perhaps try rEFInd bootloader and see if it will see it as it has ISO driver?
    – lx07
    Apr 6, 2020 at 21:33
0

Disclaimer: There is a risk of losing your SSD and the data stored on it when updating to a new firmware!

Here are the steps:

  1. Identify your SSD model by running sudo smartctl -a /dev/nvmxxx on your SSD (replace "xxx" by your actual device name); here is an example output.
  2. Prepare a bootable Ubuntu/Kubuntu USB stick, either from Ubuntu or from Windows.
  3. Start your computer from the said USB stick.
  4. Open a browser and search "Samsung SSD firmware" from any search engine; the first result should be the SSD tools and software download page from Samsung.
  5. Scroll down until "Firmware", expand the section, find the ISO image matching your SSD model and download it.
  6. Open the ISO image with an archive tool like File Roller or Ark (whatever comes preinstalled with your USB stick) and look for the file name initrd and extract it (drag and drop it outside of the archive and into your file manager window).
  7. Open again the file initrd with an archive tool (you need to double click twice) and look for the folder root/fumagician; again extract it (drag and drop it outside of the archive).
  8. Open a console (F4 in some file managers), go inside the folder fumagician you just extracted and run sudo ./fumagician.
  9. Proceed through the steps of the SSD Magician tool; in my case the reprogrammimg was instant and there was no success or failure confirmation at the end. If the SSD Magician finds no devices then maybe you forgot to use sudo.
  10. Restart without mounting or otherwise touching the content of the SSD you just updated.
  11. After restart sudo smartctl -a /dev/nvmxxx should display the updated firmware version. In my case the updated firmware version would not show until the restart.

Remark 1: It seems possible to update from an OS running on the target SSD and I saw YouTube videos showing the SSD Magician tool on Windows doing such hot updates, i.e. on a SSD being used. But I am not entirely sure whether this is safe. The issue is that the OS will write to the SSD after the update procedure but before the restart. There is a risk that the SSD does not handle correctly those writes, hence losing data.

Remark 2: If UNetbootin is used to create a bootable USB stick from the ISO then the USB stick needs to be formatted with MBR and FAT32; GPT and/or ext4 did not work for me. There is a bug in the ISO image provided by Samsung with AMD based systems. USB and more specifically USB keyboards and mice will not work; since most modern mainboards do not have PS/2 ports anymore navigating through the SSD Magician prompts is virtually impossible on AMD based systems (source).

2
  • Doesn't this require a Linux system to start with (step 1)?
    – nohillside
    Feb 8 at 9:16
  • Linux is not required, smartmontools is available on Mac. See macappstore.org/smartmontools. I don't have a Mac so I cannot test it myself. And alternatively you can guess the SSD model name from the packaging or the invoice. Feb 9 at 10:41

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .