如何调整和缩小BTRFS分区?

我把我的 /home 放在一个 BTRFS 分区上,现在需要缩小它。

很遗憾,Gparted 没有这个文件系统的调整大小选项。

我能以其他方式调整大小而不丢失数据吗?


在使用GParted对BTRFS RAID阵列进行操作时要小心。如果文件系统大于分区,可能会导致数据丢失:不要使用GParted来调整多设备的BTRFS文件系统大小! - basic6
4个回答

根据此页面btrfs wiki中的说明:
要将文件系统缩小4 GiB:btrfs filesystem resize -4g /mnt 或 btrfsctl -r -4g /mnt 设置FS大小。要设置特定大小的文件系统,请省略大小前面的+或-。
在Ubuntu中,btrfsbtrfsctl命令由名为btrfs-utils的软件包提供,您可以在软件中心安装。您可以在终端(Ctrl+Alt+T)中运行这些命令。将4g替换为您真正想要缩小分区的大小,并将/mnt替换为分区的挂载点。例如,要将挂载在/media/Alpha上的btrfs分区缩小500 MiB,您可以运行以下命令: btrfs filesystem resize -500m /media/Alpha 或者: btrfsctl -r -500m /media/Alpha 假设调整btrfs文件系统大小的指南与其他文件系统相同,您应避免调整与正在运行系统相同物理磁盘上的分区大小。因此,如果需要,在启动时从实时系统引导以调整安装有Ubuntu系统的驱动器上的分区大小(这也适用于在GParted中进行的调整)。
如果某些工具或应用程序在执行调整操作时无法看到结果,则建议重新启动。
有关使用这些命令的详细信息,请参阅和手册页manual pages。希望btrfs wiki很快恢复正常。
我个人对btrfs文件系统不太熟悉,但我觉得这些调整命令使用文件系统的挂载点而不是设备名称似乎很奇怪。如果有人能解释一下,请评论或随意编辑此答案以改进它。

这确实有点奇怪,所以我需要挂载卷来调整大小吗?我一直以为使用未挂载的卷更安全...不管怎样,谢谢你的回答! - Borsook
17所列出的命令只能调整文件系统的大小,而不能调整分区的大小。这就是为什么它们可以在挂载的系统上运行的原因。一旦你调整了文件系统的大小,你就可以使用你喜欢的分区管理工具来改变实际分区的大小。但是,最新的gparted会为你完成所有操作,所以没有太多理由去麻烦自己。 - Perkins
有没有一种方法可以从前面调整大小,这样就不需要进行单独的长时间移动操作了? - Paul
1@Perkins 在之后将分区缩小500M,然后使用*(替换设备和大小)* parted -a opt /dev/sdX "resizepart 3 -500m"。其中的3是分区号,即/dev/sdX3 - Hi-Angel
@Hi-Angel 如果这是你最喜欢的分区管理工具,就去用吧! :D - Perkins
btrfs选择在挂载点而不是设备上进行操作的原因是,btrfs是一个多卷文件系统,需要重新定位的数据块应该被重新定位到最合适的卷上,而不仅仅是在要缩小的卷内部进行移动,同时还需要更新其他卷上的相关信息,例如属于RAID集的数据块。 - undefined


这不是对问题的直接回答,而是给那些通过 Google 搜索进入这里的人提供的。他们想知道是否可以在线缩小 / - 是的,可以。

我需要更多的交换空间,btrfs 不允许你从文件中运行交换空间,所以我不得不缩小 / 并重新创建分区(小心操作)。以下是我所做的事情,记住我想要额外的 64G 交换空间:

sudo btrfs filesystem resize -96g /
sudo fdisk /dev/nvme0n1

我有两个分区,一个用于/,另一个用于交换空间。删除了两个分区,然后重新创建(在重启之前!)。分区1的旧大小为867.5G,新大小为803.5G,为交换分区提供了额外的64G。当它询问是否要覆盖btrfs签名时,请选择NO!如果你像我一样使用交换空间,你需要将交换分区的"type"更改为"82",可以在创建时或之后使用"t"命令进行更改。
重启后,我运行了...
sudo btrfs filesystem resize max /

df -h然后报告:

/dev/nvme0n1p1  804G  498G  305G  63% /

所以,我最初将文件系统缩小了96G的原因是因为不同的工具对G和M的计算略有不同,所以为了确保文件系统不会被新分区略小于其上的文件系统覆盖!
重新启动后,如果您更改了交换分区,还需要在其上运行mkswap,例如sudo mkswap /dev/nvme0n1p2,然后执行"swapon"或再次重启。
这可能应该放在答案的开头,但不用说,您自行运行上述命令时要承担风险,并且在出现问题并丢失整个文件系统时,您应确保备份任何重要文件!希望这对某人有所帮助!

好的回答,我可能建议在使用fdisk删除/重新创建btrfs分区时添加一些关于不更改开始扇区的信息。对于您的情况来说并不必要,因为您的btrfs分区是1,但对于其他人来说可能不是这样。为了防止这些问题,我建议将来使用LVM。 - Pavin Joseph

使用此命令在GParted中安装支持:
sudo apt install btrfs-progs

在那之后,你可以轻松地在GParted中缩小和调整分区大小。这样你就可以在图形界面中完成所有工作,无需使用命令行。