硬盘坏道检测脚本抢救服务器重要数据

什么情况下需要硬盘坏道检测脚本抢救数据

当服务器出现以下异常,很可能硬盘已经产生坏道:系统启动报I/O error、文件读写卡死、dmesg日志刷出media errorUNC警告。
此时如果硬盘上还有未备份的重要数据,你需要立刻使用坏道检测脚本定位坏道范围,再用专用工具把数据搬到安全的硬盘上,避免坏道扩散导致数据彻底丢失。

准备条件:工具安装与兼容性确认

操作前请确认:

  • 你已通过SSH登录到服务器,拥有sudo或root权限。
  • 准备一块容量足够的好硬盘作为数据迁入盘(建议挂载到/mnt/safe)。
  • 安装以下工具(CentOS/Debian通用):
# 安装 badblocks(通常随 e2fsprogs 自带)
sudo apt-get install e2fsprogs -y   # Debian/Ubuntu
sudo yum install e2fsprogs -y       # CentOS/RHEL

# 安装 smartctl(smartmontools 包含)
sudo apt-get install smartmontools -y
sudo yum install smartmontools -y

# 安装 ddrescue(数据抢救核心工具)
sudo apt-get install gddrescue -y
sudo yum install ddrescue -y         # EPEL 源

如果ddrescue安装后命令为dd_rescue(旧版),可改用apt install ddrescue或从源码编译。
建议先执行which ddrescue确认名称。

核心步骤:用坏道检测脚本定位坏道并抢救数据

第一步:使用badblocks扫描坏道位置

先卸载待检测硬盘(假设设备是/dev/sdb,且未挂载重要分区):

sudo umount /dev/sdb*

运行非破坏性只读扫描(不写数据):

sudo badblocks -sv /dev/sdb > /tmp/badblocks.txt

参数说明:

  • -s:显示进度
  • -v:详细输出
  • 输出文件/tmp/badblocks.txt会列出所有坏块号。

你也可以加-c 32768增大每次检查块数加快速度,但更消耗内存。
非生产环境建议直接使用badblocks默认参数。

第二步:用smartctl快速筛查S.M.A.R.T.状态

sudo smartctl -H /dev/sdb

重点关注SMART overall-health self-assessment test result: PASSEDFAILED
如果结果为FAILED,请立刻执行抢救。
再用sudo smartctl -a /dev/sdb | grep -i reallocated查看已重映射扇区数,数量激增说明坏道正在扩散。

第三步:使用ddrescue安全复制数据到好盘

假设坏盘为/dev/sdb(整个盘或分区/dev/sdb1),好盘目录为/mnt/safe

sudo ddrescue -f -n /dev/sdb /mnt/safe/sdb_backup.img /mnt/safe/sdb_log.log
  • -f:强制写入目标文件
  • -n:不分割源盘,适合首次粗略拷贝
  • 第一个参数:源设备
  • 第二个参数:目标镜像文件路径
  • 第三个参数:日志文件路径(记录已读和错误位置)

首次完成后跑第二次增强模式,尝试读取错误块:

sudo ddrescue -d -r3 /dev/sdb /mnt/safe/sdb_backup.img /mnt/safe/sdb_log.log

-d直接读取源盘(跳过缓存),-r3重试3次。
抢救完成后,把镜像挂载到临时目录提取关键文件。

避坑指南:别让操作加速数据损坏

  • 不要直接对坏盘执行fsck或挂载:坏盘上的文件系统可能已受损,强制修复或挂载写入会扩大坏道。
  • 不要用dd不加参数直接复制:普通dd遇读错误会直接退出,无法跳过坏道。必须用ddrescue或dd_rescue。
  • 保持电源稳定:抢救过程中突然断电可能让磁头卡在坏道区域,导致永久划伤。
  • 先确认坏盘设备名:使用lsblkfdisk -l仔细核对,避免误操作到好盘。

验证抢救效果并安全清理

  1. 检查ddrescue日志:cat /mnt/safe/sdb_log.log,查看行末的errsize(未恢复字节数),如果为0或很小说明抢救成功。
  2. 挂载镜像文件(只读):
sudo mount -o loop,ro /mnt/safe/sdb_backup.img /mnt/restore
ls -la /mnt/restore
  1. 如果文件损坏,可尝试用testdiskphotorec从镜像中恢复部分文件。
  2. 确认数据完整后,再考虑更换坏盘。

常见问题解答

Q:badblocks扫描太慢,可以中途取消吗?

A:可以,按Ctrl+C终止,已记录的坏块信息保存在输出文件里。
扫描结果应依据最新一次完整扫描。

Q:ddrescue日志文件丢失了还能继续吗?

A:可以,但无法记录已读取位置,会从头重扫。
建议保存日志到好盘。

Q:抢救出来的文件打开显示乱码?

A:可能是文件系统元数据损坏,尝试用fsck -n检查镜像(不修复),或使用photorec按文件签名恢复。

如果你正在处理硬盘坏道检测脚本抢救服务器重要数据,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
自动爬虫IP黑名单定时更新拦截恶意抓取
下一篇
静态资源海外CDN加速完整部署教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意