记一次有惊无险的 Linux 下根分区大小调整经历

记一次有惊无险的 Linux 下根分区大小调整经历

你将在本文中读到以下内容:使用 fdisk 工具恢复分区顺序、删除交换分区后需要的修复工作

如果你只是想了解如何扩容磁盘,请看文章最后的结论部分。

请注意,请不要效仿本文中的错误操作。只有你遇到了相似的问题,可以运用文章中的补救措施。由于作者并不精通 Linux,不保证文章内容准确,采用文章中的方法,后果自负。本文没有配屏幕截图。

前情提要

由于 Windows 系统过于卡顿,因此最近开始使用 Linux 操作系统,选用的是 Ubuntu 22.04 LTS 发行版。使用过程中逐渐感到磁盘空间不足,遂打算扩充磁盘空间以供使用。

当前系统环境

我已有的磁盘情况如下(按照在磁盘上的顺序排列):

  • /dev/sda:机械硬盘,容量为 1 TB。
    • sda2:逻辑分区。
      • sda5:交换分区(swap),容量 16 GB。
      • sda6:Linux 根目录,容量 64 GB。
    • sda1:位于磁盘最后的 NTFS 分区,容量约 800 GB。
  • /dev/sdb:SSD。sdb1 上装有 Windows 11 操作系统。

预期结果

由于交换分区过大,完全用不完,计划将交换分区缩小至 4 GB,并将 sda6 向前扩展 12 GB。


附注:后续使用证明,4 GB 交换分区有些捉襟见肘,一般来说将近吃满,长时间不关机会完全吃满导致电脑卡顿,后续又调整为 8 GB。我的电脑内存是 8 GB,供参考。

摸索过程

在 Ubuntu 主系统上的操作

我打开了 GNOME「磁盘」工具,解除挂载之后企图调节 swap 分区大小,发现不能调节,遂打算删除后重建。(请不要效仿,后果自负。

删除 swap 之后,系统提示内核无法响应分区序号的更改,/dev/sda6 变为 /dev/sda5,让我重新启动操作系统。

我瞬间慌了,立刻找到闲置的优盘,开始烧写 Ventoy,制作启动盘。烧写完成之后,重启进入 Live CD。

在 Live CD 中的抢救工作

进入 Live CD 之后直接启动 GParted 图形界面(Ubuntu Live CD 预装)查看分区情况。创建新的 swap 分区,调节主分区大小(时间会很长),然后重启。

调节之后的分区情况如下:

  • sda2:逻辑分区。
    • sda6:swap 分区,容量 4 GB。
    • sda5:Linux 根目录,容量 76 GB。
  • sda1:位于磁盘最后的 NTFS 分区,容量约 800 GB。

附注:如果硬盘上有 swap 分区,Live CD 会使用它。GParted 会用「🔑」标记挂载的分区,你需要右键点击取消挂载。

引导失败 — 修复分区序号

重启之后无法进入操作系统。屏幕上显示的内容如下:

error: unknown filesystem.
Entering rescue mode...
grub rescue> _

这个画面显然使我不安。我用电源键关机重新进入 Live CD。通过搜索,我知道是分区序号改变的缘故。1经过摸索,总结修复过程如下:

  1. 执行 sudo fdisk /dev/sda
  2. x 进入高级模式,f 执行分区序号调整。

调整之后,分区序号会重新排列,变成了这样:

  • sda1:逻辑分区。
    • sda5:swap 分区,容量 4 GB。
    • sda6:Linux 根目录,容量 76 GB。
  • sda2:位于磁盘最后的 NTFS 分区,容量约 800 GB。

sda1sda2 交换了,但不影响使用2

后续收尾 — 关于交换分区

经过一番摸索和修复,系统终于可以正常启动了,但仍然会遇到下面两个问题。

问题 1 启动时控制台界面会一直跳光标,一分钟后显示:

Gave up waiting for suspend/resume device

之后才会出现 GUI 启动界面。这是交换分区被重新创建,UUID 不同造成的。

解决方法:删除 /etc/initramfs-tools/conf.d/resume,并执行 update-initramfs -u3

问题 2 重启之后,系统也不会使用这个新的交换分区。

解决方法:运行 sudo blkid,获得新建的交换分区的 UUID,输出如下:

/dev/sda5: UUID="********-****-****-****-************" TYPE="swap" PARTUUID="********-**"

编辑 /etc/fstab,如下:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda6 during installation
UUID=********-****-****-****-************ /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=********-****-****-****-************ none            swap    sw                0       0 # 修改此处的 UUID

重启系统,终于正常了。

结论

本文主要焦点在误操作之后的恢复。一般来说,只要不贪图方便,正常操作,不会出现问题。正常的磁盘扩充过程:重启进入 Live CD,直接通过 GParted 工具调整分区大小。

以及,谨记名言:

早晚别刷机!


  1. 电脑引导用的是分区 UUID,发生此情况的原因尚不明确。欢迎留言分享。↩︎

  2. 后续挂载时系统莫名其妙提示需要到 Windows 中执行 chkdsk /f 修复,不知原因,故记录于此。↩︎

  3. 如果你继续遇到错误,请参考 ubuntu - Boot blocks with "Gave up waiting for suspend/resume device" - Unix & Linux Stack Exchange↩︎

Giscus