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

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

我尝试找到一种有效的方法rsync将文件系统的内容ext4作为常规备份的一部分,但我考虑了适当的压缩和最小所需的空间。

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

我无法使用squashfs及其类似物,因为它们是只读的。

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

我想知道是否有任何技术具有内置压缩功能的容器,可以透明地自动调整其大小根据数据量,rsynced一下吗?

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

答案1

@Tetsujin 给了我正确的方向,OS Xsparsebundles/images确实有在 Linux 中模拟,这是稀疏文件

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

下面展示如何创建稀疏压缩的 btrfs 映像。文件系统可以通过安装启用 Debian 及其衍生产品(如 Ubuntu)的支持btrfs 工具包(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
    
  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

文件系统

    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
  1. 创建挂载点:

     me@wheezy:~$ mkdir ext4_mount btrfs_mount
    
  2. 安装它们。不要忘记loop选项:

ext4

    me@wheezy:~$ sudo mount -o loop -t ext4 ext4.sparse ext4_mount

文件系统(不要忘记compress选项(可以是zliblzo)):

    me@wheezy:~$ sudo mount -o loop,compress=lzo -t btrfs btrfs.sparse btrfs_mount
  1. 就这样!文件系统已创建并挂载,在操作系统中显示为 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. 为了测试,我创建了一个具有重复模式的 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
  1. 正如上一步所见,文件系统在传输高度可压缩的数据时,它比传统的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
    
  2. 文件系统事实证明,这种方法更节省空间。最后,让我们检查一下稀疏文件的大小:

     me@wheezy:~$ du -h *.sparse
     50M     btrfs.sparse
     1.4G    ext4.sparse
    

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

定期备份的好方法rsync。但不要忘记以更传统的方式备份这些文件,btrfs因为仍为实验性的文件系统

有关 Arch Wiki 的更多信息: https://wiki.archlinux.org/index.php/Sparse_filehttps://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 的情况,很抱歉。

相关内容