早上到公司,登录服务器发现 /data 挂不上,df -h 里只剩根分区,业务后台一片 500。这时候最容易犯的错,是急着 reboot,或者干脆重新格式化再装一遍。
第一步是停手,不是动手
发现数据不见了,先停掉还在写盘的服务:数据库、日志采集、上传接口,能停的都停。继续运行只会让新数据覆盖旧扇区,删掉的文件越写越难找。条件允许的话把机器网络断开,避免定时任务偷偷跑。
然后记录现象:是分区消失、挂载报错,还是目录还在但文件变成 0 字节。dmesg 里的 I/O error、RAID 卡的告警、smartctl 的健康状态,都截图或者存成文本,后面判断故障类型全靠这些。
先分清是哪种故障
- 误删、误格式化、文件系统损坏:属于逻辑故障,数据一般还留在盘上。
- 硬盘异响、掉盘、SMART 报重映射:属于物理故障,别再反复通电尝试。
- RAID 掉盘后强行重建:风险很高,重建过程可能把剩下的盘也拖垮。
逻辑故障可以自己尝试,物理故障建议直接断电,送有洁净间的专业机构。RAID 阵列在动手前,先把每块盘的镜像做出来,盘位顺序和编号记清楚。
自己做恢复的底线
不管用什么工具,都先做全盘镜像,再在镜像上操作,原盘保持只读。ddrescue 这类工具能跳过坏道,比 dd 更适合有损伤的盘。扫出来的文件先存到另一块硬盘,千万别写回原盘。
文件系统工具一般只适合 ext3、ext4 这类常见格式,XFS、ZFS 或者虚拟化平台的虚拟磁盘,处理方式不一样,拿不准就别硬上。
恢复之后的事更重要
数据找回来只是第一步,接着要校验:数据库表能不能打开、图片能不能解码、文件数量对不对。确认无误后立刻做一份异地备份,再把故障原因写进运维记录。
平时备份按三份、两种介质、一份异地的思路做:服务器本地一份,NAS 一份,对象存储或者异地机房一份,成本没想象中高。
说句实在话,服务器数据恢复没有百分百。能不能找回、能找回多少,取决于故障类型和发现时间,拍胸脯保证全恢复的说法别信。平时把备份和演练做扎实,比出事后的任何技巧都管用。