解决三星 990 Pro SSD ext4 文件系统只读问题
问题背景
三星 990 Pro SSD 的 Linux 系统上遇到了 ext4 文件系统突然变为只读(read-only)的问题,或者系统日志中出现掉盘现象,但硬件检测工具却没有报告任何错误,那么你可能遇到了三星 SSD 的一个已知问题。
这个问题的典型症状包括:
- 文件系统突然变为只读模式
- 无法写入任何数据
- 系统日志中可能出现 I/O 错误
- 使用
smartctl等工具检查硬盘健康状态显示正常 - 特别是固件版本为
4B2QJXD7的三星 990 Pro 更容易出现此问题 或者之前的 版本。
具体表现为以下图片类似的症状,(重启服务器后症状消失,类似掉盘)

WARNING在进行任何操作之前,请务必备份重要数据!虽然这个问题通常不会导致数据丢失,但安全起见还是要做好备份。
问题排查
1. 检查文件系统状态
首先确认文件系统是否真的变为只读:
# 查看挂载状态mount | grep "ro,"
# 尝试创建测试文件touch /path/to/mountpoint/test.txt如果看到 Read-only file system 错误,说明文件系统确实变为只读了。
2. 查看系统日志
检查系统日志以获取更多信息:
# 查看内核日志dmesg | grep -i "error\|ext4\|nvme"
# 查看系统日志journalctl -xe | grep -i "error\|ext4\|nvme"3. 检查 SSD 信息
查看 SSD 的型号和固件版本:
# 查看 NVMe 设备信息sudo nvme list
# 查看详细信息sudo nvme id-ctrl /dev/nvme0
# 使用 smartctl 查看sudo smartctl -a /dev/nvme0如果你的设备是三星 990 Pro,并且固件版本是 4B2QJXD7 或类似版本,那么很可能是遇到了三星 SSD 的电源管理 bug。
解决方案
这个问题有两个主要的解决方案,建议先尝试方案二(内核参数修复),因为它更简单且立即生效。如果问题依然存在,再考虑更新固件。
方案一:更新 SSD 固件
三星为 Windows 用户提供了 Samsung Magician 软件,但 Linux 用户可以使用三星提供的可启动 ISO 镜像来更新固件。
步骤 1:下载固件
访问三星官方固件下载页面:
https://semiconductor.samsung.com/consumer-storage/support/tools/
找到适合你的 SSD 型号的最新固件 ISO 镜像并下载。
步骤 2:提取并运行固件更新工具
你不需要刻录 CD 或制作启动 U 盘,可以直接在 Linux 系统中提取并运行:
# 下载 ISO 镜像(替换为实际的下载链接)curl -OL https://semiconductor.samsung.com/.../firmware.iso
# 提取 initrdbsdtar -xf firmware.iso initrd
# 提取 root 文件系统bsdtar -xf initrd root
# 运行固件更新工具sudo ./root/fumagician/fumagician

步骤 3:重启系统
固件更新完成后,需要重启系统使更新生效:
sudo reboot方案二:内核参数修复(推荐)
这是一个更简单且经过验证的永久性解决方案。问题的根源是三星 SSD 的电源管理功能在 Linux 下存在兼容性问题,通过禁用 NVMe 电源状态管理可以彻底解决。
TIP这个方案已经在多个受影响的系统上验证有效,是最推荐的解决方法。
步骤 1:编辑 GRUB 配置
sudo nano /etc/default/grub找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,在引号内添加以下参数:
nvme_core.default_ps_max_latency_us=0修改后的示例:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvme_core.default_ps_max_latency_us=0"步骤 2:更新 GRUB 配置
# Debian/Ubuntu 系统sudo update-grub
# RHEL/CentOS/Fedora 系统sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# Arch Linux 系统sudo grub-mkconfig -o /boot/grub/grub.cfg步骤 3:重启系统
sudo reboot步骤 4:验证参数已生效
重启后,验证内核参数是否已经生效:
cat /proc/cmdline | grep nvme_core你应该能看到 nvme_core.default_ps_max_latency_us=0 出现在输出中。

问题原因
这个问题是三星 SSD 在 Linux 系统下的一个老问题的复现。多年来,不同型号的三星 SSD(包括 970 EVO、980 Pro 等)都曾出现过类似的问题。
根本原因是三星 SSD 的电源状态管理(Power State Management)功能与 Linux 内核的 NVMe 驱动存在兼容性问题。当 SSD 进入某些电源状态时,可能会导致 I/O 超时,进而触发文件系统的保护机制,将文件系统切换为只读模式以防止数据损坏。
通过设置 nvme_core.default_ps_max_latency_us=0,我们禁用了 NVMe 设备的自动电源状态切换(APST),强制 SSD 保持在高性能状态,从而避免了这个问题。