我尝试找到一种有效的方法rsync
将文件系统的内容ext4
作为常规备份的一部分,但我考虑了适当的压缩和最小所需的空间。
我可以直接使用普通的rsync
/tar
结果gzip
目录,但是压缩本身会比前面的 rsyncing 慢几个数量级。
我无法使用squashfs
及其类似物,因为它们是只读的。
我可以为此备份创建一个特殊类型的分区,并具有内置压缩功能,例如btrfs
或reiser4
,但我必须以特定的大小创建它,并且它不会缩放。
我想知道是否有任何技术具有内置压缩功能的容器,可以透明地自动调整其大小根据数据量,rsynced一下吗?
顺便说一句,我使用 Debian GNU/Linux。
答案1
@Tetsujin 给了我正确的方向,OS X
的sparse
bundles/images确实有在 Linux 中模拟,这是稀疏文件。
稀疏文件会随着其中数据的增长而增长。它们可以包含任何 Linux 文件系统,包括任何具有内置压缩功能的现代变体,例如文件系统。
下面展示如何创建稀疏压缩的 btrfs 映像。文件系统可以通过安装启用 Debian 及其衍生产品(如 Ubuntu)的支持btrfs 工具包(sudo apt-get install btrfs-tools
)。我添加了一个稀疏ext4图像也用于比较速度和大小。所有操作均在 Debian 7.8 Wheezy(截至 2015 年 4 月 30 日的旧稳定版本)上执行。
创建任意大小的空稀疏文件。假设为 5 TB:
me@wheezy:~$ truncate -s 5T ext4.sparse btrfs.sparse
格式化它们
到ext4:
me@wheezy:~$ mkfs.ext4 ext4.sparse
mke2fs 1.42.5 (29-Jul-2012)
<...>
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
到文件系统:
me@wheezy:~$ mkfs.btrfs btrfs.sparse
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
fs created label (null) on btrfs.sparse
nodesize 4096 leafsize 4096 sectorsize 4096 size 5.00TB
Btrfs Btrfs v0.19
创建挂载点:
me@wheezy:~$ mkdir ext4_mount btrfs_mount
安装它们。不要忘记
loop
选项:
ext4:
me@wheezy:~$ sudo mount -o loop -t ext4 ext4.sparse ext4_mount
文件系统(不要忘记compress
选项(可以是zlib
或lzo
)):
me@wheezy:~$ sudo mount -o loop,compress=lzo -t btrfs btrfs.sparse btrfs_mount
- 就这样!文件系统已创建并挂载,在操作系统中显示为 5 TB,但实际上占用的空间很小:
自由度:
me@wheezy:~$ df -h | grep _mount
/dev/loop0 5.0T 189M 4.8T 1% /home/a/ext4_mount
/dev/loop1 5.0T 120K 5.0T 1% /home/a/btrfs_mount
杜:
me@wheezy:~$ du -h *.sparse
4.3M btrfs.sparse
169M ext4.sparse
- 为了测试,我创建了一个具有重复模式的 1.3 GB 大文本文件。它将被
cp
复制到两个新创建的文件系统:
ext4:
me@wheezy:~$ time sudo cp /store/share/bigtextfile ext4_mount/
real 0m12.344s
user 0m0.008s
sys 0m1.708s
文件系统:
me@wheezy:~$ time sudo cp /store/share/bigtextfile btrfs_mount/
real 0m3.714s
user 0m0.016s
sys 0m1.204s
正如上一步所见,文件系统在传输高度可压缩的数据时,它比传统的ext4. 之后我们来检查一下文件系统的大小:
me@wheezy:~$ df -h | grep _mount /dev/loop0 5.0T 1.5G 4.8T 1% /home/a/ext4_mount /dev/loop1 5.0T 46M 5.0T 1% /home/a/btrfs_mount
文件系统事实证明,这种方法更节省空间。最后,让我们检查一下稀疏文件的大小:
me@wheezy:~$ du -h *.sparse 50M btrfs.sparse 1.4G ext4.sparse
就是这样。如果需要,稀疏文件可能会进一步增大。btrfs 也可以在线调整大小。
定期备份的好方法rsync
。但不要忘记以更传统的方式备份这些文件,btrfs
因为仍为实验性的文件系统。
有关 Arch Wiki 的更多信息: https://wiki.archlinux.org/index.php/Sparse_file和https://wiki.archlinux.org/index.php/Btrfs
答案2
.sparsebundle 或 .sparseimage 可能是您所需要的......
稀疏包是 Mac OS X 10.5 Leopard® (.sparsebundle) 中引入的一种磁盘映像格式。与稀疏映像 (.sparseimage) 一样,稀疏包是一种读/写格式,其中磁盘映像仅占用与其包含的数据相同的空间,最高可达创建时定义的限制。稀疏包比稀疏映像更高效地压缩,这意味着在稀疏包中回收未使用的可用空间比在等效稀疏映像中更快。
虽然稀疏映像和稀疏包都包含文件系统,但稀疏包是包支持的,这意味着它采用专门的分层目录结构来对相关资源进行分组。在稀疏包中,bands 子目录包含磁盘映像中保存的实际数据。
在 Leopard 中,在主文件夹上启用 FileVault® 会将该主文件夹转换为加密稀疏包。在 Mac OS X 10.4 Tiger® 及更早版本中,FileVault 使用加密稀疏映像。
稀疏束还适用于 Time Machine® 创建的基于网络的备份磁盘,例如 Time Capsule®。
看Linux 可以挂载普通的 Time Machine 稀疏捆绑磁盘映像目录吗?我对 nix 的了解远远超过我使用 Mac 的情况,很抱歉。