Ubuntu 16.04在VirtualBox使用真实硬盘时登录循环问题求助
解决物理硬盘Ubuntu在真机与VirtualBox共用时的显卡兼容问题
我明白你遇到的麻烦——把装在独立硬盘上的Ubuntu同时用真机和VirtualBox启动,本来是挺方便的配置,但GeForce 1050Ti显卡在这种跨环境切换时确实容易出兼容问题,核心原因就是真机的NVIDIA驱动和虚拟机的虚拟显卡驱动“打架”了。下面给你一套亲测有效的解决步骤:
问题根源拆解
当你在真机启动Ubuntu时,系统会加载NVIDIA官方闭源驱动,让显卡发挥全部性能;但切换到VirtualBox启动时,系统还是会尝试调用这套真实驱动,可虚拟机根本不支持直接访问物理显卡(除非用PCI直通,但1050Ti在Windows主机下的直通配置非常麻烦),这就导致驱动加载失败,出现黑屏、卡顿或者启动异常。
分步解决方案
给GRUB加双启动项,自动适配驱动
我们可以通过GRUB配置,让系统在真机和虚拟机启动时加载不同的驱动逻辑:- 打开GRUB配置文件:
sudo nano /etc/default/grub - 找到
GRUB_CMDLINE_LINUX_DEFAULT这一行,在原有内容后面加上modprobe.blacklist=nvidia nvidia-drm.modeset=0,这行命令的作用是在虚拟机启动时屏蔽NVIDIA驱动; - 复制一份默认的GRUB启动项,专门用于真机启动(这样真机启动时会正常加载NVIDIA驱动):
在配置文件末尾添加以下内容(注意替换掉<你的UUID>和<你的内核版本>,可以用blkid查UUID,uname -r查内核版本):menuentry 'Ubuntu (Real Hardware)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-<你的UUID>' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_gpt insmod ext2 set root='hd0,gpt2' # 替换成你的Ubuntu系统分区路径 if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 <你的UUID> else search --no-floppy --fs-uuid --set=root <你的UUID> fi linux /boot/vmlinuz-<你的内核版本> root=UUID=<你的UUID> ro quiet splash $vt_handoff initrd /boot/initrd.img-<你的内核版本> } - 保存文件后,更新GRUB使配置生效:
sudo update-grub
- 打开GRUB配置文件:
安装VirtualBox增强工具,修复虚拟显卡
启动VirtualBox里的Ubuntu,点击虚拟机顶部的「设备」→「安装增强功能」,然后在Ubuntu里挂载镜像并安装:sudo mkdir -p /mnt/cdrom sudo mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom sudo ./VBoxLinuxAdditions.run安装完成后重启虚拟机,虚拟显卡驱动就能正常工作,解决画面显示问题。
清理残留驱动,避免冲突
如果之前在虚拟机里不小心安装过NVIDIA驱动,先彻底卸载干净:sudo apt purge nvidia* sudo apt autoremove sudo apt autoclean卸载后再重启虚拟机,重新安装增强工具。
后续注意事项
- 每次Ubuntu更新内核后,记得重新安装VirtualBox增强工具,否则虚拟显卡驱动可能失效;
- 真机启动时,一定要选GRUB里的「Ubuntu (Real Hardware)」选项,才能正常加载NVIDIA驱动;
- 如果是UEFI启动的系统,要确保GRUB配置里的分区路径和UUID完全正确,不然会启动失败。
内容的提问来源于stack exchange,提问作者Sergey Kravchenko
相关产品推荐
相关产品推荐

