Ubuntu虚拟机启动时snapd管理的AppArmor配置加载失败无法启动怎么修复
优先提取虚拟机内重要数据(避免操作失误丢失数据)
- 关闭当前崩溃的虚拟机,在VMWare Workstation的对应虚拟机设置页,找到存储选项,将该虚拟机的虚拟磁盘文件(.vmdk后缀)挂载到另一台正常运行的Linux虚拟机上(可临时新建一个轻量Ubuntu虚拟机,基础配置即可)
- 挂载完成后在正常虚拟机内执行
lsblk找到新增的磁盘设备,一般为/dev/sdb,对应原虚拟机的系统分区为/dev/sdb5(和报错信息里的sda5对应) - 执行挂载命令:
mount /dev/sdb5 /mnt,之后即可在/mnt目录下读取原虚拟机内的所有数据,先把重要文件拷贝到宿主机或其他存储介质完成备份后,再进行系统修复操作。
系统修复方案
- 重启原虚拟机,在VMWare的BIOS自检界面快速按住Shift键,进入GRUB引导菜单
- 找到日常使用的内核引导项,按
e进入编辑模式,找到以linux开头的行,在行尾添加init=/bin/bash,按下Ctrl+X启动进入单用户模式 - 进入单用户模式后先将根分区重新挂载为可写:
mount -o remount,rw / - 临时禁用报错的相关服务验证启动逻辑:执行
systemctl disable apparmor、systemctl disable snapd.apparmor - 解决SMBus报错:执行
echo "blacklist i2c_piix4" >> /etc/modprobe.d/blacklist.conf,禁用SMBus相关内核模块 - 执行
exec /sbin/init继续正常启动流程,验证是否可以正常进入系统 - 如果仍然启动崩溃,回到单用户模式执行
apt purge snapd卸载snapd服务,Ubuntu 20.04基础运行不依赖snapd,后续可按需重装 - 可同时执行
fsck /dev/sda5 -y修复可能存在的分区文件系统错误 - 修复完成正常进入系统后,若需要使用AppArmor可执行
systemctl enable --now apparmor重新启用服务
内容的提问来源于stack exchange,提问作者Milan Lakhani
相关产品推荐
相关产品推荐

