三星 PM9A1 固态硬盘固件翻车拯救记

一次「专业人士都说没救了」的 NVMe SSD 起死回生实录

前情提要:一个悲伤的故事

事情是这样的。

某天,我决定给我的 1TB 三星 PM9A1 升级一下固件,毕竟官方说新固件修复了0E问题,防止固态报废。

然后我就手贱选错了固件包。

1TB 的盘,刷了 2TB 的固件。

结果可想而知——硬盘当场去世,BIOS 里都看不到了。整个人直接傻掉。

于是我找到了「专业数据恢复人士」,对方研究了半天,给出了专业意见:

"这盘没救了,只能搬颗粒。"

搬颗粒的意思就是把 NAND 闪存芯片从原来的 PCB 上拆下来,焊接到 SATA 转接板上,然后用开卡工具重新初始化成一块 SATA 盘来读取数据。这操作不仅丢失所有数据,而且相当于彻底放弃原来的 NVMe 主控,属于「破釜沉舟」级别的掉价方案。

但是!作为一个不到黄河心不死的技术人员,我决定死马当活马医,试试能不能通过硬件方式让这块砖头复活。


关键突破:进入工厂 ROM 模式

经过一番研究(疯狂 Google + 翻各种数据恢复论坛),我发现三星 NVMe SSD 有一个隐藏的 ROM 恢复模式。通过短接 PCB 上的特定测试点,可以让主控芯片跳过正常启动流程,进入一个最小化的工厂模式。

测试点位置

PM9A1 使用的是三星 Elpis (S4LV003) 主控。测试点通常位于主控芯片附近,是两个很小的焊盘。

⚠️ 警告:具体测试点位置需要根据你的 PCB 版本确定。建议先找高清拆解图对照,用万用表确认连通性。短接错误的点可能造成永久性损坏!

操作步骤

  1. 将 SSD 直接插在主板的 M.2 槽上(不要用 USB 转接盒,很多转接盒不支持固件更新等底层 NVMe 命令)
  2. 断电状态下,用镊子短接测试点
  3. 保持短接,接通电源
  4. 等待约 2-3 秒后松开镊子
  5. 此时系统应该能识别到一个特殊的设备

成功进入 ROM 模式后,用 nvme list 查看:

user@debian:~$ sudo nvme list
Node                  Generic               SN                   Model                                    Namespace Usage                      Format           FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1          /dev/ng0n1            SEC00000000000000001 SAMSUNG_NVMe_ROM                         1           0.00   B /   1.07  GB      4 KiB +  0 B   AELROM03

看到没?关键信息:

  • Model: SAMSUNG_NVMe_ROM — 这就是工厂 ROM 模式的标志!
  • FW Rev: AELROM03 — ROM 引导程序版本
  • 容量: 只显示 1.07 GB — 这是正常的,ROM 模式下不会加载完整固件

这说明主控芯片本身没坏,只是固件区被我搞坏了。有救!


固件恢复:用 NVMe 标准命令重写固件

第一步:确认设备支持固件更新

先看看控制器信息,确认支持固件下载功能:

user@debian:~$ sudo nvme id-ctrl /dev/nvme0 -H | grep -A5 -B5 "Firmware"

关键输出:

oacs      : 0x4
  [2:2] : 0x1   FW Commit and Download Supported

frmw      : 0x16
  [4:4] : 0x1   Firmware Activate Without Reset Supported
  [3:1] : 0x3   Number of Firmware Slots
  [0:0] : 0     Firmware Slot 1 Read/Write

好消息:

  • FW Commit and Download Supported — 支持固件更新
  • Number of Firmware Slots: 3 — 有 3 个固件槽位
  • Firmware Slot 1 Read/Write — 槽位 1 可读写

第二步:查看当前固件状态

user@debian:~$ sudo nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x1
frs1 : 0x33304d4f524c4541 (AELROM03)

目前只有 ROM 引导固件在运行。

第三步:下载正确的固件

这次一定要选对固件!我下载了 1TB PM9A1 对应的 GXA7801Q 版本固件:

user@debian:~$ sudo nvme fw-download /dev/nvme0 --fw=/home/user/Desktop/GXA7801Q_Noformat.bin
Firmware download success

成功!固件已经传输到设备缓冲区。

第四步:提交固件到槽位

这里有个坑。我一开始尝试直接激活:

user@debian:~$ sudo nvme fw-commit /dev/nvme0 --slot=0 --action=1
fw-commit: Interrupted system call

失败了。换个姿势,先把固件写入槽位 2,不立即激活:

user@debian:~$ sudo nvme fw-commit /dev/nvme0 --slot=2 --action=0
Success committing firmware action:0 slot:2
Multiple Update Detected (MUD) Value: 0

参数说明

  • --slot=2:写入固件槽位 2
  • --action=0:仅下载固件到指定槽位,不激活

第五步:验证固件写入

user@debian:~$ sudo nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x1
frs1 : 0x5131303837415847 (GXA7801Q)

漂亮!固件已经变成 GXA7801Q 了!

再看看硬盘状态:

user@debian:~$ sudo nvme list
Node                  Generic               SN                   Model                                    Namespace Usage                      Format           FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1          /dev/ng0n1            SEC00000000000000001 SAMSUNG_NVMe_ROM                         1          76.38  GB /   1.02  TB    512   B +  0 B   AELROM03

虽然 Model 还显示 ROM 模式,但容量已经恢复正常 1.02 TB 了!这说明新固件已经在工作。

第六步:激活新固件(可选)

理论上应该用 --action=1 激活固件,但是:

user@debian:~$ sudo nvme fw-commit /dev/nvme0 --slot=2 --action=1
NVMe status: Invalid Firmware Image: The firmware image specified for activation is invalid and not loaded by the controller(0x107)

报错了。但没关系!重启电脑后,BIOS 已经能正常识别硬盘了,固件版本显示正确。数据完好无损!


总结:从砖到正常只需要几条命令

整个恢复过程的核心命令其实就三条:

# 1. 下载固件到设备
sudo nvme fw-download /dev/nvme0 --fw=/path/to/correct_firmware.bin

# 2. 提交固件到槽位(不激活)
sudo nvme fw-commit /dev/nvme0 --slot=2 --action=0

# 3. 重启让新固件生效
reboot

经验教训

  1. 固件升级前一定要核对型号和容量,不要像我一样手贱
  2. 三星 NVMe SSD 的 ROM 模式是救命稻草,短接测试点可以进入
  3. Linux 的 nvme-cli 工具包非常强大,可以做很多底层操作
  4. 专业人士说没救的时候,不妨自己试试(当然要做好心理准备)

致谢

  • 感谢 nvme-cli 项目的开发者们
  • 感谢各种数据恢复论坛的大神们分享的技术资料
  • 感谢这块 PM9A1 没有真的变成一块砖

本文记录于 2025 年 6 月,希望能帮到遇到类似问题的朋友。如果你的 PM9A1 也翻车了,不要急着放弃,说不定也能救回来!