更新三星PM9A1 NVMe存储firmware

问题排查

我最初在2021年10月购买了3个 三星PM9A1 NVMe存储 用于在 HPE ProLiant DL360 Gen9服务器 Ceph 部署 ,感觉还不错,所以2022年9月又购买了1个 三星PM9A1 NVMe存储 用于 升级MacBook(2013~2017) SSD成NVMe存储 ,也很顺利。但是,2024年11月,当我尝试在 树莓派Raspberry Pi 5 构建 树莓派软件定义存储集群 遇到了麻烦:

树莓派启动时激活 三星PM9A1 NVMe存储 失败
[    2.082561] nvme nvme0: pci function 0000:01:00.0
[    2.087300] nvme 0000:01:00.0: enabling device (0000 -> 0002)
[   62.778158] nvme nvme0: I/O 13 QID 0 timeout, disable controller
[   62.786204] nvme nvme0: Device not ready; aborting shutdown, CSTS=0x1
[   62.806249] nvme: probe of 0000:01:00.0 failed with error -4

咨询了淘宝卖家,提到了NVMe的firmware升级,有道理!

列出系统安装NVMe
sudo nvme list

看出了差异 -- 以下是正常的 三星PM9A1 NVMe存储 :

工作正常的 三星PM9A1 NVMe存储 ,注意firmware版本 GXA7601Q
Node           Generic      SN               Model                        Namespace Usage                     Format           FW Rev
-------------- ------------ ---------------- ---------------------------- --------- ------------------------- ---------------- --------
/dev/nvme1n1   /dev/ng1n1   S676NX0T714113   SAMSUNG MZVL21T0HCLR-00B00   1         298.02  GB /   1.02  TB   512   B +  0 B   GXA7601Q

而翻看一下不能用于U盘的异常 三星PM9A1 NVMe存储 :

不能用于U盘的异常 三星PM9A1 NVMe存储 ,注意firmware版本 GXA7401Q
Node          SN              Model                       Namespace Usage                  Format          FW Rev  
------------- --------------- --------------------------- --------- ---------------------- --------------- --------
/dev/nvme0n1  S676NF0R908202  SAMSUNG MZVL21T0HCLR-00B00  1         0.00   B /   1.02  TB  512   B +  0 B  GXA7401Q
/dev/nvme1n1  S676NF0R908214  SAMSUNG MZVL21T0HCLR-00B00  1         0.00   B /   1.02  TB  512   B +  0 B  GXA7401Q
/dev/nvme2n1  S676NF0R908144  SAMSUNG MZVL21T0HCLR-00B00  1         0.00   B /   1.02  TB  512   B +  0 B  GXA7401Q

所以基本可以推测出,至少需要升级 三星PM9A1 NVMe存储 的firmware到版本 GXA7601Q 才能解决问题

升级firmware

由于 三星PM9A1 NVMe存储 是OEM版本,三星官方没有直接提供firmware下载,所以我是通过搜索对比发现以下两个方案可能性较高:

Linux提供了一个名为 fwupdmgr 的客户端工具来管理firmware升级,可以自动、安全、可靠地完成firmware升级,也可以用于Samsung SSD。 fwupd 服务可以工作在Linux和BSD系统上,是 LVFS 的组成部分。

  • 检查 LVFS设备列表 看看需要更新的SSD是否提供,例如使用 PM9A1 搜索,可以看到Dell,HP,Lenovo都提供了firmware

  • 使用 fwupd 更新SSD firmware:

获取设备列表
sudo fwupdmgr get-devices
  • 执行以下命令从 LVFS 服务器下载和刷新 metadata (元数据):

从LVFS服务器下载刷新metadata
sudo fwupdmgr refresh
sudo fwupdmgr refresh --force
  • 最后执行升级:

执行firmware升级
sudo fwupdmgr update

更新firmware

在arch linux文档中有关于如何升级Samsung firmware的方法,见 archlinux wiki: Solid state drive >> Firmware >> Samsung

  • 三星官网下载bootable ISO image ,需要按照设备型号下载:

    • 根据 lspci -nnk -d 144d:a80a 输出可以看到 NVMe SSD Controller PM9A1/PM9A3/980PRO 也就是这3种NVMe存储控制器采用同一种,所以我选择下载 980PRO 的启动iso

  • 从ISO镜像中获取 initrd Linux镜像:

从ISO镜像中获取 initrd Linux image
bsdtar xf samsung_ssd_firmware.iso initrd

备注

按照archlinux wiki文档,这里使用了一个名为 bsdtar 的tar工具,在 Debian 系统中,这个工具是通过 libarchive-tools 提供的,安装 libarchive-tools 就能使用 bsdtar 。但debian手册中似乎没有区分 bsdtartar 。这个 bsdtar 是一个为了实现linux可移植的工具,可能是为了兼容旧版本tar。

  • 然后再从 initrd 中提取出 root/fumagician/ ,这个目录就包含了firmware更新文件:

initrd 镜像中再提取出 root/fumagician/ 目录(包含firmware更新文件)
bsdtar xf initrd root/fumagician

此时在 root/fumagician/ 有以下4个文件:

5B2QGXA7.enc  DSRD.enc  fumagician  fumagician.sh
  • 运行 fumagician 来更新firmware

运行 fumagician 来更新三星存储firmware
sudo root/fumagician/fumagician

显示提示:

运行 fumagician 提示更新 Samsung SSD Firmware
##############################################################################
#                                                                            #
#                                                                            #
#                                  Welcome!                                  #
#                                                                            #
#                                                                            #
#                Samsung SSD Firmware Update Utility Ver. 3.1                #
#                                                                            #
#                                                                            #
#                                                                            #
#                                                                            #
#                   Samsung Electronics Co., Ltd. (c) 2022                   #
#                                                                            #
#                                                                            #
##############################################################################

  WARNING

  DEVICE MUST BE PLUGGED IN AT ALL TIMES DURING THE FIRMWARE UPDATE PROCESS
  OR ELSE DRIVE MAY BE PERMANENTLY DAMAGED AND RENDERED INOPERABLE.

Press any key to continue...

##############################################################################
#                            Samsung Electronics                             #
#                Samsung SSD Firmware Update Utility Ver. 3.1                #
#                   Samsung Electronics Co., Ltd. (c) 2022                   #
##############################################################################

SCANNING -> -> -> -> -> -> -> -> -> ->

 ______________________________DISK(s) DETECTED______________________________ 
|#|               Drive Model               |    Serial Number    | Firmware |
|-|-----------------------------------------|---------------------|----------|
| |            No supported SSD detected for Firmware Update!!!   |          |
|_|_________________________________________|_____________________|__________|

Press any key to EXIT...

很不幸,我没有更新成功,看起来扫描NVMe存储没有成功

参考