如何扩展我的根(/)分区?

直到今天,我一直在我的Windows7 / Ubuntu双启动中使用Ubuntu 13.04。刚刚我已经升级到Ubuntu 14.04。我的软件更新器显示了一个可用更新的消息。我选择了“立即安装”。很快我就得到了以下窗口。

'Not enough free disk space' message

然后我尝试了建议的sudo apt-get clean命令。什么都没发生!甚至没有打开窗口。教我如何删除临时包。

删除临时文件可能对进一步的更新和安装不是非常有帮助,因为我的/分区剩余空间不多。我想利用硬盘中的未分配空间来扩展我的/分区。以下是我的Gparted窗口。

Gparted window

我在这里得到了一个答案here。但对我来说没有用。我有两个选择。但这个答案对我的两个选择都不起作用。
选择1:我可以使用4.25 GiB的未分配空间来扩展我的/dev/sda10。为此,我必须移动我的linux-swap分区。但是我的Resize/Move选项对于linux-swap分区是禁用的。选择1失败了!
选择2:我可以使用14.35 GiB的未分配空间。在这种情况下,我必须移动多个分区。/dev/sda4分区是列表中的第一个。即使该分区也有同样的问题。Resize/Move选项被禁用。选择2失败了!
现在我没有选择了。
我该怎么办?帮我用Gparted扩展我的/。

3为什么你的根目录显示有1.96 GiB未使用的空间?实际上你还有空间,对吧?df命令的输出是什么? - Braiam
1apt-get clean不会弹出窗口,甚至不会在命令行上显示它所做的操作。它只是默默地执行,但现在释放出的1.96 GB空间表明它确实有所作为。 - chaskes
3个回答

你实际上可以在不重新启动的情况下使用最后的4.25 GiB,因为Linux从2.6内核开始支持在线分区调整(意味着你可以在挂载的情况下调整分区大小,甚至是根分区,而无需重新启动)。
我将向你展示如何删除交换分区并将根分区扩展到最后的所有可用空间。然后,我将使用开头的未分配空间(14.35 GiB)创建一个新的交换分区。当然,14.35 GiB有点多,所以你也可以选择使用一部分来扩展你的NTFS分区。
  1. 打开 GParted
  2. 右键点击 /dev/sda11,选择 Swapoff
  3. 右键点击 /dev/sda11,选择 Delete
  4. 点击 Apply All Operations
  5. 打开终端
  6. 扩展根分区:
  7. sudo resize2fs /dev/sda10
    
  8. 返回到 GParted
  9. 打开 GParted 菜单,点击 Refresh Devices
  10. 右键点击未分配空间,选择 New
  11. 选择 linux-swap 作为文件系统
  12. 点击 Add
  13. 点击 Apply All Operations

起初我只使用命令行写了这个,但后来我决定尽可能多地使用GParted,因为这样你可能更容易看到发生了什么。你甚至可以使用GParted扩展根分区。但在操作之前,你需要卸载根分区。也就是说,你应该离线工作(使用liveUSB)。在某些情况下,你的grub可能会受损。所以在离线工作结束之前,请重新安装你的grub。

我相信GParted会自动启用新的交换分区,但我不确定。你可以通过右键点击它,然后选择Swapon来检查。如果没有这个选项,交换分区可能已经启用。

此外,刷新设备这一步可能是不必要的,但你应该按照它来确保。

我们无法调整扩展分区(在此情况下为), 因为它内部有一个已挂载的逻辑分区。所以我们需要启动Ubuntu USB/CD驱动的实时模式。从那里,启动GParted,如果需要的话关闭交换分区,右键单击扩展分区并调整大小以满足您的需求。然后,根据需要按照所述步骤调整根分区并添加回交换分区。如果您的根分区UUID发生更改,您可以通过在实时模式下执行以下步骤来更新Grub:
sudo mount /dev/sda10 /mnt 
sudo mount -o bind /dev/ /mnt/dev 
sudo grub-install --root-directory=/mnt /dev/sda 
sudo chroot /mnt /bin/bash 
# Now within the chroot
sudo update-grub
exit
# Now outside chroot

首先,前几个命令会挂载根分区(在这个例子中是sda10),并设置/dev/以便在chroot环境中使用(其他可以类似挂载的分区有/proc、/sys和/dev/pts,以实现更完整的chroot功能)。然后我们重新安装grub(其实并不是必要的)。接下来,我们进入chroot环境并更新grub。这将使grub在必要时使用新的UUID。退出chroot后,重新启动计算机,我们应该能够看到grub菜单恢复正常。

@muru:是的,它确实起作用了。我的引导菜单恢复了!非常感谢。想知道在哪里学习这些技能?我也想学习。 - Ramvignesh
2@Ramvignesh - 没有一个单一的指南,但如果你在Ask Ubuntu上停留一段时间,你会找到很多信息。这里的人们会链接到很多有用的网站,你会看到各种问题以及比你或我更聪明的人是如何解决它们的。在这种情况下,我从https://help.ubuntu.com/community/Grub2/Installing了解到了GRUB。 - muru
6这些说明是不正确的:在未改变分区大小的情况下运行 resize2fs 将不起作用。您也没有必要在命令行中运行东西,因为 gparted 会为您处理这个问题。只需在 gparted 中调整根分区的大小即可。 - psusi
1这对我来说很有效,但是我想指出根据这个链接 http://askubuntu.com/a/600017/223089,你可以直接在Gparted中扩展分区。所以我同意上面@psusi的观点,在第6步中在Gparted中扩展分区更容易一些。 - John Creamer
@JohnCreamer,我在之前的评论中要表达的主要观点是这些说明遗漏了实际扩大分区的步骤,没有这一步,你就无法扩大文件系统(因为它不能超过包含它的分区的大小),所以如果你完全按照这些说明操作,它们对你来说是行不通的。 - psusi
@psusi,我明白你的观点。由于你的评论对我来说更有道理,所以我甚至没有尝试resize2fs。因此,我向你的专业知识致敬。我是Stack Overflow中最不合格的贡献者之一,所以我选择不反驳原帖,而只是解释了对我有效的方法。正如你所指出的,我不应该写“更容易”,而应该写“在第6步中,我在Gparted中扩展了分区”。 - John Creamer
1只需要运行sudo resize2fs /dev/sda10命令即可。谢谢。 - ATOzTOA
警告一下。我之前有一个双系统启动,但是按照更新GRUB的指令后,Windows从启动菜单中消失了。不过这个问题很容易通过使用Boot Repair Disk来恢复。 - XavierStuvw
@LouisMatthijssen,你能否详细解释一下引用的内容“其他可以类似地挂载到chroot中以实现更多功能的分区是/proc、/sys和/dev/pts”?为什么这会是一个有吸引力的选择?是否可以按照这个类似的帖子中的方法执行for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done - XavierStuvw
swapoff之后,我无法调整根分区的大小,只能调整交换分区的大小,这当然不是我想要的。我做错了什么? - erikbstack
嗨,请你看一下这个链接 https://askubuntu.com/questions/936232?谢谢。 - Royi
这个问题和这些评论相对来说比较旧,所以我想我可以加入讨论,分享一下4年后的情况。不需要使用shell;GParted可以完成所有操作。我关闭了交换分区,删除了它,应用了操作,将根目录扩展到原本的交换分区上,从根目录前面的分区(我在Windows 10中创建的)创建了一个新的交换分区,使其紧邻根目录;最后创建了一个FAT32分区用于共享数据文件(例如mp3),然后应用了操作。每次应用后,GParted会自动刷新。无需重新启动,也不需要Live CD/DVD/USB驱动器。 - hlongmore

你在使用系统的分区(以及父扩展分区,如`/dev/sda4`)时无法修改它们,因此你需要从系统外部修改分区 - Ubuntu安装盘可以做到这一点。首先,你需要从光盘启动,并打开GParted。
  • 如果分区旁边有一个钥匙图标,表示它们正在被使用 - 你需要右键单击它们并选择卸载。
  • 对于实际的调整大小,有两件相对容易的事情你应该能够做到:

    • 将扩展分区`/dev/sda4`扩展到磁盘的末尾,将交换分区向右移动,然后扩大`/dev/sda10`分区。

    • 减小`/dev/sda9`的`/home`分区的大小,然后扩大`/dev/sda10`分区。

不过,将`/dev/sda4`中的所有分区都向左移动,然后移动交换分区并扩大分区也是可行的。

尽管在“/”分区中拥有5~GB的空间可以运行系统,但至少需要7-10GB的空间才能更好地工作。
正如您应该始终做的那样,在进行任何操作之前,应备份您的数据。此外,由于您在已安装的Ubuntu系统上仅使用了4GB,您可以将其备份到其他位置并进行全新安装,这意味着旧系统的软件包不会占用空间。

4当建议OP移动分区(而不是扩展它们)时,你应该提到这可能需要很长时间,并且他需要从实时媒体重新安装/修复grub2。 - chaskes

通过使用图形用户界面和gparted,我调整了驱动器上一个相对较大的分区的大小,更具体地说是缩小了它,然后剩下了一些未分配的空间。
接下来,我尝试通过右键单击根分区并选择调整大小和扩展来扩展根分区,但新的未分配空间在选定的分区中不可见或无法附加。
经过一番折腾,我发现我需要让根分区和未分配的空间在gparted的分区列表中相邻(这可能与它们在物理驱动器上的实际位置相对应)。
所以对于这种特殊情况,我有一个将根分区和未分配空间隔开的分区,我右键单击该分区,然后通过在垂直条上点击和拖动其空间,将它移动到前面的位置;这样我就可以按照新的升序顺序得到三个分区:根分区(/)- 新发现的未分配空间 - 分隔分区。
应用更改并重新排序分区后,我能够通过附加未分配空间来扩展根分区。