我的笔记本电脑上有 Linux/Windows 双启动设置,我过去常常将大部分数据保存在 Windows 分区上,以便能够从两个系统访问它。由于我几乎从不使用Windows,所以我缩小了NTFS分区并计划将数据移动到格式化为btrfs的Linux分区。事先需要在当前可用空间所在的位置扩展 btrfs 分区。
fdisk 可以移动分区的开头,但不影响文件系统。从 3.0 版开始,parted 也无法处理文件系统。
解决该问题的一种方法是在可用空间中创建一个分区并将其作为后备设备添加到 btrfs,然后从 btrfs 中删除原始 btrfs(使用btrfs device
)和分区表,然后将剩余的 btrfs+分区扩展为驱动器的末端。这里的问题是新的可用空间必须足够大才能容纳 btrfs 中的所有文件,并且所有数据都必须移动。
所以我的问题是:是否有其他一些,最好是更优雅且普遍适用的方法来在一开始就扩展 btrfs?
编辑:(解决方案)
即使 GParted 可能能够在开始时通过自动移动文件系统来调整大小,但我尝试了上述方法,因为我有可用空间。由于它花费了很长时间(可能是因为有很多子卷),使用了很多 cpu 和 I/O 资源,然后因 I/O 错误而中止,btrfs replace
所以我使用了它,效果很好:花了几个小时,在此期间计算机完全可用。
答案1
不,没有其他办法了。事实上,我不知道有任何文件系统允许在开始时调整大小。
因此,您可以将新分区添加到池中,从而不必移动数据,或者按照您所描述的方式继续。
答案2
解决该问题的一种方法是在可用空间中创建一个分区并将其作为后备设备添加到 btrfs,然后从 btrfs 中删除原始 btrfs(使用
btrfs device
)和分区表,然后将剩余的 btrfs+分区扩展为驱动器的末端。这里的问题是新的可用空间必须足够大才能容纳 btrfs 中的所有文件,并且所有数据都必须移动。
这可以通过多个步骤完成。步骤的数量取决于文件系统中有多少可用空间以及相关分区的大小。该过程将来回移动数据,这会给磁盘带来压力,这需要时间和精力;但文件系统将始终在线。
我已经用大约 2 TB 的数据完成过一次。无论如何,它是在 24/7 工作的家庭路由器/服务器上,所以我可以每隔几个小时检查一次,以最终开始下一步。我依稀记得这花了一周多的时间。你的旅费可能会改变。
一般来说,您需要(临时)创建许多分区,而不是按照磁盘顺序,所以我不确定是否可以轻松(或根本)使用 MBR 中的 dos 分区表来完成。我已经使用 GPT 完成了此操作,并且我认为这就是您正在使用的类型。
步骤:
- 将新分区 (
N
) 添加到旧文件系统,就像您所描述的:btrfs device add … /the/mountpoint
。 - 专门缩小旧分区 (
O
) 上的文件系统:btrfs filesystem resize <devid>:-… /the/mountpoint
。您必须指定正确的<devid>
,运行btrfs filesystem show /the/mountpoint
才能找到它。我建议缩小显着小于文件系统中的可用空间(这将在步骤 11 中变得清晰,继续阅读)。 - 通过更改其末尾扇区将旧分区缩小相同的量。不要更改起始扇区。
- 现在旧分区后就有了可用空间。在那里创建一个新的临时分区 (
A
)。 - 将新的临时分区添加到文件系统。
- 从步骤 2 开始重复,直到旧分区(在一次又一次调整大小之后)足够小(与文件系统中的可用空间相比),这样您就可以将其从文件系统中删除。在此循环中,您将创建几个临时分区(
B
、C
、D
、 ...)。 - 从文件系统中删除旧分区:
btrfs device remove /dev/… /the/mountpoint
. O
从分区表中删除旧分区 ( )。N
尽可能向右扩展新分区 ( )。- 最大程度地调整新分区上的文件系统大小:
btrfs filesystem resize <devid>:max /the/mountpoint
。 - 从文件系统中删除与新分区相邻的临时分区。如果文件系统中没有足够的可用空间,此步骤可能会失败。这就是您不应在步骤 2 中过度收缩文件系统的原因。使用明显小于文件系统中可用空间的分区可以为您提供安全裕度,特别是在文件系统处于活动使用状态且可用空间可能波动的情况下。
- 从分区表中删除与新分区相邻的临时分区。
- 从步骤 9 开始重复,直到无法执行步骤 11,因为没有剩余的临时分区。
下图是该过程的可视化。圆盘从左到右跨越,时间从上到下流动。传奇:
O
– 旧分区N
– 新分区A
,B
,C
, … – 临时分区-
– 未分配的空间…
– 为简洁起见省略了步骤
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO----
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOAAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOO----AAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOBBBBAAAA
NNNNNNNNOOOOOOOOOOOOOOOOOOOOOO----BBBBAAAA
…
NNNNNNNNOOOOOOGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNOO----GGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNOOHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNN--HHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNN----GGGGFFFFEEEEDDDDCCCCBBBBAAAA
NNNNNNNNNNNNNNGGGGFFFFEEEEDDDDCCCCBBBBAAAA
…
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNBBBBAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN----AAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAAA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN----
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
完毕。整个文件系统位于一个分区内,该分区在您想要的位置开始和结束。