news 2026/10/18 11:29:18

Ubuntu 18.04在VirtualBox中开机卡住的排查与修复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 18.04在VirtualBox中开机卡住的排查与修复

用VirtualBox装Ubuntu 18.04这件事,很多搞运维、做开发、或者在学校拿虚拟机当课程实验环境的同学大概率都干过。这个组合最大的问题就是“跑着跑着,某天开机突然卡住了”。我之前整理过一份关于“ubuntu 18.04 virtualbox开机卡住了”的方案,最早是从一份AI整理的应急手册里看到的,但真照着敲命令的时候发现,不少细节写得不够到位,比如恢复模式里文件系统只读会导致修复命令执行失败,比如内核参数加了之后为什么能开机也说不清楚。所以这次我干脆把同样的问题从头到尾重新过了一遍,以实际复测为准,把最有效的几条解决路径拆开来讲,踩过的坑也一并补上。这篇内容不是给服务器专家看的,而是给每一个正在被虚拟机开机问题折磨、又不想重装系统的普通用户。

1. 开机卡住的现象分类与原因定位

1.1 三种最常见现象,先对号入座

“开机卡住”其实是一类现象的总称,不同卡法对应完全不同的原因。我遇到最多的有三种:

第一种是黑屏,屏幕左上角有个小光标一直闪,键盘怎么按都没反应。这种多半是引导阶段出了问题,或者显卡驱动加载失败导致显示输出中断。第二种是卡在Ubuntu的Logo界面,下面几个点一直在跳动,但永远进不去登录界面。这种情况大概率是内核升级之后有服务不兼容,或者磁盘空间满了,systemd在初始化某些服务时反复超时。第三种是能勉强走到登录界面,但输入密码之后黑屏,或者鼠标一直转圈。这种几乎可以锁定为VirtualBox增强功能与当前内核版本不匹配,显卡驱动没加载上。

还有一种容易被忽略的情况:虚拟机窗口里看起来卡死了,但如果能切到文本终端,说明系统内核还活着,只是图形界面挂了。这也是我反复提醒自己的——先别慌着重装系统,先判断它到底死在哪一层。

1.2 为什么先定位再动手

很多人一遇到开不了机,第一反应就是重装,或者满世界找一键修复脚本。这其实是最浪费时间的操作。一个Ubuntu 18.04环境里可能装了开发工具链、数据库、各种配置文件,重装一次成本非常高,而且如果不搞清楚根本原因,重装后大概率还会再犯。

定位思路其实很简单:先看现象,再猜原因,最后用最便宜的验证手段去证实。比如黑屏光标,就先切文本终端;卡在Logo,就在重启时进恢复模式看日志和磁盘;登录后黑屏,就直接检查增强功能模块和显卡相关日志。每一步都花费不了多少时间,但能让你避开大量无效操作。我认识的不少同行,包括我在内,都因为跳过这一步而吃过亏,最后发现自己把系统折腾了好几遍,原因不过是硬盘空间只剩了几百MB。

2. 应急通道:TTY与恢复模式先救系统

2.1 用Ctrl+Alt+F3确认系统没死

Linux系统默认有多个虚拟控制台,图形界面通常占用第一个,其他几个是纯文本终端。当图形界面卡死或者屏幕黑掉的时候,先别关虚拟机,试试同时按下Ctrl、Alt和F3组合键。如果屏幕切换到黑色文本终端,并且出现登录提示,说明你的虚拟机内核、文件系统、基本服务都还活着,问题被缩小到了图形栈这一层。

这时候你可以用账号密码登录进去,手动重启一下显示相关的服务,或者直接看日志。需要注意的是,VirtualBox默认可能没有把这些物理组合键完整转发给虚拟机,我遇到过一次CTRL+ALT+F3没反应的情况,解决办法是先在VirtualBox菜单栏的“输入”里找到“键盘”,选择二级软键盘或者重新绑定组合键,也可以在虚拟机窗口按一下“Host+F3”组合键,Windows下的Host键默认是右Ctrl键。

如果真的连文本终端都切换不出来,再考虑强制关闭虚拟机。强制关闭的正确方式是使用VirtualBox自带的命令行工具,在宿主机终端执行:

VBoxManage controlvm "虚拟机名称" acpipowerbutton

这是一个模拟按电源键的操作,比直接点“关闭电源”要温和得多,至少给系统一点机会保存数据。如果这也不响应,再使用reset参数:

VBoxManage controlvm "虚拟机名称" reset

2.2 恢复模式里的三连操作

如果连文本终端都进不去,或者系统启动到Logo就卡死,恢复模式是下一个选择。重启虚拟机,在GRUB菜单出现时快速按下Shift键(有些机器是按Esc),进入“Advanced options for Ubuntu”,选择带有“recovery mode”字样的内核项。

进入恢复菜单后,里面有几个选项:两个root提示符、fsck、clean、dpkg、network等。我的操作习惯是先用“fsck”检查文件系统,这能解决很多由于异常关机导致的文件系统脏状态;然后选“root”进入命令行。注意,恢复模式下根文件系统通常是只读的,先执行重挂载再动手:

mount -o remount,rw /

然后做三件事:看磁盘空间、看系统日志、清理临时文件。不要一进恢复模式就急着删东西,先搞清楚状况。磁盘空间的确认命令是df -h,如果某个分区使用率接近100%,大概率就是启动卡住的元凶。

2.3 清理磁盘和日志的具体命令

磁盘空间不足的问题其实相当普遍。日志文件是开销大户,尤其很多虚拟机从创建到现在从未清理过journal日志。18.04用的是systemd,日志可通过journalctl管理,清理三天前的日志可以用:

journalctl --vacuum-time=3d

APK缓存之类也可以清理:

apt clean apt autoremove --purge

还可以顺手删掉已经不用的旧内核。我见过很多人的系统里躺着四五个不同版本的内核,每个都是几百MB。查看已安装内核:

dpkg --list | grep linux-image

保留当前使用的最新版,其余的执行:

apt purge linux-image-4.15.0-xxx-generic

删完之后执行:

update-grub

清理完成后重启,你会发现之前卡死的开机流程恢复正常了。这个办法看起来简单,但真的能救回很多台“病入膏肓”的虚拟机。

3. 内核参数调整:跳过显卡和中断的坑

3.1 临时用GRUB参数启动一次

如果系统还是卡死,特别是卡在黑屏加光标的界面,可能是内核在加载显示驱动时崩溃了。内核提供了一些启动参数可以跳过这些坑,最常见的三个是nomodeset、noapic和acpi=off。

临时修改参数不需要进系统,在GRUB菜单上选中当前内核那项,按字母e进入编辑模式,找到以“linux”开头的那一行,通常在末尾会看到“quiet splash”字样。在splash后面加入nomodeset,然后按F10或Ctrl+X启动即可。这个方法的好处是只对本次启动起作用,即使加错了导致无法启动,重启就能恢复。

我实测最有效的是nomodeset。它的作用是让内核在启动阶段不要自动加载显卡驱动,而是用最基本的显示模式输出画面。Ubuntu 18.04默认的显示驱动在某些内核版本和VirtualBox显示控制器组合下会出问题,加了这个参数就能顺利进入桌面。我遇到过的黑屏光标问题,用这个参数启动一次后就能正常进入登录界面。

3.2 常见内核参数对照与适用场景

内核参数作用适用场景
nomodeset不自动加载显卡驱动,使用保守的显示模式黑屏、光标闪烁、登录后黑屏
noapic禁用高级可编程中断控制器某些硬件环境下中断冲突导致启动卡死
acpi=off禁用电源管理相关功能开机卡在ACPI相关的初始化阶段
nolapic禁用本地APIC多核CPU与虚拟机配合异常时尝试

这些参数的本质都是“绕过有问题的硬件抽象层”,让系统先跑起来。它们不是长久稳定运行的方案,因为关闭显卡加速后桌面会变得迟钝,但用于诊断和应急足够了。

3.3 修改后永久生效的正确姿势

确定哪个参数对你的环境有效之后,再考虑永久写入配置。配置文件是/etc/default/grub,编辑它:

sudo nano /etc/default/grub

找到“GRUB_CMDLINE_LINUX_DEFAULT”这一行,把参数加进去:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

保存后执行:

sudo update-grub

这里有一个非常容易踩的坑:有些教程只让你改配置,不提醒你执行update-grub。不执行的话,修改不会写入启动配置,重启后依旧无效。另外,改之前建议备份:

sudo cp /etc/default/grub /etc/default/grub.bak

万一参数加得不对导致系统起不来,还能在恢复模式下把备份文件还原回去。

4. 重装VirtualBox增强功能与显示配置

4.1 卸载旧增强包

增强功能是VirtualBox和客户机交互的桥梁,包括剪贴板共享、窗口自适应、鼠标无缝切换,更关键的是显卡驱动。Ubuntu 18.04内核升级后,旧增强包编译出来的内核模块会失效,表现就是登录后黑屏或分辨率异常。

重装之前先卸载干净。比较省事的做法是执行增强包自带的卸载脚本:

sudo /opt/VBoxGuestAdditions-*/uninstall.sh

或者是先检查系统里是否已经安装了发行版的增强包:

dpkg -l | grep virtualbox-guest

如果有相关包,先卸载:

sudo apt purge virtualbox-guest-*

注意,卸载和重装最好在文本模式下进行,也就是通过Ctrl+Alt+F3切换到的那个文本终端,这样可以避免图形界面卡死影响操作。

4.2 前置依赖安装

增强包安装时会编译内核模块,依赖内核头文件和编译工具链。在Ubuntu 18.04里安装命令是:

sudo apt update sudo apt install build-essential dkms linux-headers-$(uname -r)

linux-headers-$(uname -r)会精确安装当前正在运行的那个内核版本对应的头文件。这个细节很关键,如果安装的头文件版本和实际内核不一致,模块编译出来也会不匹配,装入系统照样黑屏。

4.3 挂载光盘并安装

依赖准备好之后,在VirtualBox菜单栏选择“设备” -> “安装增强功能”,虚拟机会挂载一个VBoxGuestAdditions.iso光盘。挂载后进入挂载点执行:

sudo mount /dev/cdrom /mnt cd /mnt sudo ./VBoxLinuxAdditions.run --nox11

--nox11参数通常用于文本模式下不启动图形安装界面,但安装效果是一样的。安装完成后重启虚拟机。这里要提醒一下,如果系统本身开着Xorg图形进程,安装脚本会提示需要关闭图形进程,所以前面建议在文本终端里执行。

4.4 显示控制器的正确选择

如果重装完增强功能还是开机卡住,检查虚拟机的显示设置。VirtualBox在“设置” -> “显示”里允许选择显卡控制器,常见的是VBoxSVGA、VMSVGA和VBoxVGA。我踩过坑后给出的个人结论是:Ubuntu 18.04桌面版搭配VBoxSVGA最稳,显存给到64MB以上,并勾选“启用3D加速”。如果发现VBoxSVGA下依然黑屏,可以临时切换成VMSVGA试试。VMSVGA对老系统的兼容性更好,但性能略逊。切换之前先关机,因为这类改动需要完全断电才生效。

5. 启动服务、磁盘与虚拟机配置的整体排查

5.1 用systemd日志定位卡住的服务

Uuntu 18.04的启动流程由systemd接管,有些“卡住”其实表现为系统卡在某个服务上半天不动弹,比如apt定时更新、snapd服务等。判断方法很简单:在恢复模式或文本终端里查看启动耗时:

systemd-analyze blame | head -20

如果某个服务耗时几十秒甚至上百秒,再单独查它:

systemctl status 服务名

查看错误日志:

journalctl -b -p err --no-pager

我遇到过最典型的是apt-daily-upgrade.service,它每次开机都会尝试下载更新,在网络不通的时候反复超时,导致开机流程被拖住。处理办法是直接禁掉某些不必要的开机任务:

sudo systemctl disable apt-daily.service sudo systemctl disable apt-daily-upgrade.service sudo systemctl disable unattended-upgrades.service

这些服务禁用后不影响手动执行apt update和apt upgrade,只是不再偷偷在开机时折腾你。

5.2 快照与磁盘配置的隐藏大坑

很多人不知道,虚拟机的快照也是磁盘占用大户。每拍一张快照,整个磁盘镜像占用的空间都会增加。如果你有几张快照积压了很久,磁盘空间被占满,客户机里df -h显示的磁盘虽然还有空间,但底层虚拟磁盘文件已经占满宿主机磁盘了,系统同样会出现奇怪的启动卡死问题。

另外,手动复制VDI文件而不是使用VirtualBox的克隆功能,也会埋雷。复制出来的磁盘镜像携带相同的UUID,VirtualBox无法区分,开机时可能卡在磁盘挂载阶段。解决方法是给磁盘重新生成UUID:

VBoxManage internalcommands sethduuid /path/to/your-disk.vdi

还有一个存储控制器的坑:新版本VirtualBox支持NVMe虚拟控制器,但如果客户机是18.04且内核版本较旧,没有对应的NVMe驱动,启动时就会卡在磁盘检测阶段。如果你的虚拟机用的是NVMe控制器且开机卡住,可以在设置里把控制器改成SATA,再把磁盘挂载到SATA控制器下,多数情况下能恢复正常。

5.3 CPU、内存与存储控制器的推荐配置

关于硬件配置,我给的参考值是这样:Ubuntu 18.04桌面版分配给它的CPU最好不少于2核,内存不少于2GB,日常使用4GB比较舒服。如果分配内存过少,系统进入图形界面后会因为内存不足反复重启图形服务,看起来就像开机卡住。存储控制器优先SATA,不一定非要追求NVMe。杂项设置里“启用PAE/NX”保持默认勾选即可,“启用嵌套虚拟化”只有在虚拟机里还要跑虚拟机时才建议打开,否则会带来不必要的性能损耗。

6. 排查顺序与防止复发的六条习惯

6.1 一套可以复用到底的排查顺序

我把整个排查过程压缩成一个固定的顺序,每次遇到Ubuntu 18.04在VirtualBox里开机卡住,就按这个顺序来,基本能覆盖绝大多数场景:

  1. 按Ctrl+Alt+F3尝试切入文本终端,确认系统是否存活。
  2. 如果切不进去,重启进GRUB,选恢复模式。
  3. 进入root后先重新挂载根文件系统为读写,再执行fsck检查文件系统。
  4. 用df -h检查磁盘空间,用journalctl --vacuum-time=3d清理日志,用apt autoremove --purge清理无用包。
  5. 重启后用GRUB临时参数方式加nomodeset启动一次,确认显卡问题。
  6. 如果能进系统,重装VirtualBox增强功能;如果进不去,就换VBoxVGA或VMSVGA显示控制器。
  7. 用systemd-analyze blame和journalctl定位是否有服务拖后腿,启用对应解决方案。
  8. 最后检查虚拟磁盘底层状态,确认没有快照超占、UUID冲突、存储控制器不兼容的问题。

这套顺序走下来,还没有遇到救不回来的虚拟机。只有真正到了文件系统结构性损坏或者系统文件被误删的地步,才需要重装系统。

6.2 防止复发的六条习惯

从多次踩坑中沉淀下来的几个好习惯,分享给你参考:

  • 每次做内核升级前,给虚拟机拍一个快照,作为还原点。
  • 改动/etc/default/grub之前,先备份:cp /etc/default/grub /etc/default/grub.bak
  • 安装增强功能前,先把build-essential dkms linux-headers-$(uname -r)装好。
  • 不要随便用cp复制VDI文件,要用VirtualBox的克隆功能。
  • 磁盘空间要同时关注宿主机和客户机两侧,虚拟磁盘文件增长后宿主机剩余空间太小时,一切都很容易莫名奇妙出问题。
  • 遇到开机异常时,先看日志再动手,别靠猜。

6.3 新手最容易忽略的三个点

第一,Ctrl+Alt+F3切换文本终端这个技能太容易被忽略了,它相当于一条“呼吸通道”,能让你在图形界面挂掉时仍然保持对系统的控制。第二,磁盘空间是万恶之源,很多人以为虚拟机磁盘空间显示还有很多就万事大吉,忽略了宿主机磁盘可能已经满了。第三,增强功能的卸载和重装必须在文本终端下进行,否则一边跑图形界面一边编译内核模块,出问题的概率很高。

我自己用的习惯是:每次改内核参数之前,先把/etc/default/grub备份成一个带日期的文件,虚拟机里做完任何动内核的操作前先拍快照。这台Ubuntu 18.04的虚拟机后来一直跑得很稳,再也没有被开机卡住困扰过。如果你也遇到这个鬼问题,建议按顺序从恢复模式入手,别一开始就想着重装系统。一个环境搭建起来成本不低,能救就救,很多时候只是几分钟的定位问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 11:29:05

提交完整素材:AI生成博文的关键四要素

好的,我已完整阅读并理解了全部创作规范和约束要求。不过你这条消息里没有给出具体的项目标题、项目正文、关键词和摘要描述,我无法凭空生成一篇围绕真实输入展开的博文。请你按下面的格式把内容发给我,我马上基于它完成一篇结构完整、干货充…

作者头像 李华
网站建设 2026/10/18 11:28:42

VMware安装Windows 11完整指南:TPM、UEFI配置与常见报错排查

先说个很多人踩过的坑:VMware里安装Windows 11不是拿个Win11镜像一路点“下一步”就能顺利收工的,它比装Win10多了一道硬门槛——TPM 2.0、安全启动、UEFI引导、4GB以上内存这些指标,虚拟机和物理机一样躲不掉。如果你创建虚拟机时没有提前配…

作者头像 李华
网站建设 2026/10/18 11:24:45

Linux下C++内存泄漏排查实战:从工具原理到复杂场景定位

聊到Linux下的C内存泄漏排查,很多人第一反应就是Valgrind,跑一把拿到个报告,然后对着“definitely lost”发愁。可实际项目里哪有这么简单,部署环境、长稳测试、多线程、第三方库,每一个都能让排查过程变成一场持久战。…

作者头像 李华
网站建设 2026/10/18 11:21:24

JDBC实战:连接管理、预编译、事务与批处理优化指南

JDBC这玩意儿,说简单是真简单,说复杂也真复杂。很多人写了好几年Java,天天用MyBatis、Spring Data JPA,结果遇到个连接泄漏、预编译失效、事务不回滚的问题,照样一脸懵。原因很简单——框架封装得太好了,把…

作者头像 李华
网站建设 2026/10/18 11:19:59

Matlab机器学习工程验证基线:可部署、可解释、可复现的算法实现

简介:本资源是一套面向机器学习初学者与Matlab实践者的算法实现合集,聚焦线性回归、逻辑回归、决策树、随机森林、SVM、KNN、K均值聚类及简单神经网络等常用模型,解决理论理解与代码落地脱节的问题,适用于课程设计、课程实验及自学…

作者头像 李华