Dell G15装Ubuntu双系统:固件开关、引导修复与硬件适配
1. 一台游戏本装双系统的真实处境
很多人第一次在新款游戏本上装双系统,都是从"插上U盘、一路下一步"开始的,然后在一个谁也没预料到的位置卡住——引导项里找不到U盘、装完重启直接进Windows、或者卡在厂商logo一动不动。这篇记录的是我经手的一台Dell G15上装Ubuntu双系统的完整过程,从准备阶段的踩空,到分区时的犹豫,再到引导、显卡驱动、无线网卡、声卡、休眠等一系列"装完了但用不了"的问题,逐条拆开讲清楚原因和解决办法。
先说清楚这篇东西适合谁看:手上是近几年的Dell G15(或者同代采用类似固件策略的整机),打算保留原厂Windows、再加一个Linux做开发、编译、跑容器或纯粹想学Linux的;也适合那些已经装完但被"开机直接进Windows""外接屏不亮""无线网卡搜不到信号"折磨过的人。前面那种是安装阶段的坑,后面那种是装完之后的坑,两类问题的排查思路完全不同,我会分开讲。
需要提前说一句立场:Dell G15这类机型的问题,绝大多数不是Ubuntu的锅,也不是你操作失误,而是厂商在固件层做得越来越"聪明"——快速启动、RAID模式、Secure Boot、Intel RST、Modern Standby这些机制原本是为了让Windows体验更好,但它们和"多系统共存"这个诉求天然有摩擦。理解了这层,你就不会在每次失败时怀疑自己手残,而是知道该去哪个开关上动手。
另外一个心理准备:双系统这件事,没有"一次成功"的保证,只有"提前备份+分步验证+知道回滚路径"。我在下面每个环节都会写清楚"如果这一步走错了,怎么退回上一个状态",这比记住十个命令更值钱。
2. 装之前的三个隐形拦路虎:固件层的开关
2.1 存储控制器模式:RST与AHCI的取舍
第一个也是最容易被忽略的坑,是硬盘控制器的工作模式。近几年出厂预装Windows的整机,默认常常是Intel RST(RAID On)模式,配套装了Intel快速存储驱动。这个模式对Windows单系统没影响,但对Linux安装介质来说,它看到的是一块"被RAID控制器接管"的盘,分区表和磁盘识别都可能出问题,最典型的表现是:安装程序能启动,但到分区那一步看不到硬盘,或者只看到一个巨大且无法操作的设备。
正确的做法是进固件设置(开机按F2)把SATA Operation从RAID/RST改成AHCI。但这里有个很多人踩过的连环坑:如果Windows是在RST模式下装的,直接切到AHCI,Windows会蓝屏进不去(报INACCESSIBLE_BOOT_DEVICE)。所以切换必须按顺序来:先在Windows里用管理员权限打开终端,执行一条命令让系统在下次启动时加载AHCI驱动,然后重启进固件改模式,再进系统确认没问题,最后才去装Linux。
# 以管理员身份运行,让Windows预先加载AHCI驱动 bcdedit /set {current} safeboot minimal # 重启,进F2把SATA模式改为AHCI,保存退出 # 进入安全模式后,再执行: bcdedit /deletevalue {current} safeboot # 再次重启,正常进入Windows,确认无异常这套流程的逻辑很简单:安全模式只加载最小驱动集,此时切模式不会因为缺少驱动而蓝屏;进入安全模式后系统会重新枚举存储控制器并装上AHCI驱动;最后清掉safeboot标记,正常启动就不会再蓝屏。我实测下来这一步是必须的,跳过的话大概率要在恢复环境里折腾半小时以上。
提示:改完模式如果Windows提示需要重启多次,别急着打断,让它自己走完。中途强行断电有可能触发BitLocker恢复密钥输入,那个密钥如果你没备份过,会很麻烦。
2.2 快速启动与休眠:让"关机"真的关机
第二个隐形开关是Windows的快速启动(Fast Startup)。这个功能本质上是"关机时把内核会话休眠到硬盘",所以你以为的关机,物理上硬盘仍处于一种半挂起状态,文件系统带着未完全落盘的元数据。Linux安装程序挂载这种NTFS分区时,可能拒绝写入或报"分区不干净",更糟的情况是装完之后Windows的文件系统出问题。
关掉它的路径在控制面板的电源选项里,找到"选择电源按钮的功能",点"更改当前不可用的设置",取消勾选"启用快速启动"。命令行也可以:
powercfg /h off这条命令同时关闭了休眠功能,顺手把hiberfil.sys删掉,腾出几个G空间——这在后面分区的时候会感谢自己。
同样的道理,装之前务必在Windows里做一次完整关机而不是重启。重启在某些固件实现里不会真正释放设备,而关机(在关闭快速启动之后)才会。这个细节听起来很玄,但我在好几台机器上验证过:同样的U盘,重启进F12能看到,关机再开机进F12反而更稳。
2.3 Secure Boot:不是必须关,但要知道它在拦什么
关于Secure Boot,网上说法两极分化。我的经验是:Ubuntu近几年的版本在Secure Boot开启状态下是可以正常安装和启动的,因为它带了签名的引导组件(shim)。但问题出在第三方内核模块——显卡驱动、无线网卡驱动、VirtualBox的vboxdrv这些,只要没被签名,加载时就会被拒绝,表现是驱动装了但不生效,或者开机弹出"Kernel module verification failed"。
所以我的建议是分阶段处理:安装阶段可以先保留Secure Boot开启,把系统装完、确认能正常启动;等要装闭源驱动的时候,再回固件里关掉它,或者配置MOK(Machine Owner Key)给模块签名。前者省事,后者更"正规"。如果这台机器只自己用,关掉是最快的路径,但要在脑子里记一笔:以后任何需要加载自定义内核模块的操作,都要先确认Secure Boot的状态。
| 固件开关 | 默认状态 | 对双系统的影响 | 建议 |
|---|---|---|---|
| SATA Operation | RAID/RST | Linux看不到硬盘 | 改为AHCI(需先处理Windows驱动) |
| Fast Startup | 开启 | NTFS分区不干净、写入风险 | 关闭 |
| Secure Boot | 开启 | 拦截未签名内核模块 | 装机阶段可留,装驱动前关 |
| Boot List Option | UEFI | 需为UEFI模式,勿用Legacy | 保持UEFI |
2.4 安装介质本身的两个细节
U盘制作这一步看起来最没技术含量,但翻车率不低。第一,校验镜像完整性。下载完ISO之后算一遍SHA256,和官方公布的值比对,这一步花两分钟,能省掉后面"装到一半报I/O错误"的一小时。第二,写入工具的选择:在Windows上用Rufus时,分区类型选GPT、目标系统选UEFI,文件系统它会自动处理;如果用Ventoy这类多镜像方案,注意它默认的启动模式要和固件匹配。
还有一个我吃过亏的点:U盘插在前面板或者USB Hub上,某些机型在固件阶段识别不到,进安装程序后又突然出现,导致引导项和实际设备对不上。稳妥的做法是插在机身侧面的原生USB口,最好是USB 2.0口(如果有),兼容性最好。
3. 分区这一步,决定后面几天的心情
3.1 先从Windows里挤出空间,而不是在安装器里硬切
新手最常见的操作是:在Ubuntu安装器里选"与Windows共存",然后拖动滑块分配空间。这个自动方案在简单场景下能用,但它会在背后做一系列你没看到的决定——EFI分区大小、swap策略、分区顺序。一旦出问题,你很难判断是哪一步错了。
我的习惯是先在Windows的磁盘管理里压缩卷,腾出一块连续的未分配空间,然后在安装器里选"其他选项(Something else)"手动分区。这样做的好处是:空间边界清晰,Windows那边你亲手确认过没被破坏,安装器只负责在空白区域里做事,出错的概率显著下降。压缩的时候注意一点:Windows的压缩卷只能压到"不可移动文件"的位置,如果碎片多,可能压不出你想要的容量。这时候可以用系统自带的碎片整理或者第三方工具先整理,实在不行就少分一点。
给Ubuntu留多少?我的经验是至少80GB,如果要装CUDA、Docker镜像、几个IDE,120GB起步更舒服。别信"40G够用"的说法,那是在十年前。
3.2 EFI分区:不要新建,直接用现成的
这是双系统分区里最关键的一条:EFI系统分区(ESP)只应该有一个,就是Windows已经建好的那个(通常是100MB到300MB,FAT32格式,带boot/esp标记)。安装器手动分区时,把现有的EFI分区挂载为/efi(新版本Ubuntu用这个挂载点,老版本是/boot/efi),千万不要勾选格式化。
为什么不能新建第二个ESP?因为固件里的启动项本质上是指向"某个磁盘上的某个EFI分区里的某个.efi文件",两个ESP会让固件和引导管理器的行为变得不可预测——可能出现启动项重复、更新内核后新条目没写进去、甚至互相覆盖。我见过最麻烦的情况是两个ESP都在,Windows更新后把自己的引导写进了A,Linux更新写进了B,结果每次重启进哪个系统全看运气。
分区方案我一般这么排(假设腾出120GB):
| 挂载点 | 建议大小 | 类型 | 说明 |
|---|---|---|---|
| /efi | 用现有ESP | FAT32 | 不格式化,仅挂载 |
| / | 60–80GB | ext4 | 系统与软件 |
| /home | 剩余空间 | ext4 | 用户数据,重装可保留 |
| swap | 8–16GB或swapfile | swap | 内存≥16G时可用文件替代 |
关于swap,现在Ubuntu默认用swapfile而不是独立分区,灵活性更好,我倾向保留默认。如果要用休眠(hibernate),swap大小需要≥物理内存,这个后面单独说。
3.3 引导器装在哪里,这一步必须想清楚
手动分区的界面上有个"安装启动引导器的设备"下拉框,默认可能是整块磁盘(如/dev/nvme0n1)。这个选择的含义是:把GRUB写到哪里。选整块磁盘是对的,不要选某个具体分区(比如/dev/nvme0n1p5),否则会写到一个分区引导记录里,固件根本不会去看。
写完整块磁盘后,安装器会在现有的ESP里创建EFI/ubuntu/目录,并在固件的启动项列表里加一条"ubuntu"。此时固件里会有两个条目:Windows Boot Manager和ubuntu。多数情况下GRUB会成为默认,并在菜单里列出Windows——这就是我们想要的"双系统菜单"。
装完之后第一次重启,如果直接进了Windows,不要慌,这是第4节要处理的问题。
4. 装完重启却直奔Windows:引导项排查链路
4.1 先确认系统到底装没装成功
判断方法很简单:开机反复按F12调出一次性启动菜单,看列表里有没有"ubuntu"。如果有,说明系统装好了、引导文件也写了,问题只在"默认启动顺序";如果没有,说明GRUB没写进ESP,或者写到了别的地方,需要回到安装介质用chroot修复。
这两种情况处理成本差很多,所以第一步永远是区分它们,而不是急着搜"Ubuntu启动项丢失怎么修"。
4.2 有ubuntu项但默认进Windows:调顺序的三种方式
最直接的是进固件设置(F2),找到Boot Sequence,把ubuntu移到Windows Boot Manager上面。Dell的固件里这个界面有时藏得比较深,可能在"Boot Sequence"或者"UEFI Boot Path Security"附近。
第二种是在Ubuntu里用efibootmgr调整顺序,这个更精确:
# 查看所有启动项和当前顺序 efibootmgr -v # 假设 ubuntu 是 Boot0001,Windows 是 Boot0000 # 把 ubuntu 调到第一位 sudo efibootmgr -o 0001,0000 # 如果 ubuntu 条目不存在,手动创建(路径要按实际分区号调整) sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "ubuntu" -l '\EFI\ubuntu\shimx64.efi'第三种是改GRUB的默认项和超时。编辑/etc/default/grub,把GRUB_TIMEOUT从默认的0改成5或10,然后sudo update-grub。注意有些机器上GRUB_TIMEOUT=0是安装器根据"单系统"判断写进去的,不改的话你根本看不到菜单,等于没有选择权。
4.3 没有ubuntu项:用安装介质做chroot修复
这是稍微硬核一点的操作,但值得掌握,因为它的思路能复用到"GRUB损坏""内核更新后启动失败"等一堆场景。步骤是:用Ubuntu安装U盘启动,选"Try Ubuntu",联网,然后把装好的系统分区挂载起来,在chroot环境里重装GRUB。
# 1. 确认分区(假设根分区是 nvme0n1p5,ESP 是 nvme0n1p1) lsblk -f # 2. 挂载根分区 sudo mount /dev/nvme0n1p5 /mnt # 3. 挂载 EFI 分区到正确位置 sudo mount /dev/nvme0n1p1 /mnt/boot/efi # 4. 绑定必要的虚拟文件系统 for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done # 5. 切换根环境 sudo chroot /mnt # 6. 在 chroot 内重装并更新 GRUB grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu update-grub # 7. 退出并卸载 exit sudo umount -R /mnt注意:
grub-install的--efi-directory要写chroot内的路径(/boot/efi),不是/mnt/boot/efi。这一点写错的话会报"cannot find EFI directory",我第一次就栽在这。
修复完重启,F12里应该能看到ubuntu。如果还是不行,回固件里检查"Boot List Option"是否为UEFI、ESP分区是否带boot标记(用parted或gdisk看分区标志),以及ESP是否被格式化过导致Windows的引导文件也没了——那是另一种情况,需要用Windows安装盘修复。
4.4 一个常见的误判:把"进Windows"当成引导丢失
有时用户看到开机进Windows就断定"引导坏了",其实GRUB在,只是固件的启动顺序被Windows更新重置了。Windows的大版本更新有时会把自己的启动项重新置顶,这是已知行为。所以如果某次更新后突然进Windows了,先用F12确认ubuntu条目还在,在的话用efibootmgr -o改回来即可,不用重装任何东西。这个判断能省下大量时间。
5. 进得去系统了,才是麻烦的开始:硬件适配排障
5.1 显卡:混合显卡机器上的黑屏、花屏与外接屏失灵
Dell G15这类机器通常是Intel核显+NVIDIA独显的混合方案(部分型号是AMD核显+NVIDIA)。Ubuntu装完后,开源驱动nouveau会接管独显,表现可能是:开机花屏、登录后黑屏、风扇狂转、外接显示器没信号。原因是nouveau对较新的NVIDIA芯片支持不完整。
处理顺序建议这样:先能进系统(如果黑屏,在GRUB菜单按e编辑启动项,在linux那行末尾加nomodeset,临时绕过显卡驱动进桌面),再考虑装闭源驱动。装驱动有两条路:
# 路线一:用系统仓库的推荐驱动(省事) ubuntu-drivers devices sudo ubuntu-drivers autoinstall # 路线二:官方驱动包(版本更可控) # 从官网按型号下载 .run 或 .deb,注意要先禁用 nouveau我更推荐第一条,因为ubuntu-drivers会挑和你内核版本匹配的驱动,出问题也容易回滚。装完必须重启,重启后验证:
nvidia-smi # 能输出表格说明驱动在工作 glxinfo | grep "OpenGL renderer" # 确认渲染器如果装完直接黑屏进不去,说明驱动和内核不匹配,可以在GRUB里加nomodeset进系统,然后sudo apt purge掉相关包回滚。这就是为什么我说改任何东西前都要确认能回滚。
混合显卡还有一个附带问题:外接屏往往挂在独显上,如果系统默认用核显渲染,外接屏可能不亮。这时候需要确认显示管理器用的是哪种方案(PRIME的on-demand模式、还是BIOS里能直接切独显直连)。有些机型固件里有"Graphics Switching"选项,切成独显直连后外接屏就正常了,代价是续航变差。
5.2 无线网卡:搜不到信号、频繁掉线
近几年的机型常用Intel AX系列或Realtek的无线网卡。Intel的卡在较新内核上一般开箱可用;Realtek的某些型号(尤其是较早的8821、8852系列)需要额外驱动,表现是系统里根本没有Wi-Fi图标,lspci能看到设备但rfkill list里没有无线接口。
排查顺序我总结成"三看":
- 看硬件是否被识别:
lspci -nnk | grep -i net,确认驱动字段是Kernel driver in use还是Kernel modules:(后者说明没加载驱动)。 - 看是否被软/硬开关禁用:
rfkill list,如果有Soft blocked: yes,用rfkill unblock all。有些机型的飞行模式键在Linux下状态不同步,按一下反而解禁。 - 看内核日志:
dmesg | grep -i firmware,如果有firmware failed to load,说明缺固件文件,需要从linux-firmware包里补,或者手动放到/lib/firmware。
如果是需要编译的第三方驱动(比如从源码装的rtl系列驱动),注意每次内核升级后都要重新编译(dkms能自动处理)。这也是Secure Boot会影响的地方——未签名的驱动模块加载会被拒。
5.3 声卡:没有声音或只有插耳机才响
声音问题在游戏本上相当常见,原因是这类机器常用多路功放(两个扬声器各带一个amp),Linux的默认音频配置只驱动了一路。表现是:系统设置里能看到输出设备,音量条也在动,但就是没声音;或者插耳机正常、外放无声。
第一步先确认是不是"静音"之外的配置问题:
# 查看声卡与codec aplay -l cat /proc/asound/card*/codec* | grep -i codec # 用alsamixer检查是否有关键通道被静音 alsamixer如果codec信息里能看到Speaker但无声,多半是缺少针对该机型的quirk(内核里针对特定硬件组合的修正条目)。这类问题没有通用解,思路是:查该codec型号在社区里的已知方案,通常是往/etc/modprobe.d/下加一个配置文件,给snd_hda_intel传模型参数(如model=...),或者升级到更新的内核版本,因为quirk往往在新内核里才被合入。
# 示例:为声卡指定模型参数(具体值需按codec型号查证) echo "options snd-hda-intel model=generic" | sudo tee /etc/modprobe.d/audio-fix.conf sudo update-initramfs -u注意:
model=后面的值不能瞎填,填错可能导致声卡完全不工作。改之前先备份原配置,改完用dmesg | grep -i hda看有没有报错。
5.4 休眠、睡眠与Modern Standby
Windows的Modern Standby(S0ix)在Linux上的支持一直不完整。表现是:合盖之后机器没真正睡,放包里发热耗电,或者唤醒后黑屏、外设失灵。彻底解决需要固件和内核配合,实际操作里我的建议是——别指望完美休眠,把策略设简单点:合盖直接关机或者仅关屏,需要长时间离开就手动关机。
如果一定要用休眠(hibernate,把内存写盘),需要swap≥内存,且在/etc/default/grub的GRUB_CMDLINE_LINUX_DEFAULT里加resume=UUID=...指向swap分区/文件,再更新initramfs和grub。这套配置在加密分区或swapfile场景下更麻烦,收益也不高,我个人在这类游戏本上倾向跳过。
6. 让这套双系统长期可用:我踩过之后的几条习惯
6.1 时间差8小时,不是时区设置的锅
装完双系统后最常见的"小毛病"是:从Windows切到Ubuntu,系统时间差8小时(或者反过来)。原因是Windows把固件里的硬件时钟当作本地时间,Linux默认当作UTC。修法有两种,选一个就好,别两边都改:
# 方案A:让 Linux 也把硬件时钟当本地时间(和 Windows 一致) timedatectl set-local-rtc 1 --adjust-system-clock # 方案B:让 Windows 把硬件时钟当 UTC(需要改注册表,更"正确") # 管理员 PowerShell: # reg add "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f我选方案B,因为UTC是更干净的语义,而且只改一次。但如果这台机器还要给别人用、或者经常装系统,方案A更省心。
6.2 每次内核更新后,确认引导和驱动都还在
Ubuntu更新内核是常态,而内核更新会重新生成initramfs、可能触发GRUB重新配置。绝大多数时候没问题,但如果之前手动改过GRUB配置或者装过DKMS驱动,更新后偶尔会出现启动失败或驱动失效。
我的习惯是:大版本更新前先看一眼当前内核版本(uname -r),更新后如果启动异常,能在GRUB的"Advanced options"里选旧内核进去,然后用apt回滚。这个"旧内核入口"是救命的,所以不要把它从GRUB菜单里精简掉。
对于DKMS驱动(NVIDIA、部分无线网卡),更新后验证一下:
dkms status # 看模块是否为 installed 且有对应内核版本 nvidia-smi # 显卡驱动 ip link # 无线网卡是否有接口6.3 Windows那边也要照顾:更新、BitLocker与分区
双系统不是"装完就不管"。Windows的大版本更新有可能重置启动顺序、重写引导;如果开了BitLocker,改固件设置(比如切AHCI、关Secure Boot)可能触发恢复密钥。所以装机之前务必做两件事:导出BitLocker恢复密钥(微软账户里能查),备份Windows的EFI分区(用dd或专门的备份工具,几百MB的事)。
# 备份 ESP 分区(在 Linux 下,注意设备号) sudo dd if=/dev/nvme0n1p1 of=~/esp-backup.img bs=4M status=progress这个备份在引导彻底乱掉的时候能救命——把它写回去,至少Windows能启动。
6.4 一个我反复验证的判断原则
遇到问题先问一句:这是"装的时候错了"还是"装完没配好"?前者表现为安装中断、分区表异常、系统根本不启动;后者表现为系统能进但某个硬件不工作。两类问题的排查路径完全不同,混在一起找答案只会越找越乱。有了这个二分法,你会发现网上大量的"教程"其实在解决另一个类别的问题,照抄自然无效。
具体的排查顺序我一般这么走:症状→确认系统是否正常启动→确认硬件是否被内核识别(lspci/lsusb/dmesg)→确认驱动是否加载→确认配置是否生效→最后才去改参数。这个链路里每一步都能独立验证,不会出现"改了一堆不知道哪个起了作用"的局面。
最后说个我在实际操作中的体会:这类游戏本装Linux,真正花时间的从来不是安装本身,而是安装之后的硬件适配。安装可能20分钟,把无线、声卡、显卡、休眠调顺可能要一个晚上。所以如果你时间紧,先把系统装好、确认能启动、能联网、能显示,剩下的驱动问题慢慢来——别在装机那一步追求"一次到位",那是不现实的期待。留好备份、记住回滚路径,比记住任何一条命令都重要。