vmware虚拟机Ubuntu系统奔溃修复
一、前言
最近不小心误操作了,将ubuntu的虚拟机搞奔溃了,这里记录一下奔溃后修复的流程。
二、引导启动
1、这里面首先需要通过ISO镜像系统引导进入系统,如下图,选择ISO映像文件(ISO镜像文件的选择需要和系统版本一致),勾选启动时连接
2、然后运行虚拟机按F2进入如下界面,将CD-ROM Driver选项移动到最上面。然后F10保存退出后加载启动。
3、进去grub引导页面,选在 try or install ubuntu 页面,然后就会进入iso即时的系统。
三、手动恢复LIVE系统
1、找到原系统分区
打开终端,输入命令 lsblk -f 你会看到类似:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 xxxxx-xxxx
├─sda2 swap xxxxx-xxxx
└─sda5 ext4 xxxxx-xxxx
一般你的系统盘(包含/home
)会是 ext4 格式,比如/dev/sda5
。
2、挂载系统分区
假设是
/dev/sda5
:sudo mount /dev/sda5 /mnt
for i in /dev /dev/pts /proc /sys /run; do sudo mount --bind $i /mnt$i; done
sudo cp /etc/resolv.conf /mnt/etc/ # 保证 chroot 内可联网(如需 apt)
sudo chroot /mnt /bin/bash -l
此时/mnt
就是你原系统的文件系统。
进入看看:ls /mnt/home
如果你只是想拷贝数据的话就可以在挂载目录上直接将原始文件拷贝出来就行了。
3、chroot进入系统(这个是针对系统一开始是BIOS方式引导启动的)
确认 /boot 和内核
ls -l /boot
ls -l /boot/grub || echo "no /boot/grub"如果你看不到
vmlinuz-*
或initrd.img-*
,需要重建 initramfs 或重新安装内核包在 chroot 里修复 APT / dpkg(若有必要)
apt-get update || true
dpkg --configure -a || true
apt-get install -f -y || true彻底安装 grub-pc 并写入 MBR
# 重新安装 grub-pc 包(BIOS/MBR 版本)
apt-get install --reinstall grub-pc -y
# 安装到磁盘 MBR(注意:不要加分区号)
grub-install --recheck /dev/sda# 生成 grub 配置文件
update-grub正常应无错误并且
update-grub
会发现/boot/vmlinuz-...
并生成 grub 配置。如果你在 chroot 里需要重装内核包(当 /boot 缺内核)
apt update
apt install --reinstall linux-image-generic -y
update-initramfs -u -k all
update-grub如果
apt
报网络错误,请确认resolv.conf
已复制或 Live 的网络可用退出 chroot 并安全卸载
exit
回到 Live 环境后umount目录
关闭 Live,移除 ISO,重启从硬盘启动
在 VMware 中取消挂载 ISO(CD/DVD)或取消 “Connect at power on”;
启动 VM。
四、工具修复系统
这个工具主要针对与系统本身使用UEFI方式启动的,如下图,请注意自己虚拟机的启动方式
VMware 使用 Boot Repair ISO 修复启动流程
1. 下载 Boot Repair ISO
打开官方链接(SourceForge):
https://sourceforge.net/projects/boot-repair-cd/files/latest/download下载完成后,你会得到一个
boot-repair-disk-XX.iso
文件。
2. 在 VMware 挂载 Boot Repair ISO
关闭你的 Ubuntu 虚拟机。
在 VMware 里右键你的虚拟机 → 设置。
选择 CD/DVD (SATA) → 使用 ISO 映像文件 → 选择刚下载的 Boot Repair ISO。
勾选 启动时连接(Connect at power on)。
保存设置。
3. 启动虚拟机进入 Boot Repair
启动虚拟机时按 Esc/F2/F12(视 VMware 版本)进入启动菜单。
选择 CD/DVD 启动。
系统会进入一个类似 Ubuntu Live 的界面(蓝底/桌面环境)。
等待加载完成,桌面上会直接弹出 Boot Repair 程序窗口。
4. 使用 Boot Repair 修复
在 Boot Repair 界面选择 Recommended repair(推荐修复)。
它会自动:
检测所有磁盘和分区
重建 GRUB
修复 initramfs(如果需要)
修正 EFI/MBR 引导信息
等待执行完成(过程可能需要联网下载一些包,所以建议 Live 环境先确认网络可用)。
修复完成后,它会显示一段提示和日志(如果修复失败会给出命令行方案)。
报错问题点
1、提示下面的情况就证明你的系统启动方式是BIOS启动的。
2、下面提示的警告提示需要进入奔溃的系统(即chroot),手动去执行它提供的命令
执行命令可能会遇到如下错误:
apt-get purge --allow-remove-essential -y grub-com* 报错: After this operation, 18.9 MB disk space will be freed.dpkg:unrecoverable fatal error, aborting:files list file for package 'locales' is missing final.newline E: Sub-process /usr/bin/dpkg returned an error code (2)
意思是 dpkg 数据库损坏了(包
locales
的文件列表缺失结尾换行),所以 apt-get / dpkg 任何操作都会直接崩掉。
这种情况如果不先修好 dpkg 数据库,后面不管是 purge GRUB 还是 reinstall GRUB 都会失败。解决方法:
1、进入 chroot(如果还没进的话)
sudo chroot "/mnt/boot-sav/sda5"
2、修复 dpkg 数据库
cd /var/lib/dpkg/info
3、找到出错的包(
locales
),先删除损坏的.list
文件:mv locales.list locales.list.bad
4、重新生成 locales 包的文件列表(不一定能完全恢复,但能让 dpkg 正常工作)
dpkg --configure -a
apt-get update
apt-get install --reinstall locales -y5、如果 apt-get 还是因为依赖问题跑不起来,可以先:
apt-get install --fix-broken -y
6、确认 dpkg 恢复正常,如果输出为空,说明修好了。
dpkg --audit
7、继续之前的 purge grub 命令
执行apt-get purge --allow-remove-essential -y grub-com*却开始报错了,报错部分信息: Reading package lists...DoneBuilding dependency treeReading state information... Done E:Unable to locate package grub-common.conffiles E:Couldn't find any package by glob 'grub-common.conffiles' E:Couldn't find any package by regex 'grub-common.conffiles E:Unable to locate package grub-common.list E:Couldn't find any package by regex 'grub-common.list E:Unable to locate package grub-common.md5sums E:Couldn't find any package by glob 'grub-common.md5sums' E:Couldn't find any package by regex 'grub-common.md5sums
错误是因为执行
apt-get purge --allow-remove-essential -y grub-com*
的匹配模式(grub-com*
)被 shell 展开 成了很多文件名(比如grub-common.list
、grub-common.md5sums
等),APT 误以为这些是包名,就提示找不到。这是一个典型的 通配符被 shell 提前展开 的问题
在命令里用引号或者加反斜杠防止 shell 展开,确保通配符传给 apt 而不是被文件系统匹配:
apt-get purge --allow-remove-essential -y 'grub-com*'
或者
apt-get purge --allow-remove-essential -y grub-com\*
五、黑屏其他问题
有些情况是系统内核加载了,但是屏幕却一直黑屏卡在光标处,这里可能是另一个原因:
如果内核加载完成后,Xorg 或 GDM/LightDM 崩溃,就会黑屏。
常见于 NVIDIA / AMD 驱动损坏或
/etc/X11/xorg.conf
出错。可以测试启动到纯文本模式(进入Live 环境 chroot):
执行命令:
systemctl set-default multi-user.target
exit然后重启,如果能进 TTY(Ctrl+Alt+F2),说明是图形界面的问题。
1. 登录
输入你平时的用户名和密码(输入密码时屏幕不会显示,但实际在录入)。
Ubuntu 20.04.6 LTS ubuntu tty1
ubuntu login: your_username
Password: ********2. 确认显示管理器状态
在 TTY 中执行:
systemctl status gdm3 # 如果你用 GNOME(默认)
systemctl status lightdm # 如果你用 LightDM
systemctl status sddm # KDE 系统用如果看到 failed 或 inactive,说明图形界面没起来。
3. 尝试重启图形界面
sudo systemctl restart gdm3
如果能恢复到桌面,说明是临时错误。
4. 重新安装/修复显示管理器
假如重启失败:
sudo apt update
sudo apt install --reinstall gdm3
sudo dpkg-reconfigure gdm35. 检查显卡驱动
可能是 NVIDIA 驱动损坏(特别是虚拟机有 3D 加速时)。
lspci | grep -i vga
如果是 NVIDIA:sudo apt remove --purge nvidia*
sudo apt install --reinstall xserver-xorg-video-nouveau
如果是 Intel/AMD,重新装开源驱动即可:sudo apt install --reinstall xserver-xorg-video-intel
sudo apt install --reinstall xserver-xorg-video-amdgpu
6. 重启到图形模式sudo systemctl set-default graphical.target
sudo reboot