ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ubuntu 18.04.6安装全流程:介质校验、分区引导与黑屏排障

Ubuntu 18.04.6安装全流程:介质校验、分区引导与黑屏排障

简介:面向 Ubuntu 18.04.6 桌面版装机新手与运维人员的常见问题速查文档,围绕启动盘制作、系统安装与分区规划、特定机型驱动适配及日常软件部署展开,可作为实际安装部署时的排错参考。包内仅含 1 个 PDF 文件,约 172KB,篇幅紧凑,按启动盘、安装分区、驱动安装、日常应用四个部分组织,便于按问题快速定位查阅,已有 438 人学习下载。内容给出 rufus 制作 UEFI 与 MBR 启动盘的取舍建议及 USTC 镜像获取途径,列出 boot、EFI、swap 与根目录的具体容量分配方案;针对联想 E480 无线网卡、航嘉 i7-11700K 缺少以太网卡驱动、Realtek 8125 网卡等机型分别说明驱动来源与命令行安装思路;并汇总 Chrome、DBeaver、WPS、搜狗拼音及 Flameshot 截图工具的部署方式,适合需要复现装机流程、补齐驱动短板的读者对照使用。

1. 一块 2021 年封版的老镜像,为什么还有人在装

Ubuntu 18.04.6 系统安装这件事,我这两年的处理频率反而比新版本高:产线上的老工控机、只认证到 bionic 的行业软件、跑在旧至强上的编译机,都还停在 18.04。18.04.6 是这条线最后一个点版本,桌面端用的仍是老的 Ubiquity 安装器,分区交互、引导写入、显卡驱动栈跟后来的版本不是一套逻辑。新版上“下一步下一步就完了”的流程,在这块镜像上经常卡在探测硬件、找不到硬盘、装完黑屏。这篇按我实际装机的顺序往下拆:介质怎么备、分区怎么切、卡住看哪里、装完怎么验收,适合手上有一台必须留在 18.04、又不想在同一处翻车两次的人。

2. 介质与固件:ISO 校验、启动盘写入、BIOS 四个开关

装不上的机器里,有相当一部分根本不是系统的问题,而是镜像写坏了、U 盘半途掉盘、固件把硬盘藏起来了。这三件事在开机进安装界面之前就能全部排掉,成本不到二十分钟,能省掉后面两小时对着黑屏的玄学排查。

2.1 先校验再写盘:一条 sha256sum 省掉两小时

ISO 下载中断是最隐蔽的一类故障,因为文件大小看起来是对的,写盘也不报错,直到安装器加载到一半才崩。我一般下完第一件事就是算摘要,跟官方SHA256SUMS里对应的那一行逐字符比。别用肉眼看全文,用grep把那一行揪出来并排看。

# 1) 算本地镜像的摘要,4~5G 的盘大概几十秒到几分钟 sha256sum ubuntu-18.04.6-desktop-amd64.iso # 2) 从官方校验文件里只挑桌面版这一行,$ 锚定避免匹配到 live-server grep 'desktop-amd64.iso$' SHA256SUMS # 3) 想确认校验文件本身没被改过,再验一次它的 GPG 签名 # 没网或没导入公钥时会失败,这一步不是必做项 gpg --keyid-format long --verify SHA256SUMS.gpg SHA256SUMS

sha256sum读的是整份文件,任何一位不同结果就完全不同,没有“接近”这个说法。grep后面那个$很关键,18.04.6 同时提供 desktop 和 live-server 两套镜像,少了锚定符会匹配到多行,人工比对时容易看串。GPG 那步依赖公钥环,密钥没导入就报NO_PUBKEY,这种失败不代表文件有问题,只代表你没法验证签名,跳过即可。真正必须一致的是第一步和第二步的两个十六进制串。

2.2 启动盘写入:dd 的 oflag 与 Rufus 的分区方案怎么对应

Linux 下写盘我固定用dd,因为 18.04 的 ISO 是混合镜像,直接怼到整块设备上就能引导,不需要额外工具。唯一要小心的是of=后面必须是整盘设备名(/dev/sdX),写成of=/dev/sdX1会得到一个不能引导的 U 盘,而且不报错。

# 写之前先认设备:看 SIZE 和 TRAN 列,别把系统盘当 U 盘 lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,TRAN # U 盘可能被桌面自动挂载了,先卸掉,否则写完缓存不落盘 sudo umount /dev/sdX? 2>/dev/null # 写入:bs=4M 兼顾速度与内存占用,oflag=sync 让每次写都真正落盘 sudo dd if=ubuntu-18.04.6-desktop-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync conv=fsync # 写完回读比对,比“看起来写完了”靠谱得多 sudo cmp -n "$(stat -c%s ubuntu-18.04.6-desktop-amd64.iso)" \ ubuntu-18.04.6-desktop-amd64.iso /dev/sdX && echo "写盘一致"

bs=4M是个经验值,太小速度上不去,太大在某些老 U 盘上反而掉速。oflag=sync会牺牲一点速度,但能避免“进度条跑完、拔盘一看只写了一半”,这个血泪经验在便宜 U 盘上尤其值。最后那条cmp是拿镜像长度做上限逐字节比对,输出“写盘一致”才算收工。

Windows 下用 Rufus 写盘,最容易错的是分区方案:主板按 UEFI 引导就要选 GPT,按 Legacy/CSM 引导就要选 MBR,选错了机器根本不认这个 U 盘。Rufus 识别到 Ubuntu 镜像时会问用 ISO 模式还是 DD 模式,正常情况 ISO 模式够用;如果写出来的盘启动即报错或者卡在引导菜单,换成 DD 模式重写一遍,这个组合基本能覆盖所有写盘失败的情况。

2.3 固件里必须先改的四个开关

U 盘插上去直接进 Windows、安装器提示“未找到任何磁盘”、装完重启进不去系统,这三类现象有一半以上能在固件设置里解决。进 BIOS/UEFI 之前先想清楚这台机器最终要以什么方式引导,装完再改的代价远大于装前改。

开关建议值设错的后果
Secure Boot先保持开启,装第三方驱动受阻时再关装时关了、装完再开,可能直接进不去系统
SATA ModeAHCIRST/RAID 模式下安装器扫不到硬盘,分区界面一片空白
Fast Boot(固件)关闭U 盘枚举不全,开机直接跳过引导菜单进 Windows
Fast Startup(Windows 电源选项)关闭NTFS 分区在 Ubuntu 下变成只读,休眠文件白占几个 G
VT-x / VT-d需要跑虚拟机时装前打开装完再开,部分虚拟化功能要重启才生效

Secure Boot 这条值得单独说一句。18.04.6 这个点版本的一大改动就是换上了新的签名密钥,正常装系统开 Secure Boot 是能过的。但装 NVIDIA 闭源驱动、VirtualBox 内核模块这类 DKMS 模块时,会要求你在蓝底紫框的 MOK 界面手动登记密钥,很多人在这里直接卡死。我的做法是装系统时保持开启,装驱动前先跑一遍mokutil --sb-state看状态,需要登记就在重启时按提示走完,实在搞不定再临时关掉,而不是一开始就关——装完再开回去的风险比装时关着更大。

3. 分区与双系统:EFI 分区、swap、GRUB 落盘位置

分区这一步在 18.04 的 Ubiquity 里是“安装类型”页面下的“其他选项”,交互跟新版安装器差别不小,尤其是多硬盘机器。这一步切错,轻则重装,重则把隔壁 Windows 的数据一起带走。

3.1 手动分区的四刀:EFI 512M、根分区 40G、swap 与 /home 的比例

我自己的固定切法是四块,除非机器有特殊用途,基本不调:

挂载点大小类型说明
/boot/efi512MFAT32,勾 esp/boot 标志已有 Windows 的机器复用现有 ESP,不要再建第二个
/40~60Gext4系统与软件包,装编译器、容器镜像多的话往上加
swap内存 1~2 倍,需要休眠则不小于内存swap桌面版默认走 swapfile,手切分区可以不单独给
/home剩余全部ext4重装系统时保留这一块,数据不用再搬一次

EFI 分区这块有个常见误区:机器上已经有 Windows 的 ESP(通常 100M 左右),装 Ubuntu 时应该直接把它挂成/boot/efi,不要新建。一块盘上出现两个 ESP,固件能不能正确选到系统全看运气,后期修引导也很别扭。反过来,如果整盘只装 Ubuntu,512M 是个舒服的值,太小以后装多个内核版本容易挤爆,Ubuntu 的 ESP 塞满会直接导致内核更新失败,而且是那种升级过程无声失败的坑。

swap 要不要单独给分区,取决于你要不要休眠。18.04 桌面版默认用/swapfile,手动分区时不建 swap 分区也能正常跑;但只要涉及休眠,swap 空间必须不小于物理内存,否则休眠会失败。内存 32G 以上的机器,我一般直接给 4G 分区或者干脆不给,靠 swapfile 顶着。

3.2 双系统下 GRUB 装哪块盘:efibootmgr 与 os-prober

Ubiquity 在分区页最下面有个“安装启动引导器的设备”,这是双系统翻车率最高的一格。多硬盘机器上,它默认可能选中你并不想让它引导的那块盘。原则很简单:选 Windows 所在的那块盘(也就是主引导盘)的整盘设备,比如/dev/sda,而不是/dev/sda1这种分区。

装完发现“拔掉 U 盘进不去系统、开机直接进 Windows”,八成就是引导写到了 U 盘上。进 live 环境或者开机进 BIOS 手动选 Ubuntu 启动项,然后重装一次 GRUB:

# 看当前所有 EFI 启动项和启动顺序,BootOrder 里排第一的就是默认 sudo efibootmgr -v # 确认 /boot/efi 真的挂在 ESP 上,没挂上是重装 GRUB 失败的最常见原因 findmnt /boot/efi # 把 GRUB 重新装到指定 ESP,--bootloader-id 决定固件里显示的启动项名字 sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu # 重扫其他系统,把 Windows 那条菜单加回来 sudo os-prober && sudo update-grub

efibootmgr -v输出里每条Boot####后面的路径能看出它指向哪块盘的哪个文件,找那个\EFI\ubuntu\grubx64.efi是不是落在了你预期的盘上。findmnt /boot/efi是排错第一步,很多时候grub-install报错只是因为启动时 ESP 没挂上。os-prober在 18.04 上是默认开的,如果update-grub之后菜单里没有 Windows,先确认 Windows 的 ESP 分区在这台机器上还能被扫到。

3.3 Windows 快速启动与休眠:为什么你的 NTFS 分区是只读的

双系统装完,Ubuntu 里挂载 Windows 分区只读、复制文件提示权限不足,这是 Windows 的快速启动(Fast Startup)留下的休眠文件在作怪。它让 NTFS 分区处于“未干净卸载”状态,Linux 侧的驱动不敢写,只能以只读方式挂。

在 Windows 里用管理员权限执行一条命令就能关掉,代价是开机慢几秒:

:: 关闭休眠,同时清掉 hiberfil.sys,释放几个 G 的空间 powercfg /h off

关掉之后要完整关机一次(不是重启),再进 Ubuntu,NTFS 分区就能正常读写了。这条不改,双系统用起来会一直别扭,而且是那种“偶尔能写偶尔不能写”的随机状态,排查起来很费劲。

4. 安装过程卡死:黑屏、卡探测、外设失灵、找不到硬盘

真正让人抓狂的不是报错,是没有任何报错——logo 转圈、屏幕全黑、光标闪。这一类现场基本都能靠内核启动参数救回来,关键在于知道每个参数治什么病、副作用是什么。

4.1 grub 菜单里按 e:nomodeset 与 nouveau 的恩怨

带独立显卡的机器装 18.04,黑屏、花屏、卡在紫色背景的概率非常高。原因是开源 nouveau 驱动在初始化显卡时跟部分芯片对不上,而安装器又要起一个图形界面。解法是在引导菜单里临时加参数,把内核模式设置关掉。

操作路径:U 盘启动后出现 GRUB 菜单,光标停在Install Ubuntu上按e进入编辑,找到以linux开头的那一行,在行末(---之前)加一个空格再加nomodeset,然后按F10启动。

linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed quiet splash nomodeset ---

nomodeset的意思是让内核不要接管显卡的模式设置,交给 BIOS 留下的基本显示模式。代价是没有 3D 加速、分辨率低(常见 1024x768)、亮度调节失灵,但足够把安装流程走完。装完系统后必须把这条参数从硬盘上的 GRUB 配置里删掉,否则会一直卡在低分辨率,很多人装完发现“分辨率只有 1024x768、调不动”,就是忘了这一步。

# 永久生效的启动参数在 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT sudo sed -i 's/ nomodeset//' /etc/default/grub sudo update-grub

sed这条只是把nomodeset从那一行里摘掉,改完一定要update-grub写进/boot/grub/grub.cfg,只改/etc/default/grub不生效。如果机器确实需要闭源驱动,删掉参数之后紧接着装驱动,中间别重启太多次。

4.2 卡在探测硬件:acpi=off、pci=nomsi 这类参数什么时候用

老主板、老工控机上还有另一类卡死:卡在Probing EDD、卡在 ACPI 初始化、或者干脆在启动早期就没有输出。这类问题跟显卡无关,是内核在枚举硬件时跟固件打架。常用参数和它们的代价我整理成一张表,按现象对号入座,一次只加一个,别一次全上。

参数对应现象副作用
nomodeset黑屏、花屏、紫屏无 3D 加速,分辨率低
nouveau.modeset=0同上,但只关 nouveau与 nomodeset 接近,更精准
acpi=off卡在 ACPI 探测、老主板无法软关机、风扇常转、CPU 调频失效
pci=nomsi卡在 PCI 枚举部分设备中断异常
noapic老机器 IRQ 冲突同上,慎用
edd=off卡在 Probing EDD一般无明显副作用

acpi=off是最后手段,用它装完系统后经常出现“点关机变成重启”“电池信息读不到”“风扇一直满转”这些后遗症,装完要在能正常引导后把它去掉,换成更温和的acpi_osi=Linux试试。一次只加一个参数的原因很简单:多个参数叠加后,你没法判断是哪一个起了作用,也没法判断哪个参数带来了新问题,排查成本会翻倍。

4.3 找不到硬盘与分区失败:RST、残留分区表、U 盘口

分区界面一片空白、只列出 U 盘不列硬盘,按概率排是这三个原因。

第一是 SATA 模式没改成 AHCI,主板处在 RST/RAID 模式,Linux 侧的驱动根本认不到盘。改这一项有个前提:机器上已有的 Windows 在改完模式后会因为找不到驱动蓝屏(INACCESSIBLE_BOOT_DEVICE)。正确顺序是先在 Windows 里用安全模式启动一次让它加载 AHCI 驱动,或者改注册表把启动值调成 0,再进 BIOS 改模式。直接改会得到一个两边都进不去的机器。

第二是盘上有残留分区表,安装器在分区阶段报ubi-partman failed with exit code 141这类错误。清掉开头的几个扇区即可,但这会把整块盘的数据抹掉,执行前确认这块盘上没有要留的东西:

# 只清前 10MB,足以干掉残留的 GPT/MBR 头和分区表备份 sudo dd if=/dev/zero of=/dev/sdX bs=1M count=10 # 清完让内核重新读一次分区表 sudo partprobe /dev/sdX

count=10是个保险值,1M 就够清掉主分区表,但 GPT 会在盘尾存一份备份,部分安装器会读到那份备份而认为盘还在用,多写一点更稳妥。partprobe是为了让当前内核立刻刷新分区视图,不清的话你在安装器里可能还是看到旧的分区布局。

第三是 U 盘插在 USB 3.0 口上,某些老平台的 xHCI 在安装环境下初始化有问题,表现是安装到一半键鼠失灵、或者 U 盘突然消失。换到 USB 2.0 口,或者在 BIOS 里打开 xHCI Hand-off,这类问题基本就没了。

5. 排查:五类反复翻车的现场,现象、根因与解法

这一段是我这几年装机记录里出现频率最高的五条,每一条都按“现象、根因、解决”记,遇到时按顺序对照,比从日志从头翻要快得多。

一、装完第一次apt update全是 404

现象:apt update刷出一屏404 Not Found,或者提示某个bionic-updates的包找不到。

根因:换源时只改了一部分行,或者把代号写成了别的版本(focal、jammy),又或者混用了http和https两种协议,导致部分行能通部分行不通。18.04 的代号是bionic,先确认lsb_release -cs的输出。

解决:整份/etc/apt/sources.list统一替换主机名,别手工改某几行。

# 先备份,改坏了能立刻还原 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 统一把官方主站换成一个你能访问的国内镜像域名(域名按你所在网络实测选) sudo sed -i 's|http://.*archive.ubuntu.com|http://<你的镜像站域名>|g; s|http://security.ubuntu.com|http://<你的镜像站域名>|g' /etc/apt/sources.list # 确认代号和组件没被改花 grep -v '^#' /etc/apt/sources.list | grep -v '^$'

改完apt update还有 404,就单独看是哪一行报的,那一行的组件名(main/restricted/universe/multiverse)很可能拼错了。

二、装完 NVIDIA 驱动重启黑屏、卡在登录界面循环

现象:装完显卡驱动重启,卡在紫色背景或登录界面输完密码又跳回来。

根因:三种。装驱动前忘了删掉nomodeset;驱动版本跟当前内核不匹配;Secure Boot 开着但 DKMS 模块的密钥没在 MOK 界面登记。

解决:开机在 GRUB 菜单按e临时加nomodeset进系统,先卸干净再重装。

# 卸掉所有 nvidia 相关包,回到开源驱动 sudo apt purge '^nvidia-.*' '^libnvidia-.*' sudo apt autoremove # 让工具自己挑适配当前硬件的版本,比手动指定版本号稳 ubuntu-drivers devices sudo ubuntu-drivers autoinstall # 如果 Secure Boot 是开的,检查模块签名登记状态 mokutil --sb-state

ubuntu-drivers devices的输出里会标出recommended,照它装就行。手动指定一个高版本驱动在 18.04 的老内核上未必有对应模块,这是最常见的版本不匹配来源。

三、双系统时间差 8 小时

现象:Windows 里时间是对的,切到 Ubuntu 就差 8 小时,或者反过来。

根因:Windows 默认把主板 RTC 当本地时间,Linux 默认当 UTC,两边对同一个硬件时钟的解释不一样。

解决:二选一,别两边都改。我一般让 Ubuntu 迁就 Windows,改动小、可回退。

# 让系统把 RTC 当本地时间读,执行完立刻同步一次 sudo timedatectl set-local-rtc 1 --adjust-system-clock timedatectl | grep "RTC in local TZ"

输出RTC in local TZ: yes就生效了。如果更想保持 UTC 这种规范做法,就去 Windows 里加一个RealTimeIsUniversal的注册表项,但那样每台机器都要动 Windows,机器多了反而麻烦。

四、装完拔掉 U 盘,开机直接进 Windows

现象:安装过程一切正常,重启拔盘后固件直接引导 Windows,BIOS 启动菜单里也找不到 Ubuntu。

根因:安装器的“启动引导器设备”选成了 U 盘,GRUB 的 EFI 文件写在了 U 盘上,拔掉就没了。

解决:用 live 环境或 BIOS 手动选中硬盘上的 Ubuntu 启动项进去,按 3.2 里的grub-install重装一次到正确的磁盘。如果没有可选的启动项,进 live 环境挂载根分区后 chroot 再装,装完efibootmgr -v确认多出一条指向硬盘的Boot####。

五、中文输入法装完不出现在托盘

现象:apt install显示装好了,但右上角没有输入法图标,或者切过去打不出中文。

根因:输入法框架没设成默认,或者环境变量没配,程序启动时压根没去找 fcitx。

解决:确认框架、设默认、补环境变量,三步缺一不可。

# 装 fcitx 和拼音引擎 sudo apt install fcitx fcitx-googlepinyin fcitx-config-gtk # 把系统输入法框架切到 fcitx im-config -n fcitx # 环境变量写进 ~/.profile,覆盖 GTK/Qt/ X 三套程序 cat >> ~/.profile <<'EOF' export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx EOF

写完要重新登录。18.04 默认框架是 ibus,只装 fcitx 不切默认,托盘里当然什么都没有,这是最容易被忽略的一步。

6. 装完别急着交机器:一份可复现的验收脚本

装完能进桌面不等于能交付。我更愿意在把机器推走之前跑一遍自检,把源、驱动、时间、引导、swap 这五项固定查一遍,比事后被人喊回去修要省事。

#!/usr/bin/env bash # 18.04 装机后自检,只读检查,不改任何配置 set -u echo "== 代号(应输出 bionic)"; lsb_release -cs echo "== 源是否已替换"; grep -rl "archive.ubuntu.com" /etc/apt/sources.list || echo "已换源" echo "== apt 解析"; sudo apt-get update -qq && apt-get -s upgrade >/dev/null && echo OK echo "== 显卡与驱动"; lspci -nnk | grep -A3 -i vga; lsmod | grep -E "nvidia|nouveau" echo "== 启动参数(不该再有 nomodeset)"; grep -o "nomodeset" /proc/cmdline || echo "干净" echo "== 时间"; timedatectl | grep -E "RTC in local|synchronized" echo "== 引导项"; sudo efibootmgr | head -5 echo "== swap"; swapon --show; free -h

用法很直接:bash check.sh > report.txt,每台机器留一份文本,出问题时拿它跟正常机器对比,比回忆“当时装了什么”可靠得多。/proc/cmdline那一条是我最看重的,nomodeset忘了删是装完分辨率异常的头号原因,而它藏在启动参数里,图形界面里根本看不出来。

顺手再留一个习惯:装完软件后把手工安装的包导出一份清单,下次装同型号机器就不用一个个想。

apt-mark showmanual > ~/pkglist.txt # 新机器上批量还原 xargs -a pkglist.txt sudo apt install -y

showmanual只列你手动装过的,不包含依赖树里的自动包,清单短且干净;xargs -a是把文件当参数喂给apt install,注意清单里如果有已经下架的包会中途报错,加-y之前先apt-get -s空跑一遍更稳。

踩过最贵的一次坑,是在一台双硬盘机器上没看lsblk就直接dd,把准备装系统的盘和移动硬盘的顺序记反了。从那以后我的顺序就固定成:先lsblk认设备,再校验镜像,再写盘,装之前efibootmgr看一眼现有启动项,装完跑一遍自检脚本。这套流程没让装机变快,但让“装完才发现不对”的概率降到了几乎为零。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进