更新三星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 构建 树莓派软件定义存储集群 遇到了麻烦:
树莓派5 PCIe转M.2 NVMe SSD存储 我最初尝试利旧我的 三星PM9A1 NVMe存储 ,但是发现不能识别(使用了从 HPE ProLiant DL360 Gen9服务器 拆下的 三星PM9A1 NVMe存储 ,这一步骤埋下了问题;不得已又投资了3块 铠侠KIOXIA EXCERIA G2 NVMe SSD存储 ,现在想来都是泪), 树莓派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转USB3.2硬盘盒 准备利旧4个 三星PM9A1 NVMe存储 (3个原先用于 HPE ProLiant DL360 Gen9服务器 ,1个用于 升级MacBook(2013~2017) SSD成NVMe存储 ),我惊奇地发现只能识别出1个 三星PM9A1 NVMe存储 (不管怎么安装槽顺序)。不可能3个NVMe存储同时损坏,我尝试用U盘转接盒,才发现原来当初2021年10月购买的3块 三星PM9A1 NVMe存储 都无法用于U盘转接盒(不识别)
我的 升级MacBook(2013~2017) SSD成NVMe存储 能够使用NVMe SSD,我把原先用于 HPE ProLiant DL360 Gen9服务器 的 三星PM9A1 NVMe存储 替换到 升级MacBook(2013~2017) SSD成NVMe存储 中。正如所料,居然不能用于笔记本 -- 但是这3块 NVMe 是能够用于服务器 HPE ProLiant DL360 Gen9服务器
我突然想到当初在 树莓派Raspberry Pi 5 的 树莓派5 PCIe转M.2 NVMe SSD存储 验证使用 三星PM9A1 NVMe存储 失败,其实只测试了 HPE ProLiant DL360 Gen9服务器 服务器上的 三星PM9A1 NVMe存储 : 当时没有想到两批购买的NVMe存储还有区别。果然,我在 树莓派Raspberry Pi 5 上使用 升级MacBook(2013~2017) SSD成NVMe存储 验证过正常的 三星PM9A1 NVMe存储 ,就是能够正常使用的。
咨询了淘宝卖家,提到了NVMe的firmware升级,有道理!
使用 nvme-cli用户工具 检查:
sudo nvme list
看出了差异 -- 以下是正常的 三星PM9A1 NVMe存储 :
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存储 :
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下载,所以我是通过搜索对比发现以下两个方案可能性较高:
联想 Critical Firmware Update for Samsung drives - ThinkStation 这篇更新文档较为全面,不仅提供了Windows也提供了Linux更新方法。对比方法可以看到,实际上联想的Linux更新方法就是标准的Linux通过LVFS完成更新,考虑到淘宝上联想的OEM SSD很普遍,且更新方法是标准方式,所以我尝试用此方案
Samsung SSD PM9A1-00B00 Firmware Update 获得升级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 (元数据):
sudo fwupdmgr refresh
sudo fwupdmgr refresh --force
最后执行升级:
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镜像:
initrd
Linux imagebsdtar xf samsung_ssd_firmware.iso initrd
备注
按照archlinux wiki文档,这里使用了一个名为 bsdtar
的tar工具,在 Debian 系统中,这个工具是通过 libarchive-tools
提供的,安装 libarchive-tools
就能使用 bsdtar
。但debian手册中似乎没有区分 bsdtar
和 tar
。这个 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
来更新三星存储firmwaresudo 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存储没有成功
参考
How To Update Samsung SSD Firmware on Linux 提供了完整指南,本文升级方法参考此文档
Samsung SSD PM9A1-00B00 Firmware Update 提供了2023年3月1日的 7801 FW Version for PM9A1: 注意下载链接zip解压缩以后
GXA
开头bin文件是用于1T规格,GXB
开头bin文件是用于2T规格 (我理解是通过 nvme-cli用户工具 完成)三星存储官网firmware FAQ 指出 可以从 www.samsung.com/ssd 或 www.samsung.com/samsungssd 下载firmware更新,但是三星官方网站提供的是直接从三星购买的终端用户产品系列,例如 SSD-850 EVO / SSD-850 PRO等;而我购买的 三星PM9A1 NVMe存储 是OEM产品,需要从不同的厂商下载更新firmware
Dell Samsung PM9A1 固态硬盘固件更新 Dell的Samsung PM9A1,不过是Windows版本,发布日期是 2023年7月31日
联想 Samsung PM9A1 NVMe Solid State Drive Firmware Update Utility for Windows 10 (64-bit), Windows 11 (64-bit) - Desktops 也是Windows版本,发布日期是 2023年5月16日
联想 Critical Firmware Update for Samsung drives - ThinkStation 这篇更新文档较为全面,不仅提供了Windows也提供了Linux更新方法。对比方法可以看到,实际上联想的Linux更新方法就是标准的Linux通过LVFS完成更新,我理解联想其实就是采用三星官方方法