具有内置压缩功能的容器,可自动调整其大小

Neu*_*ter 5 linux compression backup rsync container

我试图找到一种rsyncext4文件系统的内容作为常规备份的一部分的有效方法,但我认为合适的压缩和最小的所需空间。

我可以只使用普通rsync然后tar/gzip结果目录,但压缩本身会比前面的 rsyncing 慢几个数量级。

我不能使用squashfs它,因为它们是只读的。

我可以为此备份创建一个特殊类型的分区,使用内置压缩,例如btrfsreiser4但我必须以特定大小创建它并且它不会扩展。

我想知道是否有任何具有内置压缩功能容器技术,可以根据数据量透明地自动调整其大小,并同步到它?

顺便说一下,我使用 Debian GNU/Linux。

Neu*_*ter 4

@Tetsujin 给了我一个正确的方向,OS X捆绑sparse/图像在 Linux 中确实有模拟,这是稀疏文件

稀疏文件随着其中数据的增长而增长。它们可以包含任何 Linux 文件系统,包括具有内置压缩功能的任何现代变体,例如btrfs

下面展示了如何创建稀疏压缩的 btrfs 镜像。Debian 及其衍生版本(例如 Ubuntu)中的btrfs支持可以通过安装btrfs-tools软件包 ( sudo apt-get install btrfs-tools) 来启用。我还添加了一个稀疏的ext4图像来比较速度和大小。所有操作均在 Debian 7.8 Wheezy(截至 2015 年 4 月 30 日的旧稳定版)上执行。

  1. 创建任意大小的空稀疏文件。假设为 5 TB:

     me@wheezy:~$ truncate -s 5T ext4.sparse btrfs.sparse
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置它们的格式

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
Run Code Online (Sandbox Code Playgroud)

btrfs

    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
Run Code Online (Sandbox Code Playgroud)
  1. 创建挂载点:

     me@wheezy:~$ mkdir ext4_mount btrfs_mount
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装它们。不要忘记loop选项:

外部4

    me@wheezy:~$ sudo mount -o loop -t ext4 ext4.sparse ext4_mount
Run Code Online (Sandbox Code Playgroud)

btrfs(不要忘记compress选项(可以是zliblzo)):

    me@wheezy:~$ sudo mount -o loop,compress=lzo -t btrfs btrfs.sparse btrfs_mount
Run Code Online (Sandbox Code Playgroud)
  1. 就是这样!文件系统已创建并挂载,在操作系统中显示为 5 TB,但实际上占用的空间很小:

df

    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
Run Code Online (Sandbox Code Playgroud)

    me@wheezy:~$ du -h *.sparse
    4.3M    btrfs.sparse
    169M    ext4.sparse
Run Code Online (Sandbox Code Playgroud)
  1. 为了进行测试,我创建了一个包含重复模式的 1.3 GB 巨大文本文件。它将被cp添加到两个新创建的文件系统:

外部4

    me@wheezy:~$ time sudo cp /store/share/bigtextfile ext4_mount/

    real    0m12.344s
    user    0m0.008s
    sys     0m1.708s
Run Code Online (Sandbox Code Playgroud)

btrfs

    me@wheezy:~$ time sudo cp /store/share/bigtextfile btrfs_mount/

    real    0m3.714s
    user    0m0.016s
    sys     0m1.204s
Run Code Online (Sandbox Code Playgroud)
  1. 正如在上一步中所见,事实证明,与良好的 ol' ext4相比, btrfs在传输高度可压缩数据时要快得多。之后让我们检查文件系统的大小:

     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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 事实证明, btrfs 的空间效率更高。最后,让我们检查一下稀疏文件的大小:

     me@wheezy:~$ du -h *.sparse
     50M     btrfs.sparse
     1.4G    ext4.sparse
    
    Run Code Online (Sandbox Code Playgroud)

就是这样。如果需要,稀疏文件可以进一步放大。btrfs 也可以在线调整大小。

定期备份的酷解决方案rsync。但也不要忘记以更传统的方式备份这些文件,因为它仍然btrfs一个实验性文件系统

有关 Arch Wiki 的更多信息: https: //wiki.archlinux.org/index.php/Sparse_filehttps://wiki.archlinux.org/index.php/Btrfs