hoc*_*chl 27 linux backup filesystems btrfs
我有一个 BTRFS 文件系统,其中包含一组子卷。到现在为止还挺好。我需要更改子卷的名称,不幸的是btrfs程序不允许我重命名子卷。用谷歌搜索得到了一些结果,一个说我可以mv,另一个说我可以换snapshot一个新名字并删除旧的子卷。在我崩溃我的分区并必须从备份中重新加载它之前(它非常大),我的问题是:
mv这样可以吗,还是会使某些内部结构无效?我知道一切都还处于试验阶段,但就我的目的而言,它一直运行良好(到目前为止,我每天都有增量备份)。
Mou*_*inX 19
就mv这样。这是Ubuntu 社区文档中推荐的方式。
为了进一步阐明为什么这是正确的方法,这里引用了 btrfs 系统管理员指南:
快照
快照只是一个子卷,它使用 btrfs 的 COW 功能与其他一些子卷共享其数据(和元数据)。一旦创建了[可写]快照,原始子卷和新快照子卷之间的状态没有区别。要回滚到快照,请卸载修改后的原始子卷,并在其位置安装快照。此时,如果愿意,可以删除原始子卷。由于快照是一个子卷,快照的快照也是可能的。
有几件重要的事情需要注意。命名:
btrfs Subvolume - 独立的数据容器inside文件系统。它表示为现有 FS 的目录。如果您创建新的子卷,它将是空的,准备在文件系统中使用逻辑数据块。在数据应该在逻辑上分开的地方使用非常方便,例如不同的虚拟机或不同子卷上的不同客户端。这使得very fast清除所有与刚子卷delete命令的逻辑数据块。
btrfs Snapshot -existing在 os 快照完成时包含所有数据的subvolume副本。可用作恢复设置或更改的操作备份,例如制作子卷快照、进行更改(VM 或数据)、测试是否一切正常,在一些宽限期后删除快照。重要的是要注意:快照可以是只读的(-r开关),因此可以用作 FS 更改的增量块,并可能转移到绝对另一个 BTRFS!
当前 (2016-12-30) BTRFS 限制:
在子卷之间复制或移动数据,例如mv dir1/dataset1 dir_subvolume1/生成所有真实 io 以将数据复制到另一个子卷,以及在移动的情况下从原始子卷中删除。而且非常高效的只是进行引用,因此使用BTRFS的COW功能复制的数据吨:
cp -a --reflink=always dir1/dataset1 dir_subvolume1/
Run Code Online (Sandbox Code Playgroud)
如果需要:
rm -rf dir1/dataset1
Run Code Online (Sandbox Code Playgroud)
只读子卷快照可以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
Run Code Online (Sandbox Code Playgroud)
只是为了更轻松的生活:
btrfs sub list /btrfs
Run Code Online (Sandbox Code Playgroud)
我希望这将为所有新的 btrfs 粉丝节省大量时间:)