上周一位朋友找我帮忙说他那台装了Windows和Ubuntu双系统的笔记本Ubuntu的根分区只剩下2GB可用空间软件装不进系统更新也一直卡着。他问我是不是只能重装。我劝他先别急——重装意味着要把Windows引导、Ubuntu应用、Home目录全部重新折腾一遍工程量一点不比扩容小还得冒着丢数据的风险。于是我用一个晚上帮他把Ubuntu根分区从120GB扩到了260GBWindows那侧完全没动。今天就把这套完整的操作流程、分区规划思路和踩过的坑都写出来。首先要说明的是给双系统里的Ubuntu扩容难点不在扩大分区本身而在于Linux分区往往不是孤立存在的它和Windows分区、交换分区、EFI引导分区挤在同一块硬盘上。你要动哪个、能不动哪个、动了之后引导能不能活这些才是真正花时间的部分。1. 双系统扩容前先看清你的分区棋盘我不建议任何人上来就直接打开分区工具拖拽分区。双系统机器的磁盘布局五花八门同一种扩容操作在不同布局下可能是天堂也可能是地狱。动手之前先把分区拓扑画清楚至少要知道目标Ubuntu分区旁边有没有可用的未分配空间以及中间有没有东西挡路。1.1 三种常见的双系统分区布局我见过最多的布局是这样的一块固态硬盘最前面是EFI系统分区几百兆的FAT32然后是Windows主分区也就是C盘C盘后面可能还藏着一两个Windows恢复分区再往后是Ubuntu的根分区最后是swap交换分区。这种布局是扩容条件最好的情况只要在Windows里把C盘缩出一些空间未分配空间和Ubuntu根分区通常能直接相邻GParted里拖一下就能完成。第二种布局麻烦一些Windows分区和Ubuntu根分区中间夹着一个小分区常见的是Linux swap分区也有的是Windows恢复分区。夹在中间的这个分区就是拦路虎直接扩Ubuntu是吃不到未分配空间的得先把挡路的小分区挪走或者删掉。第三种布局稍微少见但也不难处理Ubuntu装在第二块硬盘上Windows在单独一块盘上。这种情况你根本不用动Windows只需要在Ubuntu所在硬盘上腾出空闲空间或者把另外一个数据分区并过来即可。不过要给Windows那块盘扩容那思路就完全反过来了。看到这里你应该明白扩容的本质是让未分配空间出现在Ubuntu根分区的旁边越近越好越没阻碍越好。所以准备阶段最重要的事情就是搞清楚磁盘布局。1.2 用命令行确认分区和磁盘类型我在开始操作前一定会在终端里跑几条命令把分区情况打到屏幕上比任何图形工具都直观。lsblk -f sudo fdisk -l /dev/nvme0n1 sudo parted /dev/nvme0n1 unit GB printlsblk -f 的好处是能直接看到每个分区的文件系统类型、挂载点和UUID。fdisk -l 可以看整块盘的分区表类型GPT还是MBRparted print则能列出每个分区的起始和结束位置单位用GB方便估算空间关系。确认磁盘类型也很重要NVMe固态是 /dev/nvme0n1SATA硬盘是 /dev/sda。分区编号也有讲究比如 /dev/nvme0n1p5 表示第一块NVMe盘的第五个分区而 /dev/sda2 表示第一块SATA盘的第二个分区。后面所有命令里都要用对设备名不要想当然。如果看到某个分区下面标注着unknown或者加密标识先别慌很有可能是Windows的BitLocker加密分区这类分区的处理方式我在后面会单独讲。1.3 动手前必须确认的三个隐藏因素第一是Windows快速启动。Windows默认开启快速启动关机时系统不是真正退出内核和会话数据都会存进休眠文件。这种情况下如果你直接用Live U盘启动并挂载Windows分区可能遇到分区状态异常、只读挂载之类的问题。稳妥起见进Windows先把快速启动关掉或者用关机键Shift执行一次完全关机。第二是BitLocker加密。只要Windows开启了设备加密或BitLockerGParted看到的就是一个无法正常识别的分区调整大小前必须提前解密或暂停保护。这个步骤如果漏了后患无穷。第三是Ubuntu目标分区是否在被挂载的状态下。GParted有个特性对已挂载的分区很多操作会变成灰色不可用。这也是我坚持用Live U盘进试用模式的原因——从U盘启动后硬盘上的根分区默认不会自动挂载你想怎么操作都行。如果直接从Ubuntu系统内打开GParted折腾根分区大概率会提示目标分区忙还得去卸载系统盘上的根分区那就很尴尬了。2. 备份、Live盘、工具箱动手前把退路留好分区操作最大的特点是平时运行一万次都没事但只要一次意外断电、误操作、坏块可能整个分区的数据都救不回来。我见过太多人嫌备份麻烦最后花几百块钱找数据恢复公司。所以备份环节不能省但也没必要过度。2.1 备份优先级用户数据 分区表 系统镜像个人经验是重装Ubuntu只需要半天但Home目录里那些没上传的文档、代码仓库里的未提交修改、浏览器密码这些丢了就真的没了。所以我备份时只做三件事第一把 /home 下需要保留的目录打包拷到移动硬盘或者用rsync同步过去命令是rsync -avh /home/user/ /media/user/backup_folder/第二把 /etc 下的配置文件也打包一份这里面有fstab、网络配置、用户配置等重装后能省不少事。第三备份分区表。分区表备份不是必须但成本极低建议顺手做一下sudo sgdisk --backup/path/backup.gpt /dev/nvme0n1这样就算后面操作失误把分区表搞乱了也能用sgdisk --load-backup恢复回来。系统镜像就不建议背了一个是时间成本高另一个是当前系统已经要扩容了说明本身空间紧张备份镜像很可能没地方放。2.2 制作Ubuntu Live启动盘并进入试用模式扩容操作必须在独立的Live环境中完成这个原则一定不要动摇。有人问能不能直接开个终端在系统里扩根分区答案是不能根分区当前处于使用状态内核和进程都在读它强行卸载只会把系统搞崩。制作Live启动盘建议用8GB以上的U盘下载对应的Ubuntu桌面版镜像用写盘工具写入U盘。如果你手里还没有可以用dd命令在Linux里直接制作sudo dd ifubuntu.iso of/dev/sdX bs4M statusprogress注意of后面是U盘设备不是U盘分区认错会清空整个盘。写入完成后开机时选择从U盘启动进入引导界面选择Try Ubuntu试用模式。进入桌面后会默认加载GParted如果桌面里没看到也可以在终端里手动安装sudo apt update sudo apt install gparted2.3 GParted为什么是首选扩容工具GParted几乎是这个场景下最合适的图形化分区工具。它支持ext4、NTFS、FAT32、swap等常见文件系统的调整大小和移动操作界面直观每一步都有明确的状态提示。更重要的是它把resize2fs这类文件系统扩展命令封装在了调整分区大小这一个操作里省去了手动扩展文件系统的麻烦。Ubuntu自带的磁盘工具也能查看分区信息甚至能格式化但对移动分区和调整分区起始位置这类操作支持很弱。如果你真的需要把分区挪个位置基本还是得靠GParted。另外GParted在调整分区前会做文件系统检查发现问题会主动停下这一点对不太熟悉底层命令的人非常友好。3. 核心操作在Live环境里调整分区的完整流程准备做完开始真正的扩容。我做这套操作时习惯把步骤分场景来讲因为不同场景下的安全系数和耗时是天差地别的。下面两个场景覆盖了绝大多数双系统扩容需求。3.1 场景一未分配空间紧邻Ubuntu分区直接扩这是最舒服的情况。假设当前布局是Windows C盘后面有未分配空间紧跟着Ubuntu根分区没有其他分区挡路。操作流程如下从Live U盘进入Ubuntu试用模式打开终端先关掉swapsudo swapoff -a这一步是为了确保所有交换分区都处于未激活状态避免GParted在操作目标分区时因为swap占用而报错。打开GPartedsudo gparted在右上角确认选对了磁盘设备/dev/nvme0n1或/dev/sda。GParted默认显示整块盘的分区分布此时你应该能看到Windows分区、未分配空间和Ubuntu根分区。右键点击Ubuntu根分区选择调整大小/移动。在弹出的窗口里把分区右边的绿色箭头拖到最大或者直接在新大小一栏里填入期望值。如果未分配空间在左侧则拖动左边的箭头。注意保持对齐到选择为MiB或默认值这样新分区始终对齐到柱面边界不会引起后续异常。点击调整大小GParted会列出待执行的操作确认无误后点击应用。等待进度条走完。扩容速度通常比压缩快不少因为固态硬盘的随机写入能力强GParted会自动把新空间合并到文件系统里。完成之后可以先在GParted界面里看到分区已经变大再进入下一步校验。3.2 场景二中间隔了swap或恢复分区需要先挪开障碍如果分区布局是 [Windows] [未分配空间] [swap] [Ubuntu根分区] 这样的顺序直接扩展肯定不行因为未分配空间和Ubuntu根分区之间隔着swap分区。我的处理方式是先把swap分区删掉扩展Ubuntu根分区然后用swap文件替代swap分区。具体操作时先在GParted里对swap分区右键选择交换关闭如果之前没执行swapoff然后右键删除swap分区。删除之后未分配空间会和后面的Ubuntu根分区连成一片再按场景一的操作把根分区扩展到最大。这里有一个关键点删除swap分区之后千万不要在/etc/fstab里留着一个指向旧swap分区的UUID否则开机时系统会挂载一个不存在的分区直接卡在启动界面。正确做法是改用swap文件。我一般这样操作sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile然后把 /etc/fstab 里的旧swap那行删掉换成/swapfile none swap sw 0 0虽然这是一个额外的步骤但以后扩容时不会再被swap分区挡路算是一劳永逸的方案。如果挡路的是Windows恢复分区我个人不太建议直接删除它除非你确定这个系统不再需要恢复功能。恢复分区通常很小几百MB移动它比移动Ubuntu大分区快得多。在GParted里右键恢复分区选择调整大小/移动把它整体搬移到未分配空间的另一侧让未分配空间和Ubuntu根分区直接相邻然后再扩Ubuntu。移动小分区的耗时可以接受风险也相对可控。3.3 扩大分区之后的校验扩容操作完成后不要急着拔U盘重启。在Live环境里先把文件系统校验一下能避免很多启动后的意外。在终端里挂载目标根分区然后查看使用情况sudo mount /dev/nvme0n1p5 /mnt df -h /mnt这里 /dev/nvme0n1p5 只是示例实际设备名要看你的lsblk输出。df -h 应该会显示分区总容量已经是你设置的新大小而且文件系统已经自动扩展完成。如果显示的还是旧大小说明GParted只改了分区边界没有执行文件系统扩展。这时候可以手动执行一次sudo e2fsck -f /dev/nvme0n1p5 sudo resize2fs /dev/nvme0n1p5第一个命令是强制的文件系统检查第二个命令把ext4文件系统扩展到分区大小。正常情况下GParted会顺手完成这一步但手动检查永远不亏。4. 扩容之后启动管理器的修复与验证很多人扩容完发现开机直接进了grub rescue或者根本找不到系统这是因为分区位置变化后引导器没能正确找到根分区和EFI分区。其实只要你没有移动Ubuntu分区意思是起始扇区位置没变只是把分区变大了引导一般不会坏。但如果你的操作涉及移动那最好提前做好修复准备。4.1 grub修复的标准动作最直观的判断方式是重启看能不能正常进GRUB菜单。如果遇到grub rescue提示符说明GRUB丢失了内核位置信息得用Live盘修复。从Live U盘进入试用模式后先挂载Ubuntu根分区到/mnt再挂载EFI分区到/mnt/boot/efi。EFI分区通常是一块几百兆的FAT32分区lsblk里标注为/boot/efi挂载点或者文件系统显示为vfat。然后我们做chroot修复sudo mount /dev/nvme0n1p5 /mnt sudo mount /dev/nvme0n1p1 /mnt/boot/efi sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo chroot /mnt grub-install /dev/nvme0n1 update-grub exit这里 /dev/nvme0n1p5 是Ubuntu根分区/dev/nvme0n1p1 是EFI分区具体要根据你的实际分区号替换。grub-install后面接的是整块磁盘设备不是分区设备。执行完update-grub后一般重启就能看到正常的GRUB菜单了。如果你不想手敲这些命令也可以直接安装boot-repair工具sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair然后运行boot-repair选择推荐修复。它会自动检测分区布局和GRUB配置多数情况下能一键解决。不过我还是建议至少手动操作一遍知道它在背后做了什么以后遇到类似问题心里有底。4.2 留一手的验证清单修复完引导我最少会做四件事重启后先确认系统能正常进入GRUB菜单并进入Ubuntu。执行 df -h确认根分区容量已经是新大小文件系统状态正常。执行 cat /etc/fstab确认里面没有残留的旧swap分区UUID。如果之前删了swap分区但fstab没改开机大概率会进入维护模式等在那个界面再改就麻烦了。如果Ext4分区在调整后出现异常重启前一定要做一次文件系统检查。另外如果你在扩容过程中移动了Windows分区位置建议重启时先进一次Windows让它自行检测分区变化。Windows启动时通常会做一次快速自检分区位置变了也能正常启动只是启动时间会稍长一些。5. 实操中踩过的坑与补救办法扩容流程看起来不复杂但真正做起来总会在意想不到的地方卡住。下面几个坑我基本都亲身经历过有些是操作前没做好排查有些是操作过程中的失误。整理出来希望能帮你绕开。5.1 BitLocker把分区锁死之后我第一次给一台预装系统的笔记本扩容时没注意Windows分区启用了BitLocker加密。GParted里那个Windows分区显示为unknown文件系统我不但看不出它的实际使用量更没法安全地缩小它。当时以为是分区表出了问题差点就去重建分区了。正确做法是在Windows系统里提前操作打开设置 - 隐私和安全性 - 设备加密如果显示BitLocker已开启就先把保护暂停或完全关闭等待解密完成后再进入Linux侧操作。BitLocker状态下强行调整分区大小轻则分区无法识别重则加密元数据损坏Windows彻底进不去。这个坑务必提前避开。5.2 swap分区挡路多花了半小时之前给另一台双系统机器扩容时分区顺序是 [Windows] [未分配] [swap] [Ubuntu根分区]。我一开始没细想直接想扩展Ubuntu根分区结果GParted的调整大小选项是灰色的根本点不了。后来放大一看原来未分配空间和根分区之间还夹着一个1GB的swap分区。我不想保留swap分区因为现在内存普遍够大swap更多是兜底方案。所以就先把swap分区删了扩展根分区最后用swap文件顶上。这个操作本身不难但当时由于没提前关闭swapGParted还提示交换分区正被系统使用必须先执行swapoff才能继续。5.3 Windows快速启动导致的分区状态异常如果你在Ubuntu里看到根分区挂载成了只读或者GParted提示分区正处于被使用状态很有可能是Windows快速启动在作怪。Windows的快速启动会在关机时把系统核心写入休眠文件导致分区状态在Linux眼中表现为未完全卸载。我的处理方式是进Windows在控制面板 - 电源选项 - 选择电源按钮的功能里取消勾选启用快速启动然后执行一次真正的关机再进Linux操作。如果你不想永久关闭快速启动至少也要用Shift点击关机的方式执行一次完全关机。5.4 移动大分区时的断电风险有一次我为了给Ubuntu腾空间用GParted把一个300GB的分区右移了大约20GB。操作看着只是拖了一下进度条实际跑了将近两个小时。中间我短暂离开回来后特别担心万一断电后果不堪设想——分区移动是把整个分区的所有数据块重新写入新位置不是改改边界那么简单任何中断都可能导致文件系统损坏。自此以后我的扩容原则变成尽量绕开大分区移动优先移动小分区swap、恢复分区实在绕不开也要先通过e2fsck确认文件系统健康并确保接的是独立电源而不是笔记本电池。笔记本用户还要记得插电别看电池还有80%就觉得安全。5.5 扩容后空间没有立即变大如果你不是通过GParted而是手动操作分区边界后重启可能会发现系统里的根分区大小还是旧值。这通常是因为只改了分区表没有执行resize2fs扩展文件系统。GParted会把这两步合并执行但如果你用了fdisk这类底层工具改分区就必须记得额外扩展文件系统。判断方法很简单lsblk显示的分区大小如果已经扩大但df -h显示的文件系统大小没变那就在线执行一次resize2fs对于ext4是可以在线扩展的sudo resize2fs /dev/nvme0n1p5一般情况下几秒钟就能完成扩展后的新空间立刻可用。回到最开始那个朋友的问题。那次扩容最终花了大概一个半小时大部分时间都耗在GParted等待上和后续的grub修复上。给双系统机器扩容最值钱的不是操作有多熟练而是动手之前多做三分钟的规划看清分区布局、备份好关键数据、提前关掉Windows侧各种加密和快速启动。只要这几步做到位扩容本身其实比大部分人想象中要稳得多。如果你也遇到类似的问题按这个流程走大概率能顺利把Ubuntu的空间接上。
阅读完成 · 觉得有帮助?