解决Unraid虚拟机libvirt丢失问题
Unraid 7.x,ZFS 池,重启之后虚拟机页面打不开,libvirt 服务起不来。我翻遍了官方文档、论坛、Reddit,也问了好几个 AI,给出的答案要么是"检查磁盘阵列",要么是"重新分配 cache 盘",要么就是"重装 libvirt 插件"。没有一个是真正对症的。折腾了大半天,最后发现解决方案简单得离谱。
原因
硬盘重建的过程中,/mnt/user/system/libvirt/libvirt.img 被删了。这个文件是 libvirt 的核心存储,里面存着所有虚拟机的定义——CPU、内存、磁盘路径、NVRAM,全在里面。文件没了,libvirtd 起不来,VM 页面自然就是废的。重建硬盘的时候 Unraid 会重新格式化目标盘,如果你的 libvirt.img 恰好落在那块盘上(或者重建过程中路径发生了变动),这个文件就没了。官方文档里对这种情况没有任何说明,论坛里也几乎没人提过。
解决方法
打开 Unraid WebUI 右上角的终端(或者 SSH 进去),按顺序执行:
# 在 ZFS 池上创建目录结构
# system/libvirt 放 libvirt 镜像文件
# isos 放系统安装镜像
# domains 放虚拟机磁盘文件
mkdir -p /mnt/zfs/system/libvirt
mkdir -p /mnt/zfs/isos
mkdir -p /mnt/zfs/domains
# 创建 10G 稀疏文件作为 libvirt 存储
# 稀疏文件:ls 看是 10G,du 看是 0
# 只有实际写入数据时才占磁盘空间,不用担心浪费
truncate -s 10G /mnt/zfs/system/libvirt/libvirt.img
ls -lh /mnt/zfs/system/libvirt/libvirt.img
du -h /mnt/zfs/system/libvirt/libvirt.imgtruncate 建的是稀疏文件,看着 10G,实际占用 0,写入多少占多少,不用担心空间。
然后去 Settings → VM Manager,把 Libvirt 存储位置 改成:/mnt/zfs/system/libvirt/libvirt.img
顺手把 ISO 路径和虚拟机存储路径也改了:
虚拟机存储:
/mnt/zfs/domains/

重启系统,完事。
验证
重启后 SSH 进去跑一下:
mount | grep libvirt
pgrep -a libvirtd
virsh list --all三条都有正常输出就行了。virsh list --all 显示空列表是正常的,因为这是新建的 libvirt.img,之前的 VM 定义在旧文件里。磁盘文件(qcow2)还在的话,重新建个 VM 指过去就行,数据不丢。
为什么网上找不到这个答案
搜了官方文档、论坛、Reddit,也问了好几个 AI,全是在绕圈子。后来想明白了,这个问题之所以没人写,是因为它同时踩了好几个"搜索盲区":
第一,Unraid 官方文档压根没覆盖这个场景。 官方 VM 文档里写得很清楚,推荐把虚拟机放在 cache pool 的 SSD 上,默认路径是 /mnt/user/system/libvirt/libvirt.img。文档假设你的存储架构是"array + cache pool",对于"纯 ZFS 池用户"的 VM 配置,基本是空白。你按文档搜,搜到的全是 cache pool 相关的内容,跟你的情况对不上。
第二,报错信息完全误导人。 libvirt.img 被删之后,Unraid 不会告诉你"文件不存在"。VM 页面就是转圈,日志里写的是 libvirtd failed to start 之类的泛泛错误。你拿这个错误去搜,搜出来的全是"检查权限""重启服务""重装插件"——全是治标不治本的废话。真正的问题是文件没了,但没有任何一条日志明确告诉你这一点。
第三,"硬盘重建会删 libvirt.img"这件事,官方没提过。 重建硬盘的时候 Unraid 会格式化目标盘,如果 libvirt.img 恰好在那块盘上,它就没了。但官方文档里关于重建操作的说明,一个字都没提到对 /mnt/user/system/ 下文件的影响。你不知道文件会被删,自然也不会往这个方向去搜。
第四,解决方案太简单了,简单到没人觉得值得写。 就是建个目录、truncate 一个文件、改个路径。没有复杂的排查流程,没有高深的原理。大部分人遇到这个问题,要么折腾半天放弃了,要么在论坛里问了一句没人回,就没了。没有人会专门写一篇帖子说"我建了个文件就好了"。
第五,这个用户群体本身就小。 用 ZFS 池的 Unraid 用户是少数,在 ZFS 池上跑 VM 的更少,跑 VM 的同时还经历了硬盘重建的更是极少数。这几个条件叠在一起,能遇到这个问题的人可能全网就几十个。
所以如果你也是重建完硬盘之后 VM 没了,别搜了,直接按上面的来。