当前位置: 首页 > news >正文

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

  1. 关闭你的 Ubuntu 虚拟机。

  2. 在 VMware 里右键你的虚拟机 → 设置

  3. 选择 CD/DVD (SATA)使用 ISO 映像文件 → 选择刚下载的 Boot Repair ISO。

  4. 勾选 启动时连接(Connect at power on)

  5. 保存设置。

3. 启动虚拟机进入 Boot Repair

  1. 启动虚拟机时按 Esc/F2/F12(视 VMware 版本)进入启动菜单。

  2. 选择 CD/DVD 启动。

  3. 系统会进入一个类似 Ubuntu Live 的界面(蓝底/桌面环境)。

  4. 等待加载完成,桌面上会直接弹出 Boot Repair 程序窗口。

4. 使用 Boot Repair 修复

  1. 在 Boot Repair 界面选择 Recommended repair(推荐修复)

  2. 它会自动:

    • 检测所有磁盘和分区

    • 重建 GRUB

    • 修复 initramfs(如果需要)

    • 修正 EFI/MBR 引导信息

  3. 等待执行完成(过程可能需要联网下载一些包,所以建议 Live 环境先确认网络可用)。

  4. 修复完成后,它会显示一段提示和日志(如果修复失败会给出命令行方案)。

报错问题点

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 -y

5、如果 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.listgrub-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 系统用

    如果看到 failedinactive,说明图形界面没起来。

    3. 尝试重启图形界面

    sudo systemctl restart gdm3

    如果能恢复到桌面,说明是临时错误。

    4. 重新安装/修复显示管理器

    假如重启失败:

    sudo apt update
    sudo apt install --reinstall gdm3
    sudo dpkg-reconfigure gdm3

    5. 检查显卡驱动

    可能是 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

    http://www.dtcms.com/a/327885.html

    相关文章:

  • 西安国际数字科创产业园:政策赋能筑长安数字产业集群
  • Linux学习-软件编程(标准IO)
  • 【ROS2】ROS2 基础学习教程 以lerobot-so100为例
  • specCPU2017在麒麟系统的简单测试
  • VisionPro——1.VP与C#联合
  • 前端/在vscode中创建Vue3项目
  • 【实时Linux实战系列】实时环境监测系统架构设计
  • 多奥电梯智能化解决方案的深度解读与结构化总结,内容涵盖系统架构、功能模块、应用场景与社会价值四大维度,力求全面展示该方案的技术先进性与应用前景。
  • HTTPS服务
  • 重构与性能的平衡术:先优化结构,再优化速度
  • 机器学习—— TF-IDF文本特征提取评估权重 + Jieba 库进行分词(以《红楼梦》为例)
  • A1-MPLS-LDP配置
  • 【MongoDB】简单理解聚合操作,案例解析
  • MongoDB分析insert源代码
  • Android init.rc详解
  • 【Linux】init和bash的区别
  • CentOS 7.9 升级 GLibc 2.34
  • secureCRT ymodem协议连续传输文件速率下降
  • C++Linux八股
  • 机器学习 [白板推导](十)[马尔可夫链蒙特卡洛法]
  • 机试备考笔记11/31
  • Elasticsearch JS 自定义 ConnectionPool / Connection / Serializer、敏感信息脱敏与 v8 平滑迁移
  • 数据结构——栈和队列2
  • JAiRouter 0.2.1 更新啦:内存优化 + 配置合并 + IP 限流增强,运维体验再升级
  • TCP/IP、socket、http
  • 5分钟精通 useMemo
  • Ubuntu-初始化环境
  • Kafka的一条消息的写入和读取过程原理介绍
  • SQL脚本--捞json数据
  • 【SpringBoot】08 容器功能 - SpringBoot底层注解汇总大全