是否可以在同一根目录内重新定位 btrfs 子卷的挂载点?

是否可以在同一根目录内重新定位 btrfs 子卷的挂载点?

我在/docker/nc/data路径下创建了一个btrfs子卷。如下图:

$ sudo btrfs subvolume list /
ID 256 gen 13908 top level 5 path docker
ID 257 gen 13877 top level 256 path docker/nc/data

是否可以将子卷移动到子卷面板中的某个位置?例如

/docker/nc/config/data

里面有将近90GiB的数据,不复制的话能完成吗?

答案1

是的,可以在同一根目录内重新定位 Btrfs 子卷而无需复制数据。Btrfs 提供了使用带有“-r”选项的 Btrfs subvolume set 命令执行子卷重新定位的功能。以下是实现方法:

确保目标子卷(docker)内有足够的可用空间来容纳要移动的子卷(docker/nc/data)中的数据。

继续操作之前,请确保没有活动进程正在访问或修改要重新定位的子卷。如果子卷当前已挂载,建议将其卸载。

打开终端或 shell 并运行以下命令来执行子卷重定位:

sudo btrfs subvolume set-default <new_path> <old_path>

对于您来说,命令看起来应该是这样的:

sudo btrfs subvolume set-default /docker/nc/config/data /docker/nc/data
  1. 执行该命令后,子卷将重新定位到新路径,但不复制数据。需要注意的是,该过程是即时的,因为它只是更新子卷的元数据。

  2. 最后,您可以通过再次列出子卷来验证重定位:

sudo btrfs subvolume list /

您应该看到子卷 docker/nc/data 已被重定位到新路径 docker/nc/config/data,同时保留了数据。

请记住更新任何依赖旧路径的引用或配置以反映新路径。

请注意,始终建议在对文件系统结构进行任何修改之前备份数据。

相关内容