google-cloud-platform - gsutil rsync : amount transfered differs from `du`

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

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

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

综上所述,并行运行(-m),递归(-r)搜索目录local_dir/(不遵循符号链接(symbolic link) -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 的差异来自何处?

最佳答案

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

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 文件系统。

关于google-cloud-platform - gsutil rsync : amount transfered differs from `du` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875621/

相关文章:

python - 我应该如何将数据从公共(public)谷歌存储桶下载到Python中?

google-app-engine - 如何从在谷歌应用引擎上运行的 servlet 发送帖子请求以将字节数组图像保存到谷歌云存储

google-cloud-platform - 错误: gcloud crashed (TypeError): setproxy() takes at most 7 arguments (8 given)

python - gcloud ml-engine 本地预测 RuntimeError : Bad magic number in . pyc 文件

node.js - 从 Google Cloud Functions Console 访问 MongoDB Atlas 集群

java - 使用 Beam Java SDK 在 Google Dataflow 上安装 apt-get 依赖项

crash - Google Compute Engine VM经常崩溃

swift - Google Cloud Storage 是否有 gRPC 端点?

java - 谷歌数据流: Read unbound PCollection from Google Cloud Storage

google-app-engine - 在 Appengine 上将 Google Cloud Storage 与 Golang 结合使用