是否可以将 btrfs 分区逐字备份(包括通过将快照树标记为 COW 来节省空间的所有共享结构)到另一个分区?例如,我想备份有几个 btrfs 子卷(/ 本身的快照)的根分区。
我能想到的唯一方法是使用块复制工具dd
,但效率很低,因为我的分区只占了 20%,我打算定期备份。我已经使用 增量备份了所有内容rsync
,因此这不是解决另一个问题的解决方法。我只需要一点来对我的 btrfs 分区进行位克隆,而不必使用 之类的工具dd
。
例如,我知道 ext3 提供了转储和恢复实用程序。这就是我正在寻找的东西。
更新
这里有一个更新,以澄清这样一个事实:我希望能够以与在活动磁盘上相同的方式访问备份存储上的文件(即,我不想将转储文件存储在备份存储上)。
答案1
部分克隆是您正在寻找的工具。
- 它支持很多 Linux 文件系统,包括 BTRFS
- 它甚至支持一些其他文件系统(如 FAT 或 exFAT)
- 与它不同的是,
dd
它查看文件系统分配图(例如:FAT 和 exFAT 的 FAT 表、BTRFS 范围图等)并仅克隆已使用的块。
根据您的使用模式:
- 如果源和备份目标黑色设备在同一台机器上可见(基本上如果两个磁盘都插入同一台计算机),则使用
-b
(长:) 。--dev-to-dev
- 或者使用
-c
and-r
(长:--clone
and--restore
)首先在源机器上克隆到 partclone 自己的镜像格式,然后在备份机器上从镜像中恢复 - 根据partclone 手册页,可以通过管道传输图像,因此如果空间不足但网络极其可靠,那么应该可以通过网络复制分区而不保存实际文件。
处理该问题的完全不同的方法是使用btrfs send
机制btrfs receive
。
- 这不会产生块设备副本到扇区
- 但通过在两端正确提供引用,还能够保持 ref-linked 文件(部分)之间的引用。
因此,btrfs 自身的机制并不是部门完美复制(与 partclone 不同),但它是程度rsynv -aSHAX
完美复制(比仅处理硬链接文件要好得多)。
答案2
通过管道传输输出,dd
例如bzip2
或您最喜欢的其他压缩程序,这些程序将从标准输入读取。我在一个 500 GB 的磁盘上执行了此操作,该磁盘的安装相对较小,最终得到了一个 8 GB 的文件。
答案3
尚未尝试,但btrfs-image
似乎可以解决这个问题:
https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-image
更新:不要将其用作备份。感谢您的评论。
我将这个保留并且不会删除它,以便其他人也可以从中学习。
答案4
我认为显然还没有这样的工具(目前还没有)。