mount -o remount,ro 仅能强化已挂载分区的只读状态,无法主动启动对物理损坏磁盘的抢救;真正抢救需立即停写、卸载或懒卸载,禁用fsck,优先用ddrescue制镜像或rsync/photorec提取数据。

mount -o remount,ro 不能用于“实现”对物理损坏磁盘的只读抢救式挂载——它只是确认或强化系统已采取的保护动作,而不是主动开启抢救模式的手段。真正有效的抢救,发生在系统检测到风险后自动触发只读,或你在数据尚可读取时手动卸载并安全访问。
下面分三部分说清楚怎么做、为什么不能靠 remount,ro、以及真正该做的关键操作:
一、mount -o remount,ro 的真实作用和局限
- 它仅适用于当前已挂载但仍是读写(rw)状态的分区,且内核尚未标记设备为“不可写”;
- 若磁盘已因 I/O 错误被内核锁定(例如 dmesg 显示
device sda1: write-protected或I/O error后自动 remount ro),该命令会失败,提示mount: /xxx is write-protected, mounting read-only; - 它不解决底层问题,也不提升数据安全性——坏道仍在读取、CRC 错误仍会重试、pending sector 可能扩大,强行 remount ro 并不能阻止后续读取失败。
✅ 正确理解:
remount,ro是“顺从现状”,不是“启动抢救”。
二、物理损坏磁盘的真正抢救前提:停止写入 + 控制读取方式
抢救的核心原则是:最小化 I/O 压力,优先提取可用数据,避开故障区域。需立即执行:
-
立即停掉所有访问该分区的服务和进程
fuser -vm /mount/point # 查看占用进程 lsof +D /mount/point # 更详细查看 kill -TERM $(fuser -v /mount/point 2>/dev/null | awk 'NR>1 {print $3}') # 安全终止(慎用) 卸载分区(若未 busy);若提示 busy 且无法终止,考虑
umount -l(懒卸载)释放挂载点,但不再写入任何东西-
禁用可能导致二次伤害的操作:
- ❌ 不运行
fsck/e2fsck(可能触发大量读写,加剧坏道扩散) - ❌ 不启用 TRIM(
fstrim)或discard挂载选项 - ❌ 不尝试
mount -o rw,remount强行恢复写入
- ❌ 不运行
三、安全抢救数据的实操路径
✔ 方法 1:用 ddrescue 创建镜像(最推荐)
适用于磁盘还能响应基本读请求(即使慢或偶发错误):
# 安装(如未安装) sudo apt install gddrescue # Debian/Ubuntu sudo yum install ddrescue # RHEL/CentOS # 创建镜像(-d 跳过缓存,-r3 重试3次,--no-split 避免碎片) sudo ddrescue -d -r3 /dev/sdX /path/to/image.img /path/to/logfile.log # 镜像完成后,挂载镜像只读分析(不碰原盘!) sudo mount -o loop,ro /path/to/image.img /mnt/rescue
✔ 方法 2:用 rsync --ignore-errors 快速拷出尚可读文件
适合文件系统结构尚完整、仅局部坏块:
sudo rsync -av --ignore-errors --exclude='lost+found' /mount/point/ /backup/path/
⚠️ 注意:加
--ignore-errors是关键,否则遇到一个坏文件就中断。
✔ 方法 3:用 photorec 直接恢复文件(无视文件系统)
当 ext4/xfs 元数据已损坏、挂载失败时使用(从 raw 设备恢复):
sudo photorec /dev/sdX # 交互式选择分区、保存路径
它不依赖目录结构,靠文件头签名识别,适合严重损坏场景。
以上操作全程应避免对原磁盘发起任何写命令,包括日志轮转、systemd-journald 写入、甚至 touch 测试文件。抢救完成后,务必用 smartctl -a /dev/sdX 查看 Reallocated_Sector_Ct 和 Current_Pending_Sector ——只要这两项非零,就说明物理损坏已发生,该盘不应再作为主力存储使用。











