【问题标题】:Why directory copied with cp command has less size than the original one为什么用 cp 命令复制的目录比原来的要小
【发布时间】:2019-01-30 19:18:57
【问题描述】:

我想将一个包含大量文件的目录复制到另一个目的地。我做了

cp -r src_dir another_destination/

然后我想确认目标目录的大小和原来的一样:

du -s src_dir
3782288 src_dir

du -s another_destination/src_dir
3502320 another_destination/src_dir

然后我想到可能有几个符号链接后面没有cp命令并添加-a标志:

-a 与 -pPR 选项相同。保留文件的结构和属性,但不保留目录结构。

cp -a src_dir another_destination/

但是du -s 给了我同样的结果。有趣的是,源和目标都具有相同数量的文件和目录:

tree src_dir | wc -l
    4293

tree another_destination/src_dir | wc -l
    4293

使用du 命令得到不同的尺寸是我做错了什么?

【问题讨论】:

    标签: command-line cp du


    【解决方案1】:

    这可能有多种原因,因为您询问的是使用的磁盘大小,而不是两棵树中存储的字节数。

    • 在文件系统中存储文件时会产生特定数量的开销。此开销取决于文件系统。也许这两个存储使用不同的文件系统,效率不一样(例如,使用不同的块大小,这可能是由于磁盘大小不同)。
    • 另一个原因可能是原始文件中的硬链接文件。该副本可能已多次复制硬链接文件,因此在副本中它们不再被硬链接。
    • 第三个原因可能是包含大面积零字节的稀疏文件,在某些文件系统中,可以通过不为其分配块来有效地存储这些零字节。

    为了至少排除第一个原因(最可能的原因),我建议在两棵树上都使用du -bs

    【讨论】:

    • 你能告诉我为什么两个分区的目录名大小不同吗?在一个系统中,/home 分区显示所有目录名都有 4096 字节,我认为这是正常的。但是在不同的分区/home3中,目录名的大小是完全不同的,比如161、287、273,包括4096。我不太了解这个系统,但你能给我一些想法吗?它看起来 /etc/fstab 中的文件系统看起来一样。
    • 文件系统可以针对特定目的进行优化,例如用于包含大部分大文件(但不是很多)或包含大量小文件。根据许多文件系统(如 ext4 或类似文件系统)中的具体用例,您可以将相应的参数传递给格式化命令(例如 mkfs.ext4)。一个结果是文件系统中的最大文件数,另一个是每个文件的平均开销字节数(由于部分填充的块),还有一个是目录占用的字节数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2013-10-31
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多