我正在使用类似于的方法为具有 rsync 的系统设置自动增量备份rsnapshot
。我想知道在尝试复制新快照之前备份磁盘是否有足够的空间来容纳新快照。
在这种情况下,rsync 将同步目录,因此它可能会复制新文件、复制大小已更改的现有文件、删除文件、添加或删除目录,或在目标上添加和删除链接(包括符号链接和硬链接)。因此,操作后总磁盘空间的变化实际上可能会增加或减少任何量。
有什么方法可以确定该操作需要多少空间?
答案1
请注意,即使您知道要同步的数据量,也存在无法逐字节转换到目标的情况。例如,如果您的目标文件系统已加密。
也就是说,我认为您正在寻找的命令是:
rsync -an --stats sourcedir/ destdir/
在哪里:
-a
:存档元选项-n
:试运行
您需要检查的具体统计数据如下:
- 文件总大小:(以字节为单位)
- 传输的文件总大小:(也以字节为单位,这是要传输的更改数据)
为了获得之前和之后计算大小的确切答案,可以通过两次 rsync 试运行来完成:
- 一个如上所述,
- 一个从目标文件夹复制到一个虚拟的空文件夹。
两个数字之间的差值就是答案。
在以下示例中,文件夹d1
包含file1.txt
11 个字节,文件夹d2
包含file2.txt
6 个字节,而文件夹d3
为空。d2 到 d3 的 rsync 给出文件总大小为 6 个字节,d1 到 d2 的 rsync 给出 11 个字节。最终答案:6 个字节将变成 11 个字节。
$ mkdir d1 d2 d3
$ echo 12345 >d2/file2.txt
$ echo 1234567890 >d1/file1.txt
$ rsync -an --stats d2/ d3/
Number of files: 2 (reg: 1, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 0
Number of regular files transferred: 1
Total file size: 6 bytes <=== current size
Total transferred file size: 6 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 86
Total bytes received: 22
sent 86 bytes received 22 bytes 216.00 bytes/sec
total size is 6 speedup is 0.06 (DRY RUN)
$ rsync -an --stats --delete d1/ d2/
Number of files: 2 (reg: 1, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 1 (reg: 1)
Number of regular files transferred: 1
Total file size: 11 bytes <=== future size
Total transferred file size: 11 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 84
Total bytes received: 38
sent 84 bytes received 38 bytes 244.00 bytes/sec
total size is 11 speedup is 0.09 (DRY RUN)
至于 rsync 对硬链接大小的不完美计算,您唯一的其他选择是在详细模式下运行 rsync 并自行解析其输出。
参考 :