当我尝试创建快照时:
[root@localhost ~]# btrfs subvolume snapshot /home/admin2/ /.snapshots/s2
ERROR: Not a Btrfs subvolume: Invalid argument
如何为目录创建 BTRFS 快照?
答案1
我不知道有什么简单的方法。我会说不,这不可能直接发生。
如果admin2/
是子卷那就没有问题了。不过,我认为您不能透明地立即将目录转换为子卷。
有一个解决方法:
创建包含 的整个子卷的快照
admin2/
。admin2/
从快照中删除除 * 之外的所有内容。重新排列快照中的数据:
- 将*的内容移动
admin2/
到快照的顶级目录; admin2/
从快照中删除剩余内容(例如* 目录,现在为空)。
- 将*的内容移动
根据原目录更改快照顶级目录的所有权和模式
admin2/
。
通过这种方式,您可以手动创建所需的子卷:目录的快照。
如果您认为将来想要重复此过程,请考虑用子卷替换原始目录。将目录移开(重命名或删除它),然后将子卷移到其位置。请注意,子卷变得/home/admin2/
如此,因此您很可能想要创建另一个快照。但现在创建快照很容易,您尝试的命令现在应该可以工作了。
* 不要将admin2/
快照与原始目录混淆。我admin2/
用星号表示的地方是admin2/
在快照中。
元注释:坦白说,我差点重复了这个另一个答案。问题在于将目录转换为子卷,您可能愿意也可能不想这样做。由于这一差异,我并没有简单地向您指出另一个答案;而是向您指出了另一个答案。我决定根据您的问题解释该程序。但区别主要在于问题。该过程的唯一区别在于您最终是否更改了几个名称。如果您发现我的答案有用,请考虑对链接的答案进行投票。
答案2
只能为子卷拍摄快照。没有直接的方法将目录转换为子卷。
但如果您只想在磁盘上共享相同数据的目录副本,您可以按照维基百科并使用cp --reflink
:
cp -ax --reflink=always src/. dest
这将仅创建目录的普通副本,但不会复制所有文件数据,而是与原始目录共享(=reflinked)。基本上,这与快照相同,如果您想将副本放在单独的子卷中,您只需创建一个空子卷并将目录复制到其中即可。
根据您的数据,这可能比@卡米尔斯回答因为删除所有其他文件可能需要一段时间才能删除大量文件。