准备重装Ubuntu这件事,通常不是“系统坏了”这么简单。绝大多数人折腾半天,真正的原因是当初分区就没规划好——根分区被塞满、/home空间不够用、swap小到一休眠就卡死。我自己的机器就是这么过来的:某天提示“No space left on device”,一查根分区只剩几百MB,当时又没有单独分/home,想清理都不知道从哪下手。最后没办法,只能走一遍Ubuntu重装与重新分区的完整流程。
这篇文章就把我这次从备份、做启动盘、手动分区到重装后恢复的完整过程聊透。写给正在用Windows+Ubuntu双系统、或者准备从单Windows系统切换到Linux,想把磁盘布局一次规划明白的读者。重点放在重新分区这一步:分区方案怎么选、每个分区该给多大、哪些坑必须避开,都会给出可直接照抄的参数和操作路径。
1. 动手之前,先想清楚分区到底该怎么规划
1.1 为什么大部分重装都是“分区惹的祸”
很多人装Ubuntu的时候图省事,直接选了“清除整个磁盘并安装Ubuntu”,或者让安装器“自动分配空间”。当时觉得能用就行,结果用了一个月就开始难受:系统更新几次,根分区就见底了;下载的镜像、打包的数据全堆在根目录,越用越卡。
还有一个很隐蔽的问题:如果分区时没有单独划/boot/efi,重装系统后Windows的引导会被覆盖得一干二净。双系统用户遇到“开机直接进Ubuntu、找不到Windows入口”,多数是重装时引导分区处理不当造成的。这些问题的根源不是系统本身,而是分区规划没有考虑后续的使用习惯。
所以我一直建议:只要不是公司急用的机器,装Ubuntu一定要走一遍手动分区。这个流程不复杂,但能帮你把磁盘后半辈子的扩展性定下来。
1.2 先认清当前机器的引导模式:UEFI还是Legacy
分区之前,先确认电脑是UEFI引导还是传统BIOS引导。2015年之后的品牌机、笔记本基本全是UEFI+GPT,只有一些老机器还在用Legacy+MBR。
查看方法很简单:
- 开机时进BIOS设置,看Boot Mode是UEFI还是Legacy;
- 或者看现有Windows安装方式——如果Windows安装在GPT分区表上,就是UEFI。
两种引导模式对应不同的分区方案:
| 引导模式 | 分区表类型 | 必须有的分区 | 最大分区支持 |
|---|---|---|---|
| UEFI | GPT | EFI系统分区(FAT32) | 极大(超过2TB也没问题) |
| Legacy | MBR | 主分区+扩展分区 | 单分区最大2TB,最多4个主分区 |
这个问题搞错了会非常麻烦。曾经有个朋友在UEFI机器上硬套MBR方案,安装器怎么都不识别Windows引导,最后查了半天才发现是分区表类型选错。所以不要跳过这一步,5分钟确认清楚,能省一下午。
1.3 一套适合大多数人的磁盘划分方案
既然要重新分区,我的建议是摒弃“一个根分区走天下”的思路,按用途拆分。以一块512GB的SSD为例,如果做双系统,分区方案可以这样规划:
- EFI系统分区:建议至少512MB(如果硬盘超过2TB或将来可能装多系统,建议1GB);
- Swap分区:如果不使用休眠,8GB到16GB足够,具体算法后面细说;
- 根分区(/):建议至少60GB,日常使用、开发环境、Docker镜像等都够用;
- 家目录(/home):剩余所有空间都给/home。
这个方案的核心思路是把“系统本身”和“用户数据”分开。根分区是系统的“C盘”,/home是你的“D盘”。以后系统坏了要重装,只要在安装器里指定挂载点、不勾选格式化/home,数据就能全部保留。这种设计不是谁拍脑袋想的,而是Debian、Ubuntu服务器版里非常经典的做法,只是桌面版安装向导默认不这么干。
如果是1TB以上的机械硬盘,可以额外划一个数据分区,挂载到比如/data,专门放镜像、虚拟机文件这类大块头。不过对绝大部分桌面用户来说,/和/home分开已经足够。
2. 备份清单与启动盘制作,别忽视的两个前置环节
2.1 重装前至少备份这三个地方
很多人重装前只顾着备份文档、照片,结果装完才发现忘了几个重要的东西。这里列一份我自己的备份清单,每次都照这个来:
- 家目录下的隐藏配置:比如.bashrc、.ssh、.config目录、.local目录。这些是Shell配置、SSH密钥、各种软件配置的大本营。SSH密钥丢了基本没法找回,.ssh目录必须优先备份;
- 包管理器的已安装列表:Ubuntu下可以用
dpkg --get-selections导出软件包列表,重装后一键恢复。代码库、Docker镜像这些可以用docker save导出; - 浏览器书签和密码:Firefox/Chrome登录过账号的可以直接同步,没同步的至少导出书签和密码CSV。
备份介质建议用移动硬盘或另一台机器,不建议直接放在要重装的那块盘的另一个分区里,万一分区表操作失误,整个盘都打不开。
导出软件列表的命令是:
dpkg --get-selections > ~/backup/installed-packages.txt重装后恢复:
dpkg --set-selections < ~/backup/installed-packages.txt sudo apt-get dselect-upgrade这个方法在Ubuntu不同版本之间迁移时也能用,虽然个别第三方源的包会提示找不到,但官方源里的基础软件基本都能恢复。
2.2 启动盘的两种制作方式
制作Ubuntu启动盘,我推荐用Rufus或balenaEtcher,两个都是图形界面工具,下载ISO后几步搞定。Rufus在Windows下用,注意分区类型要选“GPT”,目标系统选“UEFI(非CSM)”,否则做出来的启动盘在UEFI机器上会识别不到。
如果本身在Linux环境下,也有更快的纯命令行方式:
sudo dd if=ubuntu-22.04.4-desktop-amd64.iso of=/dev/sdb bs=4M status=progress注意是of=/dev/sdb,不是sdb1。dd命令会覆盖整个U盘,分区表也会被重写,千万别写错设备名。这个方式最干净,做出来的启动盘跟官方镜像几乎一模一样。
2.3 进入安装器之前,先在这三个选项上停一下
开机从U盘引导之后,会先看到GRUB菜单。第一项是“Try or Install Ubuntu”,可以直接回车。进入试用桌面后,桌面上的安装图标才是正式的安装入口。
这里其实有个很多人没注意的小技巧:建议先进“Try Ubuntu”(试用模式),打开GParted分区工具,先把磁盘摸清楚再动手。GParted在试用桌面里自带,能直观看到当前磁盘的分区情况、每个分区的类型和大小。这样在正式进入安装器之前,心里已经有一个清晰的分区地图,免得到时候稀里糊涂。
3. 安装器里的重新分区实操:从挂载点到启动器的完整流程
3.1 什么时候可以选“清除整个磁盘”,什么时候必须手动分区
很多教程会直接告诉你选“清除整个磁盘并安装Ubuntu”,这其实没那么万能。这个选项只适合两种场景:一是这台机器确定这辈子只用Ubuntu;二是双系统里Windows已经完全不想要了。
只要你的电脑里还留着Windows或有任何数据要保留,就必须选“其他选项”(Something else)手动分区。这是重装流程中最关键的一个入口。
另外要特别提醒一下:如果选择“清除整个磁盘”,安装器会在磁盘上自动创建EFI分区、根分区和swap分区。这种自动方案的EFI分区一般只有100MB,对于日常单系统没问题,但如果以后想装多系统或经常重装,100MB的EFI分区会很快被多个系统的引导文件挤满。
3.2 手动分区的完整操作步骤
进入“其他选项”后,安装器会列出磁盘和现有分区。这时根据之前规划好的方案,一步步操作:
第一步:识别磁盘设备名安装器里以/dev/sda、/dev/nvme0n1这种形式显示磁盘。注意看“Size”列和“Type”列,确认哪块是目标磁盘。NVMe固态盘显示为/dev/nvme0n1p1这种格式,SATA磁盘显示为/dev/sda1这种格式。
第二步:调整已有分区如果之前已经有Windows分区,先选中Windows的系统分区和恢复分区,点“Change”(更改),用剩余空间腾出空区块。注意这里有个重要的区分:Change是修改分区参数,Delete是删除分区。腾空间选Change,改大小;删数据选Delete。操作时安装器会实时显示剩余可用空间,很方便。
第三步:创建EFI系统分区选中空闲空间,点“+”,弹出对话框里:
- 大小:输入512或1024(MB)
- 类型:EFI系统分区(如果安装器没自动识别,就选FAT32文件系统)
- 挂载点:/boot/efi
第四步:创建Swap分区再在空闲空间上点“+”:
- 大小:按个人情况,一般8GB到16GB
- 类型:交换空间(swap)
- 挂载点:不用选,安装器会自动识别swap
第五步:创建根分区
- 大小:60GB或更大
- 类型:Ext4日志文件系统
- 挂载点:/
第六步:创建/home分区剩余所有空间给/home:
- 大小:剩余空间的全部
- 类型:Ext4
- 挂载点:/home
关键的一步来了:在“安装启动引导器的设备”下拉框中,务必选择整个磁盘设备,比如/dev/nvme0n1,不要选分区。选分区会导致引导文件写到某个具体分区里,双系统切换时可能会出现引导丢失的情况。
设置完成后,点击“现在安装”,安装器会问你是否确认要将改动写入磁盘,确认之前再花10秒钟检查一遍分区列表:挂载点有没有写错、/home有没有被误格式化(重装系统想保留数据时,/home不要勾选格式化)。
3.3 分区大小的计算逻辑:为什么swap不建议瞎填
swap分区的大小一直有争议,关键看使用场景:
- 只是日常办公、浏览网页的,swap给小一点,4GB就够,因为现在物理内存普遍16GB起步,系统很少会真的把swap用起来;
- 开虚拟机、跑编译任务,或者经常把大内存占满的,swap给到和内存一致的大小会更稳,比如16GB内存就配16GB swap;
- 需要休眠的,swap必须大于等于物理内存大小,因为休眠会先把内存内容写入swap再断电,swap小于内存,休眠就直接失败。
其实从Ubuntu 18.04开始,官方已经默认用swap文件代替swap分区,在/swap.img里动态分配。重装的时候不划swap分区,系统也会自动创建swap文件,对于大多数桌面用户完全够用。所以想省心的人可以直接跳过swap分区,把空间留给/home。
如果你想要swap分区,用传统方式也是可以的。我个人习惯是给一个固定的swap分区,因为分区方式在系统崩溃时更容易被救援工具识别,而且不需要考虑文件系统挂载顺序的问题。
3.4 根分区和/home分区的边界怎么定
根分区60GB这个数字,很多人觉得大,其实一点都不大。Ubuntu 22.04装完,系统本身加上常用软件大概占用15GB-20GB,但后续安装Docker镜像、编译缓存、系统日志、/var下的临时文件都会吃根分区的空间。给60GB,是给未来一到两年的“系统体重增长”留余量。
真正的弹性在/home。日常文档、下载、视频、虚拟机镜像、数据备份全在这里。仅虚拟机镜像一个就轻松占掉几十GB。所以把剩余空间全部给/home,是性价比最高的分配方式。
一个小提醒:/home和根分区是两套独立的“槽位”,如果/写满了但/home还有空间,系统一样会变得不稳定。所以重要的不是把空间平均分,而是把“系统的自用空间”和“用户的数据空间”隔离开,让一个满了不乱占另一个。
4. 重装完成之后:第一件事不是开浏览器
4.1 先换源,再做系统更新
如果你在国内,装完Ubuntu的第一件事不是到处下载软件,而是先把软件源换成国内镜像源。默认的archive.ubuntu.com在国内的下载速度,体验过的人都懂。
Ubuntu 22.04之后,换源有官方支持的图形化方式:打开“软件和更新”(Software & Updates),在“Ubuntu软件”选项卡里,把下载服务器从“Ubuntu官方服务器”改成“其他站点”,在弹出的列表里选一个国内镜像源(比如清华、阿里、中科大)。输入密码之后,系统会自动刷新软件列表。
命令行方式也可以直接改源文件:
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y换源之后先别急着装软件,跑一遍sudo apt update确认源能正常解析,然后再sudo apt upgrade把系统推到最新状态。这样做的好处是,避免用旧状态系统装了半天的软件,最后大版本升级时全部冲突。
4.2 显卡驱动和常用开发环境的安装
如果机器有NVIDIA独显,装驱动之前先确认系统版本和所需的驱动程序版本。Ubuntu桌面版在“软件和更新”的“附加驱动”选项卡里可以直接选装专有驱动,推荐这种图形化安装方式,比手动去NVIDIA官网下载.run文件稳得多。
图形化安装驱动后,重启执行nvidia-smi能看到显卡信息,说明驱动已经正常加载。
开发环境建议按需安装,不要一口气执行大礼包式的apt install。我的习惯是一样一样装,装完一个验证一个:
# 编译工具链 sudo apt install build-essential cmake git # 开发语言环境 sudo apt install python3-pip curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs # Docker sudo apt install docker.io docker-compose-v2 sudo usermod -aG docker $USER装完Docker记得要把自己的用户加入docker用户组,不然每次都要sudo。
4.3 恢复/Home数据的两种方案
重装后恢复/home,通常有两种思路:
如果重装时你选择了不格式化/home分区,那么新系统挂载好/home之后,你原来的数据就已经在那里了,直接把用户目录里的配置文件放回新的用户目录即可。这里要小心一点:新的用户名如果和原来不一样,配置文件里的路径就变了,很多软件会找不到原来的配置目录。
如果之前的备份是移动硬盘里的压缩包,恢复方式也很直接:
rsync -avh /media/backup/home/ /home/username/用rsync而不是cp,主要是因为rsync断点续传、跳过已有文件、保留权限和软链接,数据量大时更不容易出问题。
5. 重装与重新分区里最容易翻车的5个高频坑
5.1 开机后直接进入grub rescue,系统找不到引导
这个典型的场景是:重装完Ubuntu,或者改过分区,电脑直接卡在grub rescue>提示符,找不到系统启动文件。
原因一般是/boot/efi里的引导文件被清掉了,或者启动引导器指向了一个不存在的分区。解决方法有两种:
第一种,用Live USB进入试用模式,打开终端,挂载EFI分区,重新安装GRUB:
sudo mount /dev/nvme0n1p1 /mnt sudo grub-install --efi-directory=/mnt --boot-directory=/mnt/EFI/ubuntu /dev/nvme0n1 sudo update-grub第二种比较省事,直接把启动项指向Windows Boot Manager或Ubuntu的EFI文件。进BIOS设置,找到Boot选项,手动添加启动项,指向EFI/ubuntu/shimx64.efi或EFI/Microsoft/Boot/bootmgfw.efi。这个方法尤其适用于UEFI双系统,Windows引导和Ubuntu引导都有独立的EFI文件,指向哪个,哪个就能启动。
5.2 重装完只剩下Ubuntu,Windows原地消失
分区的时候不小心格式化掉了Windows的系统分区,或者在引导器里选了“/dev/sda”,把Windows Boot Manager覆盖了。
如果是覆盖了引导文件,Windows系统和数据本身还在,用上面grub-install加update-grub的方式,GRUB一般能自动扫描到Windows的EFI引导项,选对应的菜单项就能进Windows。
如果前面那个坑已经踩过了,还想救回这只能解决引导问题。如果是把NTFS分区整个删掉并格式化成了ext4,数据恢复就很麻烦了。有临时需求时我会用testdisk来试着恢复分区表,成功几率不小,但费时又费力。所以再次重申,如果双系统里Windows还有数据,请务必在重装前检查一下分区列表:目标分区是不是选对了,操作点的是不是这一排。
5.3 swap分区给多大才不浪费又不卡顿
前面讲了一版,这里再补一个实操视角。其实从Ubuntu 18.04开始,你甚至可以完全不建swap分区,全交给swap文件。系统默认就是在根分区里放一个/swap.img文件,需要时扩容很方便。
给不了灵丹妙药式的数字,但我自己的经验是:
- 内存16GB及以上的桌面用户,不需要swap分区;
- 经常编译大型项目、跑Android模拟器、开多个虚拟机的,建议单独分和内存等大的swap分区;
- 使用休眠功能的一定要分区,且要大于等于物理内存。
swap文件和swap分区还有个区别:swap分区的读写是设备直通,比swap文件少一层文件系统开销。虽然现在NVMe固态盘快,这个差距不容易感知,但原则还是“能用分区用分区,嫌麻烦用文件”。
5.4 重装后Ubuntu和Windows时间不一致,总是对不上
很多双系统用户重装完会发现,切到Windows,系统时间比北京时间慢8小时。原因是两个系统对硬件时钟的解读方式不同:Windows认为CMOS里存的是本地时间,Ubuntu认为存的是UTC。
在Ubuntu里执行一行命令,让系统把硬件时钟当作本地时间:
sudo timedatectl set-local-rtc 1 --adjust-system-clock设置完之后,两个系统的时间就一致了。这个问题本身不影响功能,但每隔一段时间对不齐时间,很闹心,建议重装后顺手处理掉。
5.5 重装系统的过程反复失败,直接黑屏或卡在安装界面
这种情况十有八九是ISO文件没下载完整,或者启动盘制作方式有问题。Ubuntu镜像文件比较大,下载时如果网络不稳定,很容易出现文件损坏。校验方法在官网能下到SHA256校验值,下载完用sha256sum比对一下:
sha256sum ubuntu-22.04.4-desktop-amd64.iso如果校验值和官网不一致,说明ISO已经损坏,重新下载一次就好。启动盘制作时也要留意写入模式,Rufus默认的“DD镜像模式”比“ISO镜像模式”更接近原始布局,遇到启动问题可以先切换试试。
5.6 重装后外接U盘或移动硬盘挂载不上,提示“sda is not a valid block device”
这个坑比较隐蔽,但同样常见。原因多数是分区表里的设备名变了,系统用的是UUID或标签来识别设备,而你在重新分区时不小心把设备的标签或UUID改了。
处理方式比较简单:
sudo blkid查看设备当前的UUID,然后在/etc/fstab里更新对应的UUID或设备路径,保存后重新挂载。如果之前用/dev/sdb1这种方式写的挂载项,这类路径在重启时可能变化,建议都改成用UUID挂载:
UUID=xxxx-xxxx /data ext4 defaults 0 2UUID方式的好处是设备名怎么变都没关系,只要分区格式和UUID没变,挂载就稳定。
写在后面:这次重装我最大的体会
重新分区这件事,本质上不是在分磁盘,而是在分“边界”:系统边界、数据边界、备份边界。把系统、家目录和应用数据放在相互独立的“槽位”里,哪怕某天根分区爆了,也只是重装一次系统的事,数据和配置不会跟着陪葬。
我在这次Ubuntu重装与重新分区的过程中,最大的收获不是学会了几条命令,而是养成了一个习惯:装系统前先花半小时想清楚未来半年自己会在这台机器上干什么。人一旦想明白这个,分区方案基本就是顺水推舟的事了。
另外一个小技巧送给准备重装的朋友:装好系统后,第一件事不是换壁纸,而是按Ctrl+Alt+T开一个终端,把sudo apt update && sudo apt upgrade跑完,再装你最喜欢的软件。顺序搞反了,后面很容易出现依赖冲突,到时候又得跟包管理器斗智斗勇。