Linux磁盘自动备份中突变只读是内核“熔断式保护”,非脚本错误,需立即暂停备份、保留现场,通过dmesg/journal日志区分硬件故障(如I/O error、坏道)或文件系统损坏(如journal abort、superblock mismatch),再分别执行ddrescue克隆、e2fsck/xfs_repair修复或安全remount恢复,并加固备份预检与双写策略。

自动备份过程中磁盘突然变只读,本质是内核触发的“熔断式保护”,不是备份脚本出错,而是底层存储已发出严重告警。此时强行重试或跳过错误,等于让备份程序往故障盘上硬写——极易导致元数据崩塌、备份镜像损坏甚至原盘彻底锁死。必须立即中止写入、锁定现场、分层诊断。
第一步:立即冻结备份流程并保留只读现场
不要重启服务,不要执行 fsck 或 touch 测试,更不要 rm -rf 清理临时文件。正确操作是:
- 用 kill -STOP $(pgrep -f "rsync|borg|restic") 暂停所有备份进程(避免 SIGTERM 触发清理逻辑)
- 运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" 确认当前挂载状态是否含 ro
- 立刻保存关键日志:dmesg -T > /tmp/dmesg_ro_$(date +%s).log 和 journalctl -b --no-pager > /tmp/journal_ro_$(date +%s).log
第二步:快速区分故障类型——硬件异常 or 文件系统逻辑损坏
看日志里最靠前的错误源头,决定后续动作走向:
- 若 dmesg 出现 end_request: I/O error、ata1.00: failed command、UNCorrectable sector、Media_Wearout_Indicator=0 → 硬件级故障,立即停写,准备换盘
- 若出现 EXT4-fs error (device sda1): journal has been aborted、XFS (device sda1): Corruption detected、superblock checksum mismatch → 文件系统逻辑损坏,可修复但需卸载后操作
- 若仅报 errors=remount-ro 且 smartctl 显示 Reallocated_Sector_Ct=0、Current_Pending_Sector=0、UDMA_CRC_Error_Count 正常 → 很可能是上次非正常关机遗留的 journal 异常,可尝试安全重挂载
第三步:按类型执行对应恢复动作
根据上一步结论选择路径,严禁跨类型操作:
- 硬件异常(SMART 报警):停止所有对该盘的访问,用 ddrescue -d -r3 /dev/sdX /backup/disk_image.img /backup/ddrescue.log 克隆镜像;克隆完成后,在镜像上挂载为只读(mount -o loop,ro,noload /backup/disk_image.img /mnt/rescue)提取备份所需数据
- 文件系统逻辑损坏(非根分区):先 fuser -v /backup/mountpoint 查占用进程并终止,再 umount /backup/mountpoint,最后执行 e2fsck -f -y /dev/sdXN(ext4)或 xfs_repair /dev/sdXN(xfs)
- journal 中断类只读(无硬件报警):尝试 mount -o remount,rw /backup/mountpoint;成功后立即运行 touch /backup/mountpoint/ro_test_$(date +%s) && sync 验证写入稳定性;验证通过即刻启动备份,并同步将关键数据复制到其他存储
第四步:备份流程加固与熔断策略升级
单次恢复只是止损,长期需让备份系统自带“健康感知”能力:
- 在备份脚本开头加入预检:每次启动前执行 smartctl -n standby /dev/sdX && [ $(stat -fc '%T' /backup) != "ext4" ] || echo "ok",任一失败则退出并告警
- 用 timeout -s SIGTERM 300 rsync ... 给每个备份任务设超时,防止 I/O hang 卡死整个队列
- 将备份目标挂载参数从 defaults 改为 defaults,errors=continue(非关键盘)或 defaults,errors=remount-ro(关键盘),让内核接管熔断,而非依赖脚本判断
- 对重要备份任务启用双写:一份写本地盘,一份实时同步至另一台服务器的 borg serve 或 restic repo,避免单点物理故障导致全量中断

















