
上周接修一台老机器系统组合是 Ubuntu 18.04 Windows 10 双系统两块硬盘MBR 引导。用户说开机直接黑屏屏幕左上角一条下划线一直闪键盘怎么按都没反应。这种“黑屏、下划线闪烁”的现象在折腾过双系统的人眼里不算陌生但真要下手你会发现同样的现象背后原因可能完全不同有的是引导器丢了有的是显卡驱动卡住了有的纯粹是 BIOS 启动顺序被改乱了。这台机器我前前后后折腾了大半天才算彻底弄利索中间走了几条弯路也摸出几条可以直接“抄作业”的排查路径。这篇文章就是把整个复盘过程写下来给同样被“18.04 Windows 双系统 MBR 双硬盘”这个组合卡住的朋友做个参考。1. 先别急着重装搞清楚“黑屏下划线”到底卡在哪一层很多人一看到黑屏就慌了第一反应是重装系统。实际上从按下电源键到看到桌面系统要经过好几道关卡。黑屏下划线闪烁可以发生在不同阶段每个阶段的修法完全不同所以第一步不是动手而是判断——它到底卡在了哪一环。1.1 从开机到桌面的三步链路以 MBR 引导方式为例开机过程大致是BIOS 自检与启动设备选择主板通电后先自检然后按照启动顺序找启动设备找到一块硬盘后读取该硬盘的 MBR 主引导记录。引导器加载MBR 里的引导程序GRUB 或 Windows Boot Manager接管控制权加载配置文件弹出系统选择菜单或者直接进入某个系统。内核与图形初始化引导器把 Linux 内核或 Windows 内核拉起来内核开始初始化硬件包括显卡、磁盘、网络等最后启动桌面服务。“屏幕黑色 左上角下划线闪烁”这个画面可能出现在 BIOS 阶段也可能出现在引导器阶段甚至可能出现在内核刚开始加载的时候。三种情况的屏幕表现非常相似但处理手段南辕北辙所以在拔电源、拆机器之前先花两分钟做个定位。1.2 三个小动作快速定位卡点第一个动作看键盘指示灯。按一下大写锁定键看指示灯有没有反应。如果灯能正常亮灭说明 CPU 和基本硬件还活着系统还没完全死透问题大概率出在显示初始化或引导加载上。如果灯完全不亮机器可能根本没到操作系统层面重点怀疑硬件。第二个动作强制重启后狂按 F12或 F11、F8、ESC看主板型号。如果能弹出 BIOS 启动菜单说明主板自检通过了视频输出也正常。此时试着用方向键切换不同的启动设备看看选择哪块硬盘后会发生什么。这一步能直接告诉你是两块盘的引导都坏了还是只有其中一块坏了。提示每个主板的热键不一样台式机常见 F12笔记本常见 F2 进 BIOS、F12 进启动菜单或 F9 进一次性启动项摸不准的话在开机画面观察屏幕下方的提示或者干脆直接 F2/F12 挨个试。第三个动作观察按 CtrlAltDel 的反应。如果按下去能重启说明系统其实还活着只是画面输出出了岔子。如果按什么都没反应基本就是卡死状态了。我用这几个动作把那台机器定位了一遍大小写灯正常F12 能弹出启动菜单说明主板和内存、CPU 都没问题。问题出现在选择 Ubuntu 所在的那块硬盘后——黑屏下划线另外一块 Windows 硬盘也无法启动。这就把排查范围缩小到了引导器层面。2. MBR 双硬盘双系统这个组合天生就藏雷搞清楚故障层面之后还得理解这个环境为什么容易出问题。MBR 双硬盘 双系统的组合不像单硬盘装双系统那样有一条清晰的引导链它的结构是两条独立的引导链路并存由 BIOS 决定走哪一条。2.1 两套引导器各管各的地盘假设 Windows 装在硬盘 A 上Ubuntu 装在硬盘 B 上。安装 Ubuntu 时如果选择“Something else”手动分区并把 GRUB 装到硬盘 B 的 MBR 上那就形成了这样的格局硬盘 AMBR 记录着 Windows Boot Manager负责启动 Windows。硬盘 BMBR 记录着 GRUB负责启动 Ubuntu。平时开机BIOS 按启动顺序找设备。如果第一启动项是硬盘 A就直接进 Windows如果第一启动项是硬盘 B就会进 GRUB 菜单。两者完全独立互不干涉。这也意味着当你人在电脑前却想切换系统时基本只能靠进 BIOS 改启动顺序或者每次开机按热键手动选一次。可以这么理解一栋楼有两个单元各有各的大门物业只负责给你开某一个门。如果你希望从一个门进去之后还能走到另一个门里那就要靠 GRUB 菜单里跨盘引导 Windows 的功能。2.2 双硬盘环境下常见的“雷点”双硬盘 MBR 方案最让人头疼的地方在于盘符和启动顺序并不是一成不变的。SATA 接口顺序会影响盘号识别。同一块硬盘从 SATA1 换到 SATA2在 Linux 里可能从 /dev/sda 变成 /dev/sdbGRUB 之前在 MBR 里记录的位置信息就可能对不上导致找不到系统直接掉进 grub rescue 或黑屏。BIOS 启动顺序会被重置。有些主板在断电、清空 CMOS、升级 BIOS 之后会把启动顺序恢复默认第一启动项可能变成 U 盘、光驱或另一块硬盘于是出现“昨天还能开机今天突然黑屏”的诡异现象。Windows 更新会重写 MBR。Windows 在做大版本更新修复时可能重新写入硬盘主引导记录把 GRUB 覆盖掉导致开机直接进 WindowsUbuntu 从启动项里消失。GRUB 扫描不到另一块盘上的 Windows。Ubuntu 的更新脚本 update-grub 依赖 os-prober 去探测其他系统如果缺少相关组件或者 NTFS 分区读取异常GRUB 菜单里就找不到 Windows。把这些雷点列出来再回头看“黑屏下划线闪烁”会发现它其实只是上述各种问题的一个最终表现。排查的时候如果只盯着其中一种情况去修很容易修完 GRUB 又坏了 Windows来回折腾。所以下面这套排查流程我坚持一个原则先确认硬件的存在再确认引导器的状态最后才动系统配置。3. 排查实操从硬件到软件一层层过这一节是整个排查的核心请先准备好一个 Ubuntu 的 Live USB 启动盘和一个 Windows 安装盘或 PE 启动盘关键时刻用得上。平时没事的时候也建议常备一个这次我就靠 Live USB 救回了那台机器。3.1 先做硬件层面的快速排除不要一上来就敲命令先把关机断电然后做这几件事拔掉所有外接设备包括 U 盘、移动硬盘、打印机、读卡器。很多莫名其妙的引导问题源头就是一个忘记拔掉的 U 盘BIOS 把它当第一启动设备而里面的引导记录又残缺结果就是卡在黑屏。重新插拔内存条和独显。内存接触不良、显卡没有完全插紧也会出现开机黑屏、光标闪烁的情况。台式机的话顺手把显卡金手指擦一擦用橡皮擦轻轻擦一遍再插回去。检查 SATA 数据线和电源线。双硬盘用户特别容易忽略这一点数据线老化、接口松动会导致硬盘在 BIOS 里时有时无开机时主板找不到启动设备。进 BIOS 看硬盘状态。开机按 Del 或 F2 进 BIOS确认两块硬盘都被识别到。如果有一块不见了大概率是接触、供电或硬件故障先解决这个再往下走。我修的那台机器第一步就发现了问题的一部分拔掉两个 U 盘后BIOS 里能看到两块硬盘但启动顺序里第一项是一个已经不存在的选项指向一台已经移走的移动光驱。这种残留启动项在某些主板上会导致开机流程异常清理掉之后至少机器不再卡死在 POST 画面。注意清除 CMOS 跳线或抠主板电池也可以重置 BIOS 设置但操作前先断掉电源放电十秒以上再装回去。清 CMOS 会丢失所有 BIOS 设定如果之前有 RAID 模式或特殊配置请谨慎操作。3.2 利用 BIOS 一次性启动菜单判断引导器存活情况硬件确认没问题后开机按 F12/ESC/F11 进入一次性启动菜单分别选择硬盘 A 和硬盘 B 启动记录各自的结果。这里我把可能遇到的情况列成一个对照表操作现象初步判断选硬盘 A 启动正常进 WindowsA 盘 MBR 正常Windows 引导完好选硬盘 A 启动黑屏/报错Windows Boot Manager 损坏A 盘 MBR 被覆盖选硬盘 B 启动出现 GRUB 菜单B 盘 MBR 正常GRUB 完好选硬盘 B 启动黑屏或 grub rescueGRUB 损坏或找不到配置文件选硬盘 B 启动出现 GRUB 菜单但选 Ubuntu 后黑屏引导正常问题在内核/显卡驱动我最开始那台机器选中硬盘 A 是黑屏选中硬盘 B 也是黑屏说明两块盘的引导记录都出了问题。这种“双杀”的情况最常见的原因是用户之前在某一步修复时把 GRUB 装到了错误的位置或者是两块盘上的引导文件先后损坏。接下来就要用 Live USB 进入恢复环境逐个修复。3.3 制作并进入 Ubuntu Live 环境用另一台正常的电脑去 Ubuntu 官网下载 18.04 或 20.04 的 ISO 镜像用 Rufus、BalenaEtcher 或 Ventoy 做成启动 U 盘。插到故障机器上开机按 F12 选择 U 盘启动进入“Try Ubuntu”试用 Ubuntu模式。为什么推荐 20.04 或更新的版本做 Live 环境因为 18.04 的 Live 环境对较新的硬件支持已经不太友好而修复引导本身不要求 Live 系统版本和故障系统完全一致只要能读取根分区里的文件、能执行 chroot 就行。用新版本 Live 系统去修旧系统兼容性更好。进入 Live 桌面后打开终端逐条执行这些命令摸清硬盘现状lsblk sudo fdisk -l sudo parted -l 2/dev/null重点看两件事两块硬盘的设备名分别是 /dev/sda 还是 /dev/sdbUbuntu 的根分区和 /boot 分区如果有独立 /boot分别是哪个分区比如 /dev/sdb2、/dev/sdb1。如果分区很多分不清用 blkid 看文件系统类型sudo blkid输出里 ext4 的那个分区基本就是 Ubuntu 根分区带 swap 标识的是交换分区NTFS 的则是 Windows 分区。记清楚这些名字后面每一步都用得着。4. 修复 GRUB 引导的手把手操作确认好分区之后就可以开始修复 GRUB 了。这里推荐先用手动 chroot 的方式因为它可控性最强你知道自己到底往哪里写了什么。等手动方式做熟练了再考虑要不要用 Boot Repair 这类工具。4.1 chroot 修复 GRUB 的具体步骤假设前面查到的信息是Ubuntu 根分区为 /dev/sdb2独立 /boot 分区不存在GRUB 需要装回 /dev/sdb 这块硬盘。操作如下sudo mount /dev/sdb2 /mnt sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo mount --bind /run /mnt/run sudo chroot /mnt执行完 chroot 之后当前终端就像进入了 Ubuntu 系统内部。接下来的操作相当于在故障系统里直接敲命令grub-install /dev/sdb update-grub第一条命令是把 GRUB 重新装到 /dev/sdb 的 MBR 上。注意是/dev/sdb 而不是 /dev/sdb2MBR 是写在磁盘开头扇区里的不是写在分区里的。很多新手在这里写成分区名结果开机照样黑屏。第二条命令是重新生成 GRUB 的菜单配置它会扫描系统里的内核和 Windows 分区自动生成启动项。执行完毕后退出 chroot 并卸载挂载exit sudo umount -R /mnt sudo reboot重启前务必拔掉 Live U 盘。进 BIOS 把启动顺序调整好让 Ubuntu 所在硬盘排在前面开机就应该能看到 GRUB 菜单了。4.2 update-grub 扫不到 Windows 时的处理如果你执行 update-grub 之后输出里只有 Ubuntu 的启动项没有发现 Windows那么 GRUB 菜单里自然也不会有 Windows 的选项。此时要检查两件事系统里有没有 os-prober 和 ntfs-3g。可以用以下命令补装apt install os-prober ntfs-3g sudo os-prober如果 os-prober 能找到 Windows 分区它会输出类似 /dev/sda1:Windows Boot Manager 的信息然后再执行 update-grub 就能加进去。os-prober 执行后没有输出但 Windows 分区明明存在。此时可以手动在 /etc/grub.d/40_custom 里追加菜单项。下面是手写菜单的通用模板menuentry Windows 10 (manual) { set root(hd0,1) chainloader 1 }这里 (hd0,1) 是 GRUB 自己的磁盘命名方式hd0 对应第一块硬盘1 对应第一个分区也就是 Windows 引导分区所在位置。到底写 hd0 还是 hd1要看 Windows 在 BIOS 启动顺序里排第几GRUB 的编号是从 0 开始数的搞错了仍然无法启动。手动菜单方案对经验要求较高如果你不确定建议先让 os-prober 自动探测一遍再说。4.3 Boot Repair 工具能救急但双硬盘场景要留个心眼除了手动 chroot还有一个很流行的图形化修复工具 Boot Repair做法是在 Live 环境里添加它的 PPA 源后安装sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair boot-repair工具启动后直接点“Recommended repair”推荐修复它会把 GRUB 重装到第一块硬盘的 MBR 上并自动修复 Windows 引导。但我要提醒一句双硬盘环境下推荐修复有时会做过头。它默认把 GRUB 装到第一块启动硬盘如果第一块硬盘原本是 Windows Boot Manager这个操作会把 Windows 引导覆盖掉导致你修完 Ubuntu 后 Windows 反而丢了。工具也提供了高级选项可以手动指定 GRUB 安装位置但你既然都要指定位置了不如直接用手动 chroot心里更踏实。我在实际修复过程中是这样把握的能手动就手动Boot Repair 留给那种“两块盘引导全乱套、不想费脑子逐层排查”的应急场景。它的优势是快缺点是自动化程度高、不够透明你需要能接受它可能带来额外调整。5. GRUB 出菜单了但选 Ubuntu 仍然黑屏显卡问题单独拎出来说引导修好之后我以为这台机器已经结束了。没想到选 Ubuntu 回车后屏幕又黑了依旧剩下一条下划线闪啊闪。这次我反而松了口气因为现象变了从“开机黑屏”变成“选系统后黑屏”说明引导链路已经通了问题转移到了内核与显卡驱动这一层。5.1 独立显卡驱动与 18.04 内核的兼容性Ubuntu 18.04 默认使用内核自带的显卡开源驱动大多数集成显卡都够用。但如果你用的是近几年推出的独立显卡开源驱动往往跟不上硬件或者闭源驱动在某个内核版本下出现兼容故障就会导致内核初始化显示设备时卡住画面停留在黑屏。更麻烦的是这类问题有时候只在开机启动、驱动完全加载前出现进入系统后反而好好的所以排查时要先把它和“花屏”“分辨率错乱”区分开。5.2 临时加参数 nomodeset 验证判断最经典的验证方法在 GRUB 菜单出现时选中 Ubuntu按键盘上的e进入编辑模式找到以linux开头的那一行在quiet splash后面加上nomodeset然后按 CtrlX 或 F10 启动。nomodeset参数的意思是告诉内核加载显卡驱动时不要自动切换显示模式先用一种最保守的方式启动。如果加了它之后系统能正常进入桌面基本就能确认是显卡驱动或显示模式初始化的问题。如果加了 nomodeset 还不行还可以试试acpioff或noacpi不过这两个参数会关闭部分电源管理功能属于备选方案不要一上来就用。5.3 永久写入 nomodeset 参数用临时参数进入系统后如果想长期用这个模式需要把参数写进 GRUB 配置sudo nano /etc/default/grub找到这一行GRUB_CMDLINE_LINUX_DEFAULTquiet splash改成GRUB_CMDLINE_LINUX_DEFAULTquiet splash nomodeset保存退出后执行sudo update-grub之后每次开机都会自动附带 nomodeset。注意这个参数只是绕开了显卡驱动渲染的某些环节不是根治。如果你希望用上显卡的完整性能还是进系统后老老实实安装对应驱动。5.4 进系统后安装显卡驱动的顺序到这一步桌面上已经能操作了。打开“软件与更新”Software Updates切到“附加驱动”Additional Drivers选项卡选择一个推荐的闭源驱动应用然后重启。整个过程就是图形化点选比命令行简单直接。安装闭源驱动最怕的是什么是装完重启又黑屏。遇到这种情况不要慌还有一条退路开机进 GRUB 菜单选择“Advanced options for Ubuntu”进入恢复模式recovery mode在恢复菜单里选择 root shell进入命令行把驱动卸载掉sudo apt purge 驱动软件包名 sudo reboot如果没有恢复模式入口也可以用 Live U 盘再次 chroot 进去卸载。总之装完驱动黑屏不要用暴力重装解决确认是驱动导致的问题后把驱动干净卸载回退到开源驱动就行。补充如果你的 Ubuntu 后来更新了内核闭源驱动可能因为模块没有重新编译而暂时失效表现为开机进入桌面后又退出来或者直接花屏。这种情况到“软件与更新”的附加驱动里重新应用一次驱动等它编译完成再重启基本能解决。6. Windows 引导一起修两条腿走路才不会反复踩坑修复了不少双系统问题后我有一个很深的体会只把 Ubuntu 这边修好是不够的Windows 那边如果处于残废状态等于埋着半颗雷。这台机器当时就是 Windows 和 Ubuntu 两侧的引导同时出问题所以我特别安排了一节内容说说修复 Windows 引导的操作。6.1 什么时候需要修复 Windows 引导以下两种情况之一出现时就该动手修 Windows 了从 GRUB 菜单里选 Windows 后屏幕黑屏转圈或直接重启回到 BIOSBIOS 启动顺序里选择 Windows 所在硬盘启动出现黑屏或错误提示。修复 Windows 引导需要用到 Windows 安装盘或 PE 启动盘。插入安装盘从 U 盘启动语言界面出来后按 ShiftF10 打开命令提示符。或者在“修复计算机”-“疑难解答”-“高级选项”-“命令提示符”进入。6.2 使用 bootrec 系列命令修复 Windows 引导在命令提示符里依次执行bootrec /fixmbr bootrec /fixboot bootrec /rebuildbcd/fixmbr重新写入 Windows 兼容的 MBR 引导代码/fixboot修复引导扇区/rebuildbcd重建启动配置数据 BCD。执行完成后重启Windows 一般就能重新启动。这里必须提醒一个关键问题bootrec /fixmbr 会把硬盘 MBR 写成 Windows 的引导代码如果你把它用在了装有 GRUB 的那块硬盘上GRUB 就被覆盖了。所以修复策略要讲究顺序——如果两块硬盘都已经乱套我建议遵守“先 Windows后 Ubuntu”的顺序先用 Windows 安装盘修复 Windows 引导保证 Windows 能独立启动再用 Linux Live USB 修复 Ubuntu 的 GRUB保证 Ubuntu 能独立启动最后在 BIOS 里设置好默认启动顺序决定每天开机进哪个系统。这个顺序能最大限度避免修 A 坏 B 的循环。我这次就是按这个顺序走的修完 Windows 后 Ubuntu 的 GRUB 还静静待在另一块盘上互不干扰。6.3 bcdboot 重建 BCD 的备选方案bootrec /rebuildbcd 扫描不到 Windows 的时候可以用 bcdboot 手动重建启动文件。在命令提示符里先确认 Windows 分区盘符。打开磁盘管理或用 diskpart 查看比如 Windows 分区是 D:那么执行bcdboot D:\Windows /s S: /f mbr其中/s S:指定引导文件存放位置如果不需要指定就让系统自动选择。MBR 模式下加/f mbr声明引导方式。这个命令的优点是直接把 Windows 引导文件复制到目标分区并生成 BCD比 bootrec 更彻底。7. 常见问题速查表把这些年踩过的坑浓缩成一张表文章写到这儿操作步骤已经完整了。为了你以后遇到类似问题时能快速对照我整理了一份速查表。每一条背后都是真实的踩坑案例照着排查比瞎试省时间得多。故障现象最可能的原因解决办法开机完全无显示大小写灯不亮内存接触不良、电源故障、主板未自检断电重新插拔内存/显卡检查供电开机黑屏但有光标闪F12 能看到启动菜单BIOS 启动顺序异常或引导设备缺失清理残留启动项拔掉外接 U 盘单独选硬盘启动选择某一硬盘启动后黑屏该盘 MBR 损坏或引导文件丢失用 Live USB 修复 GRUB 或 Windows 引导出现 GRUB 菜单选 Ubuntu 后黑屏显卡驱动或内核显示模式问题加 nomodeset 参数启动进系统后重装驱动GRUB 里有 Ubuntu 但找不到 Windowsos-prober/ntfs-3g 缺失或 Windows 分区异常安装 os-prober 和 ntfs-3g再执行 update-grubGRUB 菜单正常选 Windows 后重启Windows BCD 损坏Windows 安装盘执行 bootrec /rebuildbcdWindows 更新后 Ubuntu 启动项消失Windows 重写了 MBR覆盖 GRUB用 Live USB 重装 GRUB 到 Ubuntu 所在硬盘双硬盘改完这个盘的引导另一个盘也坏了修复时把引导器装到了错误硬盘的 MBR按“先 Windows 后 Ubuntu”的顺序分开修复这张表不是理论推演是我在实际维修里反复遇到的典型组合。你可以把它当作一个检查清单遇到问题照着一项一项排除一般不会空手而归。8. 双系统日常维护的几个建议引导修复是应急动作真正省心的思路是减少它复发的概率。围绕 MBR 双硬盘双系统我想分享几点长期维护的心得。第一不要把所有希望都寄托在一份 GRUB 菜单上。双硬盘 MBR 场景下最稳妥的使用方式是保持两套引导器各自独立日常通过 BIOS 的一次性启动菜单切换系统。也就是说Ubuntu 的 GRUB 只管 UbuntuWindows Boot Manager 只管 Windows谁也不要试图跨盘接管对方。这样做的好处是万一某个引导器损坏另一个系统照常能用不至于电脑完全瘫掉。第二修完任何一边的引导之后都顺手重启两次分别从两块硬盘各自引导一遍。确认没有踩掉对方的引导记录再收工。我自己的习惯是修完 GRUB 后一定进 BIOS 检查启动顺序再从 Windows 盘启动验证一次修完 Windows 后一定再回 Ubuntu 里跑一遍 update-grub。这套验证习惯让踩坑概率大幅下降。第三Windows 大版本更新前留个备份在心里。Windows 更新重写 MBR 是老传统了遇到“更新完开机直接进 Windows、Ubuntu 没了”的情况不用怀疑就是引导被覆盖了用 Live USB 补一下 GRUB 即可。这不是系统坏了只是引导优先级被改了。第四18.04 已经太老了能迁移就尽早考虑迁移。如果你在这台机器上长期使用 Linux我的建议是后面找个时间把系统升级到更新的 LTS 版本。18.04 对新一代的处理器、显卡和不死机的 USB 控制器支持已经越来越吃力很多黑屏问题其实源于旧内核与硬件的代沟。与其反复打补丁不如迁移到一个主流的新系统版本上这种事情我在实际维修里见过太多。迁移过程其实就是把分区备份出来重装系统后再恢复数据顺带把引导彻底理顺一步到位。这台机器最终修好的状态是开机按 F12 选硬盘 A 进 Windows选硬盘 B 进 GRUBGRUB 里也能通过跨盘引导项进 Windows两边都正常。用户后来反馈说用得很踏实不再担心哪天开机又黑屏。我个人的体会是绝大多数双系统黑屏问题都不是硬件彻底坏了而是引导链路被打乱的结果——你只要耐着性子逐层定位、逐层恢复80% 的机器都能救回来根本不需要重装系统。