背景:
五一回来,公司调试间一台设备重新上电后,已经创建的部分kvm节点无法正常启动,尝试手动virsh start节点时提示“unsupported configuration: Unable to find security driver for label selinux”
原因:
从网上一顿搜索基本都有提到节点的xml中配置了seclabel的选项,此选项有用到selinux,而selinux被关闭,所以节点无法启动。如下图:
但困惑的是:1、公司内环境,节点在创建的时候,并没有配置这个选项;2、宿主机环境在部署之初就已将/etc/selinux/config中的"SELINUX"设为disabled,并且执行了"setenforce 0"的命令,那么为什么还会出现前述情况呢?
首先,针对第一个问题,查阅libvirt官方domain xml描述文档,针对seclabel的配置,如果创建的时候没有指明,那么会给到一个默认的“none”或者“dynamic”。针对第二个问题,则是对setenforce的使用有误解,之前一直以为执行“setenforce 0”实现的是不重启的前提下将selinux改为disabled,实际上次命令只能将selinux改为permissive的状态(宽容模式),如果要真正改为disabled状态,只能先改配置,再重启系统。
针对本文提到的问题现象,最开始安装系统的时候只执行了"setenforce 0"的操作,后续并未重启系统,然后就创建了kvm节点,部分节点在运行时记录了selinux的状态,在系统重启后,当selinux真正变为disbabled时,因对应的节点需要使用selinux,就导致无法启动了。
解决:
1、可以virsh edit删除seclabel相关的配置;2、在系统安装阶段将selinux改为disabled后直接重启系统使其生效;3、还可以修改/etc/libvirt/qemu.conf的配置,将security_driver的值改为none,即禁用security_driver,然后systemctl restart libvirtd即可(只对新创建的节点有效,已出故障的节点,依然需要手动删除seclabel配置节);