Google cloud platform gsutil rsync:传输的金额与'du'不同`

Google cloud platform gsutil rsync:传输的金额与'du'不同`,google-cloud-platform,google-cloud-storage,Google Cloud Platform,Google Cloud Storage,我正在尝试使用以下命令将一个数TB的大目录备份到google cloud: gsutil-mrsync-r-e local_dir/gs://target/bucket 总之,并行运行-m,递归地-r搜索目录local_dir/don't follow symlinks-e,并将其远程存储在bucket gs://target/bucket中 此操作成功完成: [666.4k/666.4k files][ 6.3 TiB / 6.3 TiB] 100% Done Operation comple

我正在尝试使用以下命令将一个数TB的大目录备份到google cloud:

gsutil-mrsync-r-e local_dir/gs://target/bucket

总之,并行运行-m,递归地-r搜索目录local_dir/don't follow symlinks-e,并将其远程存储在bucket 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时,文件夹大小不同:


有谁能解释一下,与gsutil传输的数据和du报告的数据相比,超过1个TiB的差异从何而来?

部分差异在于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文件将消耗大约16MB的内存,再加上包含的目录数量。此外,使用的数量可能会因您使用的文件系统类型而异。我上面报告的数字是针对运行在Debian Linux上的ext4文件系统的。

du是以TB为单位报告的吗?我一直在使用du-h,而不是du-si,我相信du-h也使用Tebibytes,尽管它使用了错误的单位。摘自手册页:-si:like-h,但使用1000而不是1024的幂你是对的,这是手册页上说的。但这似乎并不正确。例如:mkdir t;cp/usr/bim/vim t;cd-t;du-h报告3.1M ls-l报告3173864,如果你计算3173864/1024*1024,结果是3.0268,而不是3.1,gsutil ls-l报告的是3.03,这很有趣,谢谢。好的,我想我相信gsutil的rsyncs结果足以现在删除该目录。为了让自己对gsutil正确复制了所有内容更有信心,可以做的另一件事是使用gsutil将上传的所有内容复制回另一个目录,然后区分原始目录和新目录。
mkdir tmp
cd tmp
for f in {1..1000};do
touch $f
done
du -h