Linux 服务器磁盘分区损坏,如何恢复数据?

引言:分区损坏不等于数据丢失

当 Linux 服务器突然无法挂载某个分区,或者启动时报错 No such device 时,很多新手的第一反应是“数据完蛋了”。
实际上,磁盘分区损坏往往只是逻辑结构出现问题,数据本身还完好地躺在扇区里
只要不盲目格式化、不写入新数据,就有很大机会恢复。

本文围绕 Linux 服务器磁盘分区损坏,如何恢复数据? 这个核心问题,整理出三种常见场景的完整操作流程,每一步都给出可执行命令,零基础也能跟着做。

---

前置准备:先停下所有写操作

  • 立即卸载损坏分区:如果分区还能访问,先用 umount /dev/sdb1 卸载,避免系统继续向它写数据。
  • 准备一个外置存储:用于存放恢复出的文件,比如移动硬盘或另一台服务器的 NFS 目录。
  • 安装必要工具:大部分 Linux 发行版自带 fsck,但 testdiskddrescue 需要额外安装。
  # CentOS / RHEL
  sudo yum install -y epel-release
  sudo yum install -y testdisk ddrescue
  
  # Ubuntu / Debian
  sudo apt update && sudo apt install -y testdisk gddrescue

---

场景一:分区表丢了,用 testdisk 恢复

这是最常见的“磁盘分区损坏”——分区表被破坏,系统无法识别原来的分区。testdisk 是专门重建分区表的交互式工具。

操作步骤

  1. 以管理员身份运行 testdisk
   sudo testdisk /dev/sda

注意:操作对象是整块磁盘(如 /dev/sda),不是分区(如 /dev/sda1)。

  1. 选择分区表类型:通常选 [Intel] Intel/PC partition(MBR 分区表)或 [EFI GPT](GPT 分区表),按回车。
  2. 选择菜单项 [ Analyse ] Analyse current partition structure,然后按回车。
  3. [Quick Search] 开始快速搜索。testdisk 会扫描整个磁盘,列出找到的分区。找到的目标分区通常显示为 LinuxLinux swap
  4. 确认分区后按 P 预览文件:如果能列出文件名,说明数据完好的可能性很高。
  5. Write 将分区表写回磁盘:testdisk 会让你按 Y 确认。写入后不要立即重启,先运行 partprobe 让内核重读分区表。
   sudo partprobe /dev/sda
  1. 挂载检查
   sudo mount /dev/sda1 /mnt
   ls -l /mnt
如果 Quick Search 没找到,可以尝试 [Deeper Search],但会花费更长时间。

---

场景二:文件系统(FS)损坏,用 fsck 修复

分区表正常,
但挂载时报错 Invalid superblockStructure needs cleaning
说明文件系统本身坏了。fsck 可以检查并修复多数 ext2/3/4 文件系统错误。

操作步骤

  1. 卸载分区(如果还挂着)
   sudo umount /dev/sdb1
  1. 强制检查并修复
   sudo fsck -y -f /dev/sdb1
  • -y:遇到问题自动回答 yes,避免交互卡住。
  • -f:强制检查,即使标记为干净也检查。
  1. 查看修复报告:fsck 会输出多少个 inode 被修复、多少块被标记为坏块。如果报错 UNEXPECTED INCONSISTENCY,可以加 -c 参数检查坏道。
  2. 再次挂载验证
   sudo fsck -f /dev/sdb1 && sudo mount /dev/sdb1 /mnt && df -h
避坑:不要在挂载状态下运行 fsck,可能导致文件系统进一步损坏。对于 XFS、Btrfs 等其他文件系统,应使用对应的 xfs_repairbtrfs check

---

场景三:物理坏道或机械故障,用 ddrescue 抢救数据

如果磁盘有大量坏道,或者系统报告 I/O error,不要反复挂载尝试,优先用 ddrescue 将数据完整克隆到另一个健康磁盘。

操作步骤

  1. 查看磁盘信息
   sudo fdisk -l /dev/sdc

假设损坏盘是 /dev/sdc,目标盘是 /dev/sdd

  1. 运行 ddrescue
   sudo ddrescue -d -r3 /dev/sdc /dev/sdd rescue.log
  • -d:直接 I/O,绕过缓存。
  • -r3:每个坏块最多重试 3 次。
  • rescue.log:记录恢复进度,即使中断也可续传。
  1. 恢复完成后,对克隆盘 /dev/sdd 执行前面的分区或文件系统修复,所有操作都在克隆盘上进行,原盘保持不动。
  2. 挂载克隆盘确认数据
   sudo mount /dev/sdd1 /mnt

---

避坑指南(新手必看)

  • 不要直接 mkfs:格式化会彻底清除数据,除非你已经通过 dd 完整备份。
  • 不要在损坏盘上运行 fsck 之外的大写入操作:每次写入都可能覆盖残存的数据碎片。
  • 优先使用只读方式挂载:如果分区还能 mount,用 -o ro 只读挂载,然后复制文件出来。
  • 日志文件很重要:使用 ddrescue 时必须保留 rescue.log,这样下次运行可以跳过已恢复的部分。
  • 不要在救援盘上安装系统:避免干扰,尽量在一台独立机器或 Live CD 环境下操作。

---

效果验证:如何确保数据恢复了?

无论使用哪种恢复方法,最终验证只有一个标准:成功挂载后,文件能正常读取且无 CRC 错误

  • 运行 sudo mount -t auto /dev/sdX1 /mnt 看是否报错。
  • 进入 /mnt 后,执行 tree -L 2du -sh * 看目录结构是否完整。
  • 随机打开几个关键文件(如数据库备份、配置文件),用 cathead 查看内容是否乱码。
  • 如果文件很多,可以用 find /mnt -type f -exec md5sum {} \; > /tmp/checksums.txt 生成校验值,与备份比较。

---

结语

Linux 服务器磁盘分区损坏后,只要不慌张、不盲目操作,恢复概率其实很高。
本文从分区表修复、文件系统修复到物理坏道克隆,覆盖了最常见的三种场景。
你可以根据自己的报错信息选择对应方法。养成定期备份的习惯,才是应对“分区损坏”的终极方案。
如果操作中遇到任何报错,欢迎在下面留言,我会逐一回复。

分享到:
上一篇
用大模型做安全扫描,如何避免误报?
下一篇
宝塔面板数据库优化,提升网站访问速度
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意