我想尝试一下 Btrfs。我已经发现您可以制作实时系统的快照,但有一些事情我还没有找到答案。嗯,据我了解,快照基本上是某种存档形式的完整副本。那么我可以为我的实时 btrfs 系统创建一个快照并将该快照放置在我的非 btrfs 硬盘驱动器上(例如 ext4)吗?
另外,我正在运行全盘加密(luks)。如果我将快照传输到某个地方,它们是否会被加密?快照是否从分区本身复制实际数据(在这种情况下,显然它会被加密)或者它的工作方式有所不同?
另外,如何保护 btrfs 快照免遭读取访问?其他用户可以读取快照吗?还是只root?它可以管理吗?
答案1
我将补充吉尔斯的答案,尽管你可以使用“ cp
,,rsync
等等。”要传输只读子卷/快照,您还可以使用该btrfs send
命令将子卷发送并存储为 btrfs 流。Btrfs 维基提到以下用途:
# btrfs subvolume snapshot -r / /my/snapshot-YYYY-MM-DD && sync
# btrfs send /my/snapshot-YYYY-MM-DD | ssh user@host btrfs receive /my/backups
# btrfs subvolume snapshot -r / /my/incremental-snapshot-YYYY-MM-DD && sync
# btrfs send -p /my/snapshot-YYYY-MM-DD /my/incremental-snapshot-YYYY-MM-DD |
ssh user@host btrfs receive /backup/home
但您也可以保存流以供将来使用:
# btrfs subvolume snapshot -r / /my/snapshot-YYYY-MM-DD && sync
# btrfs send /my/snapshot-YYYY-MM-DD |
ssh user@host 'cat >/backup/home/snapshot-YYYY-MM-DD.btrfs'
# btrfs subvolume snapshot -r / /my/incremental-snapshot-YYYY-MM-DD && sync
# btrfs send -p /my/snapshot-YYYY-MM-DD /my/incremental-snapshot-YYYY-MM-DD |
ssh user@host 'cat >/backup/home/incremental-snapshot-YYYY-MM-DD.btrfs'
这对于将逐字 btrfs 快照存储在任意文件系统中非常有用。相比之下,优点tar
是btrfs
快照是增量的,并且仅发送增量。 btrfs Wiki 声称这种增量备份方法往往比rsync
.
答案2
快照(在这个意义上)是文件系统的一部分。在 btrfs 术语中,它是一个子卷 — 它是卷上的目录树之一。它不是“存档形式”。制作子卷的快照会创建一个新的子卷,其中包含制作快照之日原始卷的数据。对原始子卷的后续写入不会影响快照,反之亦然。所有子卷都是同一卷的一部分 - 它们指定卷中数据的子集(可能重叠)。
任一子卷中未修改的快照部分共享其存储。创建快照最初不需要存储,除了快照控制数据之外;随着子卷内容的不同,存储量会随着时间的推移而增加。
快照创建最重要的属性是它是原子的:它拍摄某个时间点的数据图片。这对于进行备份很有用:如果备份程序从实时系统复制文件,则它可能会与文件修改交互不良。例如,如果将文件从目录 A 移动到目录 B,但备份程序在移动之前遍历了 B,在移动之后遍历了 A,则该文件不会包含在备份中。快照解决了这个问题:如果快照是在移动之前创建的,则文件将位于 A 中,如果快照是在移动之后创建的,则文件将位于 B 中,但无论哪种方式,它都会在那里。然后备份程序可以从快照复制到外部介质。
由于快照与原始卷位于同一卷上,因此它以相同的方式存储,例如,如果卷已加密,则快照也会被加密。
快照复制原始目录树,包括权限和所有其他元数据。所以权限和原来的一样。此外,用户必须能够访问快照目录本身。如果您根本不希望用户能够访问快照,请将其创建在他们无法访问的目录下(您可以将快照放置在您想要的任何位置)。
如果您想在文件系统之外创建快照的副本,请访问或安装快照,然后使用您喜欢的程序( 、 等)创建cp
副本rsync
。您可以在以下位置找到示例命令维基百科;请参阅手册页以获取完整参考。