问题现象
使用 qemu-img 制作了两个qcow2的磁盘文件,给kvm虚机挂载完成,启动虚机时,系统不起来, 内核打印一直卡在 udev 初始化阶段,尝试把虚机挂的盘去掉,重新启动,还是一样的问题,基本可以肯定问题是出在宿主机上了,查看系统日志(journalctl)报如下错误,提示No space left on device
定位过程
1、df -h 查看系统各分区磁盘使用情况,可以看到操作系统所在的分区有明显的异常, 总共542G 的容量,使用了518G, 使用率100%, 一般分区会预留5% 给操作系统使用, 518G 加上 5%的预留空间 基本就到 100%了
2、但是从对系统的了解来说,操作系统分区不会占用到找么大, 需要找到时什么文件占用了磁盘,使用du 命令查看根目录磁盘占用情况(du -sh ./* |sort -rh),输出情况如下, 结合 df 的输出我们可以看到,根目录下(nt_disk 是另外一个分区,不算在内)只占用了200多G 不到300G的磁盘
3、结合最近的操作,怀疑系统有备份文件占用了磁盘,nt_disk 分区重做过好几次, 该分区在之前的操作 使用 full 预分配模式创建过qcow2 文件,因为重做了分区,每次磁盘UUID 不一样了,怀疑之前的qcow2 文件作为一个普通文件存在到无分区的备份目录了;验证是否是该问题,将当前的磁盘分区挂载注释掉(屏蔽掉/etc/fstab文件中相关挂载配置),重启设备
4、重启后再次执行根目录磁盘占用,可以看到确实 nt_disk 下有200多G的文件,并且nt_disk 是一个普通目录
5、删除nt_disk 目录及其下的文件,回复磁盘挂载信息(将/etc/fstab 下屏蔽的配置恢复),重启设备后,可以看到,操作系统分区 占用正常了,再次给虚机挂载磁盘后可以正常启动了
扩展思考
1、在分析的过程中看到虚机系统所属qcow2的文件放在了/var/lib/libvirt 目录下, 该文件随着 虚机的使用会慢慢的变大,目前已经达到了200多G,后续既有可能再次增大导致操作系统不可用,所以kvm 虚机映像文件 推荐 如下使用单独的分区进行存放