如何重命名BTRFS子卷?


24

我有一个BTRFS文件系统,其中包含一组子卷。到目前为止,一切都很好。我需要更改子卷的名称,不幸的是该btrfs程序不允许我重命名子卷。用Google搜索产生了一些结果,一个说我可以mv,另一个说我可以snapshot重新命名并删除旧的子卷。在我使分区崩溃并不得不从备份中重新加载分区(它相当大)之前,我的问题是:

  • 当前重命名子卷的最佳方法是什么?
  • 可以mv这样做还是会使某些内部结构失效?
  • 是要制作新快照并删除旧子卷,还是有一些缺点?

我知道一切仍处于试验阶段,但就我的目的而言,它一直运行良好(到目前为止,我每天都有增量备份)。


1
很高兴听到btrfs对您有效。到目前为止,它对我来说也很好。没问题。
Monica Cellio的MountainX 2012年

Answers:


16

就是mv这样 这是Ubuntu社区文档中推荐的方法。

为了进一步阐明为什么这样做是正确的方法,以下是btrfs sysadmin指南的引文:

快照

快照只是一个子卷,使用btrfs的COW功能与其他子卷共享其数据(和元数据)。制作了[可写]快照后,原始子卷和新快照子卷之间的状态就没有区别。要回滚到快照,请卸载修改后的原始子卷,然后将快照安装在其位置。此时,可以根据需要删除原始子卷。由于快照是子卷,因此快照的快照也是可能的。


8

有几件重要的事情要注意。命名:

btrfs子卷-独立的数据容器inside文件系统。它表示为现有FS的目录。如果创建新的子卷,该子卷将为空,可以在文件系统中使用逻辑数据块。非常适合在逻辑上分离数据的地方使用,例如,不同子卷上的不同VM或不同客户端。这使得very fast清除所有与刚子卷delete命令的逻辑数据块。

btrfs Snapshot- existing子快照的副本,其中包含快照完成时的所有数据。可以用作还原设置或更改的操作备份,例如,创建子卷快照,进行更改(VM或数据),测试是否一切正常,在宽限期后删除快照。重要说明:快照只能是只读的(-r切换),因此可以用作FS更改的增量块,并且有可能绝对转移到另一个BTRFS!

当前(2016-12-30)BTRFS限制:

在子卷之间复制或移动数据,例如mv dir1/dataset1 dir_subvolume1/产生所有实际数据,以将数据复制到另一子卷,并且在移动的情况下,从原始卷中删除。而且非常高效的只是进行引用,因此使用BTRFS的COW功能复制的数据吨:

cp -a --reflink=always dir1/dataset1 dir_subvolume1/

并且如果需要:

rm -rf dir1/dataset1

只读子卷快照可以mv在现有目录级别重命名(移动),但不能重命名/移动到其他子目录级别。例如mv /btrfs/subvol_snap1 /btrfs/.snaphots,不可能,不会产生太多的解释错误: mv: cannot move 'subvol_snap1' to '.snapshots/subvol_snap1': Read-only file system。为了能够移动这样的快照,您需要将现有只读快照的新只读快照创建到新的首选位置,然后删除旧的快照:

btrfs sub snap -r /btrfs/subvol_snap1 /btrfs/.snaphots/subvol_snap1
btrfs sub del /btrfs/subvol_snap1

只是为了让生活更轻松:

btrfs sub list /btrfs

我希望这将为所有新的btrfs粉丝节省大量时间:)


4

如果要将根卷重命名为嵌套子卷,则需要对其快照,然后执行操作find $ROOT_VOL -xdev -delete以删除根卷的先前内容。似乎无法进行反向操作(将子卷重命名为根卷)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.