把 Windows 抹掉、整块硬盘交给 Ubuntu 20.04 单系统这事我前后干过三次第一次是在一台老笔记本上试手第二次是给一台工作台式机彻底换血第三次是帮同事把他用了五年的双系统合并成单系统。三次里有两次顺利一次翻车翻得挺彻底——分区表残留了 Windows 的恢复分区装完能进系统但每次开机 GRUB 都要等十秒还多出一个无法挂载的分区提示。这篇文章就把这三回的经验揉在一起从备份清点到启动盘制作、从固件设置到分区切割、从驱动安装到输入法和网络配置一条线讲完。如果你手上有一台准备退役的 Windows 机器想让它变成一台干净利落的 Ubuntu 20.04 单系统开发机下面的内容基本可以直接照着做。1. 先说清楚把 Windows 换成 Ubuntu 20.04 单系统到底动了哪些东西1.1 单系统不是装个系统这么简单很多人对重装系统的理解停留在光盘时代塞进去、点下一步、等进度条。放到今天的 UEFI 机器上这个过程多了三层东西需要你主动决策。第一层是固件层的引导配置包括启动模式UEFI 还是 Legacy、安全启动开关、启动顺序这些决定了你的安装盘能不能被识别、装完之后机器认不认这块硬盘上的引导程序。第二层是分区层的布局Windows 安装时会自动创建 EFI 系统分区、MSR 保留分区、恢复分区以及 C 盘这些分区在 Ubuntu 安装器眼里都是可以覆盖的对象但你如果只格式化了 C 盘剩下几个几百兆的小分区就会留在那里碍事。第三层是系统层的驱动与配置尤其是无线网卡、独立显卡和输入法这三样是 Ubuntu 装完之后最容易让人抓狂的部分。所以重装成单系统这件事的准确描述是清空整块物理磁盘的所有分区重新建立 GPT 分区表按 Linux 的习惯重新划分 EFI 分区、交换空间和根分区再在这套结构上部署一套完整的操作系统。Windows 的一切——包括引导项、恢复分区、隐藏的系统保留分区——都会被抹掉。这一点必须提前想清楚因为抹掉之后想回头只能重新装 Windows。1.2 20.04 现在还能不能当主力Ubuntu 20.04 是 LTS 版本官方维护周期到 2025 年 4 月标准支持期之后还有一段 ESM 扩展维护。它的价值在于生态成熟、资料多、踩坑帖子遍地都是无论遇到什么报错搜一下基本都能找到同版本的解决方案。20.04 自带的内核是 5.4 系列后续通过 HWE 内核可以升到 5.15对新硬件的兼容性还算可以。它的软件仓库里 Python 3.8 是默认版本GCC 9、OpenJDK 11 也都齐全对于跑后端服务、做嵌入式交叉编译、写脚本这类需求完全够用。需要留意的是软件版本偏旧。如果你要用最新的 Node.js、最新的 Go 或者某些只在较新 glibc 上编译的工具就得自己加第三方源或者用版本管理工具nvm、gvm 之类。另外一部分新出的硬件尤其是 2023 年之后上市的笔记本无线网卡和指纹模块的驱动可能不在 20.04 的内核里需要手动装 backport 驱动或者换更新的内核。这不是 20.04 的锅任何 LTS 版本都有这个问题。1.3 三类人适合这么干两类人最好再想想适合单系统的第一类是开发机专用机器这台电脑只用来写代码、跑容器、连服务器不需要 Windows 上的办公软件和游戏。第二类是老机器救活一台四代酷睿加机械硬盘的笔记本装 Windows 11 装不动装 Ubuntu 反而流畅这种场景收益最大。第三类是需要长时间跑服务的机器比如放在角落里当构建机、当媒体服务器Linux 的资源占用和远程管理能力明显更省心。反过来有两类人我建议保持双系统或者干脆别动。一类是依赖 Windows 独占软件的比如某些财务软件、部分行业软件、Adobe 全家桶虽然 Linux 上有替代品但工作流切换的成本往往被严重低估。另一类是只有这一台电脑且不能停机的重装过程至少需要半天中间出错还要排查如果第二天有活要交别在这个时候动手。判断标准很简单你能不能接受这台机器两天之内不可用。能接受就往下看。2. 动手前的那半天数据清点、镜像与启动盘2.1 备份清单真正会后悔的东西是什么大部分人备份的时候只想着我的文件,结果装完系统才想起来少了一堆东西。我整理过一份自己的清单按重要性排序。排在第一位的是不可再生的个人数据照片、视频、自己写的文档、录音、设计稿。这些东西重新做一遍的成本无限大。第二梯队是配置类文件包括浏览器书签和保存的密码如果用了账号同步其实云端有但没有同步习惯的人一定要手动导出、SSH 私钥~/.ssh/整个目录、Git 全局配置~/.gitconfig、各种 IDE 的配置目录比如 JetBrains 系列的配置可以导出成 zip、终端配置.bashrc、.zshrc、.vimrc。这些文件单个都不大但重配一遍能耗掉一整天。第三梯队是账号与授权信息你自己购买的软件的账号密码、订阅服务的登录方式、公司内部工具的令牌。注意这些东西要记在密码管理器里或者手写在本子上别存在即将被抹掉的系统里。还有一类容易被忽略本地数据库和容器数据。如果你在 Windows 上跑过 MySQL、Redis、PostgreSQL或者用 Docker 存过卷数据默认都在系统盘的用户目录下重装就全没了。要在 Windows 还活着的时候用mysqldump或者直接拷贝数据目录导出来。具体怎么做最省事的办法是准备一块移动硬盘把上面三个梯队全部拷过去然后在一台别的机器上打开确认一遍文件能正常读。这一步别省我见过不止一次拷贝过程中断导致文件损坏的情况当场不验证等到新系统装好才发现那时候 Windows 已经没了想重拷都没机会了。2.2 镜像下载与校验别跳过这一步Ubuntu 20.04 的桌面版镜像文件名类似ubuntu-20.04.6-desktop-amd64.iso大小在 3.5GB 上下。20.04 系列出过好几个点版本.1 到 .6越靠后的点版本集成的更新越多装完需要下载的补丁越少所以优先选最新的点版本。下载渠道用官方发布页面或者国内高校的开源镜像站速度会快很多。下载完第一件事是校验哈希值。同一目录下会有一个SHA256SUMS文件把镜像文件和它放在一起用系统自带的工具算一下# Linux / macOS sha256sum ubuntu-20.04.6-desktop-amd64.iso # Windows PowerShell Get-FileHash .\ubuntu-20.04.6-desktop-amd64.iso -Algorithm SHA256把算出来的字符串和SHA256SUMS里对应那一行比对完全一致才能用。这一步经常被人嫌麻烦跳过但镜像损坏或者被中间环节篡改导致的后果是写盘成功、能进安装界面然后在复制文件阶段报一堆莫名其妙的读取错误你会以为是硬盘坏了其实只是 iso 有问题。五分钟的校验能省掉两小时的排查。2.3 Rufus 写盘参数与写盘失败的常见原因Windows 环境下写盘我一般用 Rufus备选 balenaEtcher。用 Rufus 的时候有几个选项要盯住选项推荐设置原因分区类型GPT对应后面要用的 UEFI 引导模式目标系统类型UEFI非 CSM避免写出来的盘只支持 Legacy 启动文件系统FAT32UEFI 固件原生识别兼容性最好簇大小默认不用改点击开始后 Rufus 可能会弹窗问是否以 ISO 镜像模式写入还是 DD 模式写入选ISO 镜像模式这样写出来的盘还能当普通 U 盘用。如果写完之后机器不认这个盘可以换 DD 模式再写一次作为对照实验。写盘失败的常见原因有三个。一是U 盘本身有坏块尤其是那些用了很多年的便宜 U 盘写到一半报错换一个盘就好。二是U 盘被占用杀毒软件或者资源管理器锁着盘符关掉再写。三是U 盘容量标注造假标 64G 实际只有 8G写到 3.5G 之后开始报错这种盘直接扔掉别浪费时间。写盘完成后建议在 Windows 上打开 U 盘看一眼正常应该能看到EFI目录、casper目录和几个文件说明结构是对的。3. 进 BIOS 之前把固件和启动模式这件事想明白3.1 UEFI 引导决定了后面分区怎么切2020 年之后出厂的电脑基本都是 UEFI 固件加 GPT 分区表的组合。这个组合下系统引导需要一块EFI 系统分区ESP通常 100 到 550MB格式是 FAT32里面放.efi引导文件。固件启动时会在所有磁盘上扫描这个分区找到引导项后交给它继续加载内核。这件事对你的直接影响是安装 Ubuntu 的时候必须存在或者新建一块 EFI 分区。如果你选了清除整个磁盘并安装安装器会自动帮你建一块 512MB 左右的 ESP。如果你走手动分区就得自己划一块出来格式选EFI System Partition挂载点不用填或者填/boot/efi。很多人手动分区时忘了这一步装到最后报错未检测到 EFI 分区或者装完直接进不了系统。还有个细节如果你之前的 Windows 是 Legacy BIOS 模式装的2013 年前后的机器比较常见那套引导方式和新系统不一样。这种机器要么在固件里把模式切到 UEFI要么就用 Legacy 模式装 Ubuntu。判断方法很简单看固件设置里的启动项带UEFI:前缀的就是 UEFI 启动。3.2 快速启动、BitLocker、安全启动的处理顺序进固件设置之前有几个 Windows 侧的开关要先处理顺序不能乱。第一步关掉Windows 的快速启动。这个功能在控制面板的电源选项里它的作用是关机时把系统状态存进休眠文件开机直接读回来。开着它的时候Windows 关机并没有真正释放硬盘别人从 U 盘启动去动这块盘就可能出问题。第二步处理BitLocker。如果你的 Windows 开了设备加密或者 BitLocker在改变分区结构之前一定要先暂停保护或者完整解密。否则安装程序动到那块盘的时候Windows 会认为系统被篡改下次启动直接要求输入 48 位恢复密钥。密钥如果没备份数据就取不回来了。这个坑很常见尤其是一些品牌笔记本出厂默认就开了设备加密。第三步才是决定安全启动Secure Boot开不开。Ubuntu 20.04 的安装镜像带微软签名的 shim理论上开着安全启动也能装、也能启动。但装了第三方内核模块比如某些无线网卡驱动、VirtualBox 的模块之后安全启动会拦住未签名的驱动导致功能失效。我的做法是先关掉安全启动装系统装完驱动都调试好了再决定要不要开回来。如果你不打算用需要签名的场景就一直关着也行。3.3 U 盘插上去识别不到的几种处理办法进固件设置后第一件事是找启动顺序菜单看有没有你的 U 盘。识别不到的情况我遇到过三次原因各不相同。第一次是U 盘插在了 USB 3.0 蓝色接口上而固件版本太老对 USB 3.0 的兼容有问题换到 USB 2.0 的黑色接口就认了。第二次是启动模式对不上盘是 UEFI 模式写出来的固件却设在 Legacy 模式两边互相看不见把模式改成 UEFI 就正常了。第三次是固件里有USB 启动总开关被禁用某些品牌机为了安全会默认关掉需要在高级设置里打开。排错的顺序建议是先换接口优先用机箱后面的、主板直连的 USB 口再切启动模式然后检查固件里的 USB 相关开关最后才怀疑 U 盘本身。另外有个小技巧如果 U 盘在别的机器上能启动、在这台上不行可以在那台能启动的机器上做一次启动然后立刻插到目标机器上有时候固件需要见过一次这个盘才会记住它。4. 安装器里最要命的十分钟分区怎么切4.1 清除整个磁盘与其他选项的分界线Ubuntu 安装器走到安装类型这一步会给你两个主选项。**清除整个磁盘并安装 Ubuntu会把你选中的那块盘上所有分区全删掉自动建一块 ESP 加一块根分区简单粗暴适合整块盘都归 Ubuntu 的场景——也就是我们这篇要做的单系统。其他选项**则是手动分区给你完全的控制权也给你完全犯错的机会。单系统场景下我建议新手直接用第一个选项原因很实际自动分区会正确处理 ESP 的大小和位置不会出现引导装不上的问题。但有一个前提——你要确认选中的是正确的那块盘。安装器会把机器上所有的硬盘都列出来如果你有第二块数据盘千万别选错。判断方法是看容量和型号安装前先把机器上的盘都记清楚比如系统盘是 512G 的 NVMe数据盘是 2T 的机械盘选的时候盯着 512G 那个。如果你像我一样有特定需求——比如想把/home单独分出来方便以后重装保留数据或者想要一块独立的交换分区——那就走手动分区。下面这套方案是我用了三次之后定下来的。4.2 一套可以直接抄的分区方案与容量计算以一块 512GB 的固态硬盘为例我一般这么切挂载点大小类型说明/boot/efi512MBEFI 系统分区引导文件别小于 300MBswap16GB交换空间内存小于 16G 的机器建议给到内存的 1.5 倍/80GBext4系统和软件安装位置/home剩余全部ext4个人数据重装时可以保留容量怎么算出来的EFI 分区 512MB 是经验值Windows 用 100MB 就够Linux 内核和引导文件稍大一点给到 512MB 可以同时容纳多个内核版本的引导文件将来装多个发行版也不会挤。交换空间的传统规则是物理内存的 1 到 2 倍但现在内存动辄 16G、32G这个规则已经过时了。如果你的内存小于 8GB建议给内存的 1.5 倍8GB 到 16GB 之间给等量或者固定 16GB超过 16GB 的机器其实用系统默认的 swapfile 就够了不需要单独分区。要不要休眠决定权在交换空间够不够——想用休眠功能交换空间至少要等于物理内存大小。根分区 80GB 对大多数人是够的因为主要占地方的是 IDE、Docker 镜像、node_modules 这些东西而它们要么在/home要么可以通过软链接挪走。如果你重度使用 Docker建议给到 120GB因为 Docker 默认把镜像存在/var/lib/docker下面属于根分区。/home给剩余全部这个分区在将来重装系统或者换发行版时可以直接保留不动是这套方案最大的价值。手动分区时有个细节容易忽略分区表的类型。安装器里新建分区表的时候会让你选 GPT 还是 MBRUEFI 引导必须选 GPT。选错了后面会报错。4.3 引导程序装在哪里装错会怎样手动分区的最后一步安装器会问引导程序的安装位置Device for boot loader installation。UEFI 模式下这里应该选整块磁盘而不是某个分区。比如你的盘是/dev/nvme0n1就选这个不要选/dev/nvme0n1p1那是分区也不要选/dev/nvme0n1p2。选错会发生什么选到某个分区上引导文件可能被写到不该写的位置装完之后主板找不到引导项开机直接进固件设置或者报no bootable device。这种情况不是没救用 Ubuntu 的安装 U 盘进试用 Ubuntu模式然后 chroot 进硬盘上的系统重新装一次 grub 就能修但这个过程对新手来说足够劝退。还有个和单系统特别相关的问题如果之前是双系统硬盘上会残留 Windows 的 EFI 引导文件。你选了清除整个磁盘安装器会把所有分区删掉重建残留的Microsoft目录自然也没了。但如果是手动分区、只格式化了部分分区/boot/efi里可能同时存在Microsoft和ubuntu两个目录固件启动菜单里会残留一个Windows Boot Manager的选项指向一个已经不存在的引导文件。这个残留项可以在装完之后用efibootmgr命令清理# 查看当前所有引导项 sudo efibootmgr -v # 删除某个不需要的引导项编号从上面输出里看 sudo efibootmgr -b 0001 -B5. 第一次开机之后的必修课5.1 替换软件源与全量更新装完第一次开机第一件事是换软件源。默认的官方源在国内访问速度不理想换成国内镜像站能快十倍以上。20.04 的源配置文件在/etc/apt/sources.list操作流程是先备份再替换# 备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 用 sed 批量替换域名这里以清华源为例 sudo sed -i s|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list # 更新索引 sudo apt update也可以直接用图形界面的软件和更新面板在下载自下拉里选中国的镜像站效果是一样的。换源之后跑一次全量更新sudo apt update sudo apt upgrade -y这里有两个注意点。第一20.04 的代号是 focal你在网上抄源地址的时候看到focal这个词才对如果看到jammy22.04或者bionic18.04说明抄错版本了写进去会一路报错。第二upgrade之后如果需要重启就重启别拖涉及内核和 glibc 的更新不重启会留下隐患。5.2 显卡驱动核显和独显的处理完全不同Ubuntu 20.04 对 Intel 核显和 AMD 显卡是开箱即用的内核里自带开源驱动不用做任何事。麻烦的是 NVIDIA 独显。默认情况下系统会加载开源驱动nouveau这个驱动能用但性能一般跑图形界面偶尔闪烁跑深度学习更是完全不行。装 NVIDIA 官方驱动的推荐方式是系统自带的附加驱动工具# 打开附加驱动面板 software-properties-gtk # 切到附加驱动标签页选带 (专有) 标记的那个版本或者用命令行# 先看有什么版本可选 ubuntu-drivers devices # 自动安装推荐版本 sudo ubuntu-drivers autoinstall装完必须重启。重启后两个东西要验证一是nvidia-smi能不能输出显卡信息二是glxinfo | grep OpenGL里渲染器是不是 NVIDIA。如果重启之后卡在登录界面反复跳回来俗称循环登录大概率是驱动和显示管理器打架处理办法是切到 ttyCtrlAltF3卸载驱动sudo apt purge ^nvidia-.* sudo apt autoremove sudo reboot然后换一个驱动版本重试。我的经验是能用附加驱动面板装就别手动跑 .run 文件。.run 文件装的时候会问你一堆问题要不要禁用 nouveau、要不要装 32 位兼容库答错一步就很难收拾而且内核一升级驱动就失效还得重新编译。用 apt 装的话这些都由包管理器处理好了。如果是 NVIDIA 显卡装完系统后连安装界面都进不去、一直黑屏可以在 GRUB 启动项里临时加nomodeset参数进去装完系统再装驱动。具体做法是在 GRUB 菜单上按e编辑启动项在linux那一行末尾加一个空格再加nomodeset然后按 F10 启动。5.3 中文输入法与环境变量的坑20.04 默认装的是 IBus 输入框架中文输入法支持有限。想要搜狗拼音或者更好的体验一般换成 fcitx。第一步装框架sudo apt install fcitx fcitx-bin fcitx-table fcitx-config-gtk第二步装输入法引擎。搜狗拼音需要从官网下载 deb 包注意选对架构现在基本都是 amd64。下载之后sudo dpkg -i sogoupinyin_版本号_amd64.deb # 如果报依赖错误补一下 sudo apt install -f第三步是把系统输入法框架切到 fcitx。最稳妥的方式是用im-config命令选 fcitx然后注销重新登录不是重启注销就够。真正的坑在环境变量。fcitx 需要几个环境变量才能在各种程序里生效正确的位置是/etc/environment或者~/.pam_environmentGTK_IM_MODULEfcitx QT_IM_MODULEfcitx XMODIFIERSimfcitx这里有个特别容易犯的错误不要把这些写进~/.bashrc。.bashrc只对终端里启动的程序生效你在文件管理器里启动的图形程序根本读不到。而且/etc/environment里不能写export关键字和 shell 变量引用它只是一个简单的 KEYVALUE 文件写成export GTK_IM_MODULEfcitx会导致整个登录会话出问题严重的话进不去桌面只能切 tty 去救。这一点我吃过亏当时是在虚拟机里试的进不去桌面之后靠CtrlAltF3进 tty 用 vi 改回来的。6. 把网络、远程和开发环境补齐6.1 netplan 配置网络与常见写错的地方20.04 用 netplan 管理网络配置文件在/etc/netplan/下面一般是01-network-manager-all.yaml或者50-cloud-init.yaml。桌面版默认交给 NetworkManager 管通过图形界面点一点就能连 WiFi一般不用动 netplan。但如果你要配静态 IP就得写配置文件。一个有线静态 IP 的例子network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: no addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 8.8.8.8几个会让人抓狂的点。缩进必须用空格不能用 TabYAML 对缩进极其敏感多一个空格少一个空格都会解析失败。网卡名字要通过ip a命令确认现在的机器网卡名可能是enp3s0、eno1、ens33凭猜写上去肯定不对。文件权限建议设成 600因为里面可能有 WiFi 密码sudo chmod 600 /etc/netplan/*.yaml sudo netplan applynetplan apply执行后没输出是正常的有输出说明有问题。如果配错了导致网络完全断掉、SSH 也连不上别慌在物理机上可以接显示器用sudo netplan try这个命令它会在 120 秒内自动回滚给你改回来的机会。远程操作的时候一定要用try而不是apply。6.2 SSH 连不上时的排查顺序桌面版 20.04 默认没装 SSH 服务端要自己装sudo apt install openssh-server sudo systemctl status ssh装完从别的机器连连不上的话按这个顺序查。先看服务在不在跑systemctl status ssh显示 active 才对。然后看端口在不在监听sudo ss -tlnp | grep 22。接着查防火墙如果开了 ufw必须放行sudo ufw allow ssh或者sudo ufw allow 22/tcp。再往后查配置文件/etc/ssh/sshd_config里的PermitRootLogin默认是prohibit-password也就是禁止 root 用密码登录PasswordAuthentication有些配置会设成no只能密钥登录。改完配置要sudo systemctl restart ssh。还有一类问题不在服务端在客户端。如果你之前连过同一 IP 的机器换系统之后服务器的密钥变了客户端会报REMOTE HOST IDENTIFICATION HAS CHANGED并拒绝连接。这时候删掉本地记录就行ssh-keygen -R 192.168.1.100这里提醒一句生产环境或者在公司网络里不要为了图省事把 SSH 密码设得太简单也不要把 root 登录随便放开。用密钥登录加authorized_keys是更稳妥的做法生成密钥用ssh-keygen -t ed25519然后把公钥追加到服务器的~/.ssh/authorized_keys里。6.3 Docker、Git 与常用开发工具落地Docker 的安装建议走官方仓库比apt install docker.io装到的版本新。流程是加 GPG 密钥、加软件源、装docker-ce这三步官方文档写得很清楚照着敲就行。装完之后有两件事要做把当前用户加进 docker 组免得每次都要 sudosudo usermod -aG docker $USER # 注销重登生效另一件是配镜像加速地址写进/etc/docker/daemon.json{ registry-mirrors: [https://你的加速地址] }改完sudo systemctl restart docker生效。注意daemon.json是严格的 JSON 格式最后一项后面不能有多余的逗号这个错误会导致 Docker 起不来而且报错信息不太直观。Git 的配置就两行git config --global user.name 你的名字 git config --global user.email 你的邮箱然后是 SSH 密钥生成、把公钥贴到代码托管平台上。如果你从旧系统备份了~/.ssh目录直接拷回来就能用权限记得改回 600。剩下的常用工具一次性装齐sudo apt install -y build-essential curl wget vim tmux htop \ python3-pip python3-venv openjdk-11-jdk mavenJava 项目里如果遇到version not under control这类报错八成是 IDE 的版本控制配置或者 JDK 版本和项目不匹配检查一下JAVA_HOME指向和 IDE 里的 SDK 设置跟系统重装本身没关系。7. 出问题怎么办几条真实遇到过的故障链路7.1 卡在 GRUB 提示符或者直接黑屏装完重启之后如果看到的不是登录界面而是一个grub提示符说明 GRUB 找到了配置文件但没能正确加载内核。排查思路是这样先确认是不是分区对不上。在grub提示符下敲ls会列出(hd0) (hd0,gpt1) (hd0,gpt2)这样的设备。逐个试grub ls (hd0,gpt2)/看看哪个分区里有boot目录。找到之后手动引导grub set root(hd0,gpt2) grub linux /boot/vmlinuz-5.4.0-xx-generic root/dev/nvme0n1p2 grub initrd /boot/initrd.img-5.4.0-xx-generic grub boot能进去之后在系统里执行sudo update-grub重建配置再sudo grub-install /dev/nvme0n1重装引导。这套操作能解决绝大多数引导问题。如果是彻底黑屏、连 GRUB 都看不到那多半是显卡驱动问题前面说的nomodeset或者是 ESP 分区里根本没有引导文件。用安装 U 盘进试用模式sudo fdisk -l看分区结构sudo mount /dev/nvme0n1p1 /mnt挂上 ESP 分区看看里面有没有EFI/ubuntu/grubx64.efi。有的话说明引导文件在问题在固件设置没有就说明安装时引导装错了位置需要 chroot 进去重修。7.2 驱动装完循环登录前面提过这个现象这里把完整的处理链路写一下。循环登录的根本原因是显示管理器加载时驱动模块初始化失败X 或者 Wayland 起不来于是退回登录界面你再登录又失败。排查路径是CtrlAltF3切到 tty登录进去然后看日志# 看 X 的日志找 EE 开头的错误行 grep -i EE /var/log/Xorg.0.log | head -30 # 看上一次启动的日志 journalctl -b -1 -p err日志里如果出现NVIDIA: module not found或者Failed to initialize the NVIDIA kernel module基本就是驱动版本和内核不匹配。处理方式是彻底清掉再装sudo apt purge ^nvidia-.* ^libnvidia-.* sudo apt autoremove sudo apt install nvidia-driver-470 # 换一个版本号 sudo reboot这里有个经验装驱动之前先确认内核版本uname -r然后看这个驱动版本支持的 kernel 范围。20.04 用 HWE 内核5.15的时候老版本的 NVIDIA 驱动可能编译不过 DKMS 模块这时候要么换更新的驱动版本要么退回 GA 内核5.4。7.3 内核升级后进不去系统与回退apt upgrade升了内核之后重启进不去系统是 Linux 上最经典的问题之一。原因是新内核缺少某个必要的驱动模块常见的是存储控制器驱动或者显卡驱动导致根文件系统挂不上或者显示起不来。好消息是 GRUB 菜单里会保留旧内核的入口。开机时按住 Shift 键UEFI 机器上可能是反复按 Esc调出 GRUB 菜单选Advanced options for Ubuntu然后选上一个内核版本进去。进去之后有两条路一是直接把有问题的内核卸载掉# 查已安装的内核 dpkg --list | grep linux-image # 卸载有问题的那个版本 sudo apt purge linux-image-5.15.0-xx-generic sudo update-grub二是保留它等后续版本修复。**我的习惯是升级内核的时候不着急重启先看一眼 GRUB 菜单里旧内核还在不在。**位置一般是/boot/vmlinuz-*文件在就说明可以回退。另外建议把/boot分区留够空间——如果你的 ESP 只有 100MB 又没单独分/boot内核积累多了可能塞满导致升级失败这是很多人忽略的一个坑。8. 用了几个月之后我留下的几条习惯8.1 系统快照与 /etc 备份单系统最大的风险是没有退路。我之前用双系统的时候Ubuntu 玩坏了还能进 Windows 查资料、下驱动现在只有 Ubuntu系统起不来就只能靠手机搜。所以装完之后我做的第一件事就是配一套快照机制。Timeshift 是我用得最顺手的工具可以装在系统盘之外的盘上也可以放在同一块盘但要注意留空间sudo apt install timeshift配置上选 RSYNC 模式排除/home目录个人数据太大单独用别的方案备份每周自动跑一次保留 5 个快照。第一次装完驱动、输入法、开发环境调好之后手动跑一个快照标记成基线。以后折腾出问题了从 Live USB 启动也能恢复。除了快照我还习惯把/etc目录定期打包一份放到别的地方sudo tar czf /media/backup/etc-$(date %F).tar.gz /etc配置文件的体积很小但出问题的时候一个能用的sshd_config、netplan配置或者fstab能救命。/etc/fstab尤其重要改错一个 UUID 就进不了系统有备份就能从 Live 环境里拷回去。8.2 分区与磁盘的长期维护用久了根分区会悄悄变满尤其在你不注意的时候。几个常见的空间黑洞Docker 的镜像和容器docker system prune -a能清掉不用的、apt 的缓存sudo apt clean、旧内核sudo apt autoremove --purge、日志文件journalctl --vacuum-size500M。我一般每个月看一眼df -h和du -sh /var/* | sort -h心里有数。固态硬盘的 TRIM 也要确认开着否则长期使用之后写入性能会下降sudo systemctl status fstrim.timer如果是 active 状态说明每周自动跑一次没问题。没有的话sudo systemctl enable --now fstrim.timer打开。还有一件事机械硬盘和固态硬盘别混着用 fstab 里同一个挂载参数。机械盘做数据盘的话加上noatime能减少无谓的写入固态盘不用特殊参数只要 TRIM 正常就行。8.3 什么情况下我会重新装一遍最后说个实在话把 Windows 换成 Ubuntu 单系统之后我遇到过一次真的想重装的情况——从 20.04 直接跨版本升到 22.04中间依赖冲突太多包管理器修了两个小时还是报错最后选择重新装。所以我的判断标准是如果是单个软件的问题修如果是包管理器的依赖树整体乱了重装更快。判断的依据是sudo apt -f install和sudo dpkg --configure -a跑完还有一堆报错那基本就是烂到根了。重装的时候最省事的做法就是沿用之前的/home独立分区方案——安装时只格式化/和/boot/efi/home保持不动装完之后用户数据、项目代码、大部分软件配置都还在只需要重装系统级的软件包。这也是我一开始坚持把/home单独分出来的全部理由它把重装系统这件事从半天的活变成了四十分钟的活而且心理负担小得多敢折腾了。不过要提醒一句/home保留的时候用户目录下的隐藏配置文件.config、.local这些也会跟着保留偶尔会有旧配置和新系统不兼容的情况表现是某个程序启动就崩。这时候把对应的配置目录删掉让它重新生成就行不用整个重装。