我正在尝试使用以下命令将一个大目录(几 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/