gsutil rsync:转移的金额与“ du”不同

时间:2018-10-18 13:52:24

标签: google-cloud-platform google-cloud-storage

我正在尝试使用以下命令将大目录(几个TB)备份到Google云:

gsutil -m rsync -r -e local_dir/ gs://target/bucket

总而言之,并行运行(-m,然后递归(-r)搜索目录local_dir/(不要遵循符号链接-e),并进行远程存储在gs://target/bucket桶中。

此操作成功完成:

[666.4k/666.4k files][ 6.3 TiB / 6.3 TiB] 100% Done
Operation completed over 666.4k objects/6.3 TiB.

让我担心的一件事是,我运行du时文件夹的大小不同:

$ du --max-depth 1 -h local_dir/
...
7.6T    local_dir

有人能解释与gsutil所传送的内容和du所报告的内容相比,多于1个TiB的差异来自何处吗?

1 个答案:

答案 0 :(得分:3)

部分差异在于Linux du以TB(10 ^ 12字节)为单位进行报告,而gsutil cp以TB(2 ^ 40)为单位进行报告。因此,Linux du单元比gsutil cp单元大1.0995倍。此外,目录和索引节点占用的空间超出了文件数据字节。例如,如果您运行以下命令:

mkdir tmp
cd tmp
for f in {1..1000};do
touch $f
done
du -h

它报告使用了24K,即使每个文件都是空的(因此每个inode平均为2.4k字节)。而且,如果删除临时文件并在目录上运行du -s,它将占用4k字节。因此,您的666.4k文件将消耗大约16 MB的内存,但是要包含的目录数量却要多得多。另外,根据使用的文件系统类型,使用的数量可能会有所不同。我上面报告的数字是在Debian Linux上运行的ext4文件系统的。