我有几台带有 ext4 文件系统的 PC,我想将它们备份到也是 ext4 的文件服务器。问题是使用 rsync 时文件大小会出现一些差异,我注意到这是由于稀疏文件造成的。
问题是我想通过网络使用 rsync 创建文件系统的精确 rsync 副本以保留每周备份,以防我需要恢复,并且恢复的数据应该与 PC 上运行的数据大小相同。
创建测试文件,1 个稀疏文件和 1 个非稀疏文件:
mkdir testing
dd if=/dev/zero of=testing/sparse-file.img bs=1 count=0 seek=5M
cp testing/sparse-file.img testing/non-sparse-file.img --sparse=never
带有和不带有稀疏选项的 Rsync:
mkdir testa testb
rsync testing/* testa
rsync --sparse testing/* testb
结果:
du -h
5.1M ./testing
4.0K ./testb
11M ./testa
16M .
测试有 1 个 5MB 的文件和一个稀疏文件, 测试集两个文件都变得稀疏, 种皮两个文件都变成非稀疏文件
但是我如何让 rsync 保持文件稀疏性?这样文件系统在恢复的系统上将具有完全相同的大小。
我希望在恢复系统时能够确定恢复的数据到底有多大,使用稀疏选项,恢复的系统将比原来更加稀疏(我想这是可以接受的),使用非稀疏选项,这将导致恢复的系统变得不可预测的更大。
答案1
我认为您认为有问题,但实际上并没有问题。
如果您有许多稀疏文件,那么如果恢复时失去稀疏性并导致磁盘已满,那显然会很糟糕。
但是如果原始文件不是稀疏文件而恢复的文件是稀疏文件,则没有问题。稀疏文件中缺少的块在读取时返回零。最初不是备用的文件包含足够大的零块,这些零块是副本中的稀疏块。对于读取文件的任何应用程序,结果完全相同。除了读取稀疏块也更快,因为内存只是用零填充而不是从磁盘读取。因此,您可以将稀疏文件视为磁盘空间和访问时间的优化。您甚至可以定期检查文件并尝试将它们转换为稀疏文件(如果您认为值得的话)。
长期以来,没有办法确定文件块是否已分配到磁盘上。最近,一些 Linux 文件系统支持查找文件中的稀疏块。如果您的应用程序确实依赖于稀疏性信息,您可以将其提取到另一个文件中,将其包含在备份中,然后稍后恢复该稀疏性。
但大多数创建稀疏文件的应用程序并不关心稀疏块的内容。这些块从未被写入,否则它们就不会是稀疏的。应用程序知道不要期望这些块中有数据。
那么您为什么认为这是一个问题呢?