我正在使用快照来备份@home
子卷的数据。但我想备份真正重要的数据(例如我的所有文件,它们位于 中@home
,但不是隐藏目录,因为我对备份.cache
和其他经常更改的内容不感兴趣,因为这会导致我的增量备份解决方案浪费大量空间。
我是否可以以某种方式实现这一点,即我的真实数据是一个子卷,而无需创建包含所有数据并作为自己的子卷的home
目录,或者这在设计上是不可能的?home
我的备份方法类似:https://btrfs.wiki.kernel.org/index.php/Incremental_Backup
答案1
点文件对文件系统没有特殊含义,并且btrfs send
目前(2014 年 2 月)不能从目标子卷中排除文件或目录。
但是,btrfs subvolume snapshot
确实排除了目标子卷中包含的子卷(它在快照中创建空目录),因此
- 您可以用子卷替换想要排除的目录。
rsync
或诸如 的图形前端grsync
,可以排除文件和目录并允许增量备份。
如果您将参数传递--inplace
给rsync
,它只会覆盖文件中已更改的不同部分,而不是重写文件的全部内容。根据定义,这是增量备份,可节省 btrfs 上的空间。
指示:
@home
第一次使用 进行备份btrfs send/receive
。
要进行进一步的备份:创建 备份的快照@home
,然后运行rsync
将当前主目录复制到新创建的快照上,并记得给出rsync
参数--inplace
。
rsync
允许对备份过程进行广泛的自定义,您可以通过运行来读取参数列表man rsync
在终端上。
为了完整起见,我将添加另一种方法,一旦您知道如何使用,这种方法就没有用了rsync
:在“正常”复制(rsync
或cp
其他任何方法)后进行重复数据删除。
- 正常复制文件,然后使用床铺。(引入了支持内核 3.12 的新 bedup 分支,但在撰写本文时它不适用于 Ubuntu,因为甚至 Ubuntu 13.10 也没有如此新的内核)。如果您按照上面的建议传递
--inplace
到,则没有必要这样做。rsync
说到备份:请记住 btrfs 是实验性的,bedup 也是如此。
答案2
不,你不能这么做。至少不能直接这么做。
快照的工作方式类似于目录,这意味着全部其中包含了其下面的文件。
您仍然可以使用符号链接或 s 做各种奇特的事情mount --bind
。
您为什么如此关心临时文件?从实际目的来看,它们确实很小,而且通常都会保存/tmp
(除了 Firefox 或 GoogleEarth 等少数知名应用程序)。如果我是您,我会重新配置这几个应用程序以将数据保存在其他地方,或者 - 如果失败 - 我会将缓存目录符号链接到 /home/user 之外的其他地方。有一些工具可以以一致的方式管理所有计算机上如此复杂的符号链接网络(例如 Puppet)。
请记住,这种备份只是真正保护数据所需的一半。通常,人们会将备份程序配置为挑选他们关心的文件/文件夹,并将备份存储在外部的服务器。它是一个中央服务器,所有与快照相关的数据魔法都在这里发生,而不是客户端。
我个人习惯unison
将我的数据与中央服务器上的 btrfs 子卷同步。在我所有的电脑每次同步之后,我都会使用SnapBtr脚本来执行快照。