当我使用 在我的 Linux 系统上进行备份时tar -czv
,我注意到该过程停留了很长时间/var/lib/docker/devicemapper/devicemapper/data
(比复制我的所有图像和容器所需的时间长得多),而结果文件并没有增长。
通过使用 检查此文件大小ls -lh
,它会输出分区100G
的大小20G
。这是什么样的文件,tar
在这里做什么?
答案1
看起来你有一个稀疏文件那里。
稀疏文件是一种计算机文件,当文件本身大部分为空时,它会尝试更有效地利用文件系统空间。这是通过将代表空块的简要信息(元数据)写入磁盘而不是构成块的实际“空”空间来实现的,从而占用较少的磁盘空间。仅当块包含“真实”(非空)数据时,才会将完整块大小作为实际大小写入磁盘。
有这个答案说的是:
该
/var/lib/docker/devicemapper/devicemapper
目录包含稀疏循环文件,其中包含 docker 挂载的所有其他数据。
您的文件主要由空块(全为零)组成,作为稀疏文件,它可以放入您的小分区中。显然,它tar
只是读取所有零并对其进行处理。它们的压缩效果非常好,因此当零流结束时,结果文件只会稍微增大一点。
有一个命令行选项可以tar
让它识别稀疏文件。它被描述为这里。
-S
--sparse
对于您来说,我认为以下内容非常重要:
在提取时 (…),任何此类文件在发现漏洞的地方也会产生漏洞。(…) 在
--sparse
执行文件系统备份时考虑使用,以避免归档系统中稀疏存储的文件的扩展形式。
我猜你没有使用该--sparse
选项,因此当进行提取时,你的100G
文件将被创建为非稀疏文件,并且无法放入分区中20G
。