快照是Btrfs的一个有趣的特性。快照是子卷的副本。立即拍摄快照。但是,与执行rsync或cp不同,生成快照不会在创建后立即占用空间。编者按:来自BTRFSWiki:快照只是一个子卷,它使用Btrfs的COW功能与其他子卷共享其数据(和元数据)。占用的空间将随着原始子卷或快照本身(如果可写)上的数据更改而增加。子卷中添加/修改的文件和删除的文件仍然存在于快照中。这是一种方便的备份方式。使用快照备份快照与子卷位于同一磁盘上。您可以像浏览普通目录一样浏览它,并将文件的副本恢复为拍摄快照时的状态。顺便说一句,在与快照子卷相同的磁盘上拍摄快照并不是理想的备份策略:如果硬盘出现故障,快照也会丢失。快照的一个有趣特性是能够将快照发送到另一个位置。快照可以发送到外部硬盘驱动器或通过SSH发送到远程系统(目标文件系统也需要格式化为Btrfs)。为此,请使用命令btrfssend和btrfsreceive。要使用btrfssend和btrfsreceive命令生成快照,将快照创建为只读很重要,而快照默认是可写的。下面的命令将拍摄/home子卷的快照。请注意,-r标志代表只读。sudobtrfssubvolumesnapshot-r/home/.snapshots/home-day1快照的名称可以是当前日期而不是day1,如home-$(date+%Y%m%d)。快照看起来像普通的子目录。你可以把它们放在任何你喜欢的地方。目录/.snapshots可能是保持它们整洁并避免混淆的好选择。编者注:快照不会递归地快照自身。如果创建子卷的快照,则子卷中包含的每个子卷或快照都将映射到快照中具有相同名称的空目录。使用btrfssend备份在此示例中,USB记忆棒上的目标Btrfs卷挂载为/run/media/user/mydisk/bk。将快照发送到目标卷的命令是:sudobtrfssend/.snapshots/home-day1|sudobtrfsreceive/run/media/user/mydisk/bk这个叫做初始引导,相当于一个完整的备份。此任务可能需要一些时间,具体取决于/home目录的大小。显然,后续的增量发送只会花费更少的时间。增量备份快照的另一个有用特性是能够以增量方式执行发送任务。让我们再拍一张快照。sudobtrfssubvolumesnapshot-r/home/.snapshots/home-day2为了执行增量发送任务,需要指定之前的快照作为依据,并且这个快照必须存在于源文件和目标文件中。请注意-p选项。须藤btrfs发送-p/.snapshot/home-day1/.snapshot/home-day2|sudobtrfs再次接收/run/media/user/mydisk/bk(一天后):sudobtrfssubvolumesnapshot-r/home/.快照/home-day3sudobtrfssend-p/.snapshot/home-day2/.snapshot/home-day3|sudobtrfsreceive/run/media/user/mydisk/bk清理操作完成后,可以保留快照。但是,如果您每天执行这些操作,您最终可能会得到许多快照。这可能会导致混乱,并会占用大量磁盘空间。因此,如果您认为您不再需要某些快照,最好删除它们。请记住,为了执行增量发送,您至少需要最后一个快照。此快照必须同时存在于源文件和目标文件中。sudobtrfssubvolumedelete/.snapshot/home-day1sudobtrfssubvolumedelete/.snapshot/home-day2bk/home-day2注意:第3天的快照保存在源文件和目标文件中。这样,明天(第4天),您可以进行新的增量btrfs发送。最后的建议是,如果U盘空间很大,可以考虑在目标盘保留多张快照,源盘只保留最后一张快照。
