虚拟机硬盘崩了,第一反应不该是重装系统,而是先给虚拟机断电、把整个虚拟磁盘文件复制一份出来,只在副本上做只读挂载和数据提取,只要没在坏盘上反复执行修复命令,多数情况下的数据都能捞回来,业务系统也能在一两个小时内重建完成。下面这套流程是运维现场反复验证过的顺序,从止损、判断损坏层级,到具体命令和成本,一条条说清楚。
崩溃后的头三十分钟,顺序错了就白忙
虚拟机和物理机最大的区别在于:硬盘是一个文件,这个特性既是麻烦,也是救命稻草。
先把虚拟机停下来,但不要删
关机、挂起、断电都行,唯一不能做的是“重启试试看”,反复重启会让文件系统的元数据被反复覆写,原本能整块恢复的目录结构会碎成渣,如果是生产环境,先在管理后台把虚拟机断开网络,避免它带着坏盘继续写日志。
复制虚拟磁盘文件是第一优先级
进到数据存储目录,把这几类文件整份拷到另一块健康的存储上:
xxx.vmdk或xxx.vhdx主磁盘文件- 所有
-000001.vmdk形式的快照增量盘,一个都不能漏 xxx.vmx/xxx.vm config配置文件xxx.nvram、xxx.vmsd这类描述文件和快照索引
快照盘和主盘是链式关系,少一个文件,整条链就断了,拷贝时用 cp 或者 scp,别用带压缩的方式,避免二次损坏。
别在原盘上跑修复命令
fsck -y、chkdsk /f、vmware-vdiskmanager -R 这些命令在正常情况下是修理工,在坏盘上是推土机,它们会直接改写结构,一旦改错,专业恢复工具的命中率会明显下降。所有修复动作,只在副本上做。
先判断坏在哪一层
在副本上做三件事:能挂载就挂载、能读分区表就读分区表、能校验就校验。fdisk -l、parted print、qemu-img check、vmkfstools -D 挨个跑一遍,把问题定位到“文件系统坏”“虚拟磁盘文件坏”“底层存储坏”三者之一,后面的路线完全不同。
虚拟机硬盘崩溃怎么恢复数据?先分清三种损坏
同样是“打不开”,成因差得很远,处理方式也差得很远。
| 损坏类型 | 典型表现 | 数据可恢复性 | 处理路径 |
|---|---|---|---|
| 文件系统逻辑损坏 | 能挂载但目录乱、提示需要 fsck | 较高,多数文件可完整取出 | 副本上只读挂载,用恢复工具扫描 |
| 虚拟磁盘文件损坏 | 报 cannot open the disk、描述符丢失、快照链断裂 | 中等,取决于增量盘是否齐全 | 重写描述符、合并链、转换磁盘格式 |
| 底层存储故障 | 宿主机报 I/O error、坏道、RAID 掉盘、云盘只读 | 视故障范围,较复杂 | 停止一切操作,做镜像后再分析 |
逻辑损坏:先只读挂载,再往外捞
在副本上挂载成只读,是最安全的第一步:
losetup -r -f --show disk-copy.vmdk mount -o ro,noload /dev/loop0 /mnt/rescue
挂上之后别急着全盘拷贝,先按业务重要性挑目录:数据库的 data 目录、应用的配置文件、用户上传目录,优先级最高,系统级的 /usr、/var/lib 之类,重建时重装更快。
虚拟磁盘文件损坏:描述符和链是重点
VMware 的 vmdk 由“描述符文本 + 数据平文件”两部分组成,描述符丢了但平文件还在,数据就是完整的,这种情况下把描述符手工补回去,磁盘就能重新识别,快照链断裂则要看增量盘有没有缺失,缺了末端的话,只能恢复到最后一个完整快照的时间点。
底层存储故障:先做镜像,别碰原盘
宿主机报 SCSI error、Medium Error 时,先 ddrescue 做一份带重试的镜像,再在镜像上分析,业内专家指出,坏道盘的二次损伤大多来自反复读取同一区域,镜像过程一定要限制重试次数和读取速度。
VMware虚拟机磁盘损坏修复步骤
按故障现象分三种场景,命令可以直接照抄,路径换成你自己的。
虚拟机开不了机,报 cannot open the disk
先用 vmkfstools -D 查锁和损坏位置,再尝试转换修复:
vmkfstools -D /vmfs/volumes/datastore1/vm01/vm01.vmdk vmkfstools -R /vmfs/volumes/datastore1/vm01/vm01.vmdk /vmfs/volumes/datastore2/vm01-fixed.vmdk
-R 会重建描述符,输出到另一个目录,原文件保持不动,没有 ESXi 环境的话,用 qemu-img 在 Linux 上做同样的活:
qemu-img check -r all vm01.vmdk qemu-img convert -O vmdk vm01.vmdk vm01-fixed.vmdk
转换过程本身就能绕开一部分元数据错误,修复率在实操中相当可观。
能开机,但某块数据盘不见了
这种情况多数是分区表或文件系统表头被写坏,在副本上跑 testdisk 重建分区表,再用 photorec 按文件类型捞数据,整个过程对源盘只读,风险可控。
快照链断裂,虚拟机提示需要合并
不要点“合并”按钮,那会把现有的增量盘一起吃掉,先把所有增量盘和主盘复制出来,在副本目录里用 vmkfstools -i 逐级合并,或者直接把最完整的那个增量盘当独立磁盘挂载读取,合并顺序必须从最底层开始,跳级合并会丢数据。
Hyper-V和云主机:另外两条路
Hyper-V虚拟机无法启动怎么修复
Hyper-V 的 vhdx 自带日志,异常关机后常提示“无法附加虚拟磁盘”,处理思路和 VMware 类似,先复制,再检查,最后修复:
Mount-VHD -Path D:\vm\app01.vhdx -ReadOnly Repair-VHD -Path D:\vm\app01-copy.vhdx -Mode ScanAndRepair
注意到 Repair-VHD 必须指向副本,指向原盘就是自毁,有检查点(Checkpoint)的,优先从检查点恢复,再合并差异盘,比直接修 vhdx 稳妥得多。
云上虚拟机:先看快照和镜像
云主机出问题,第一件事是查云平台的自动快照策略有没有生效,第二件事是把系统盘做成自定义镜像再开机,多数云厂商的快照是块级增量,回滚速度快,代价是回滚点通常是整盘状态,可能带回旧数据,回滚前把最新业务数据单独导出一份。
虚拟机数据恢复多少钱?钱花在哪
虚拟机数据恢复多少钱,取决于坏在哪一层,价格差距非常大。
- 自己动手:只花时间,成本为零,逻辑损坏、描述符损坏这两类,有基础 Linux 命令功底的人,半天到一天能搞定。
- 找第三方服务:按盘容量和难度计价,普通逻辑恢复通常几百元起步,涉及虚拟磁盘底层重建的,会到数千元区间。
- 物理故障:坏道、磁头、RAID 阵列重组,需要开盘或阵列重建,费用从数千元到上万元不等,周期也更长。
行业共识认为,八成以上的“虚拟机崩溃”其实停在逻辑层,真正需要送修的并不多,判断标准很简单:副本能挂载、能读出文件,就自己干;副本完全无法识别、宿主机持续报硬件错误,就别硬扛了。
系统重建清单:恢复不如重建快
数据捞出来之后,系统这一层建议直接重建,比修快得多。
- 用同版本镜像新建虚拟机,别在坏盘上“修复安装”
- 先装基础环境,再按清单恢复应用配置
- 数据目录用挂载方式接回去,不要混在系统盘里
- 重建完立刻配一份快照策略,间隔按业务写入频率定
- 把这次故障的时间点和操作记录进运维文档,下次直接查
虚拟机硬盘崩溃相关问答
虚拟机磁盘文件被误删了,还能恢复吗
可以,删除只是把数据块标记为空闲,只要宿主机没往那块存储写入新数据,用 extundelete、TestDisk 或者厂商自带的数据存储恢复工具,找回率都比较高,关键是发现误删后立即把该数据存储设为只读,或者把整个 LUN 卸载。
虚拟机崩溃后数据恢复要多久
分情况:逻辑损坏在副本上挂载捞文件,通常一到三小时;快照链断裂需要逐级合并校验,半天左右;涉及底层坏道镜像,按盘容量算,几百 GB 的盘做完整镜像往往要一整天,之后的分析还要再花时间,这也是为什么第一步永远是复制而不是修复。
虚拟机崩溃后重装系统,原来的数据盘还能直接挂载吗
能,前提是数据盘本身没有逻辑损坏,把旧数据盘作为第二块磁盘挂到新虚拟机上,先以只读方式挂载检查文件系统,确认无误后再改成读写,如果提示需要 fsck,务必先在副本上跑一遍,确认修复结果再动原盘。
虚拟机硬盘崩溃这件事,真正决定数据能不能回来的,不是修复工具多高级,而是崩溃后头几分钟有没有管住自己的手,先复制、再判断、后修复,这套顺序守住,绝大多数故障都停在“有惊无险”这一档。