比较时
root@debian:~# du -s /backup/test1/ 5605364 /backup/test1/
与du两个目录,
root@debian:/etc/init.d# du -s /data/test1/ 5605360 /data/test1/
du告诉我,每个目录的总大小有一个小的差异。
另一方面,差异告诉我,两个指令是相同的:
root@debian:/etc/init.d# diff -r /data/test1/ /backup/test1/
是什么原因?
du报告文件的“磁盘使用情况”,而不是每个文件包含的确切字节数。 du的手册甚至说:
du – 估计文件空间的使用情况
相同的一组文件使用不同的磁盘空间是完全可能的。 这是因为文件系统的错综复杂。 有关文件系统上磁盘使用情况的更多信息,请阅读以下问题和答案: https : //superuser.com/questions/218395/about-file-size-and-disk-usage-in-ext3 。
diff比较文件的内容 。 diff不关心文件在文件系统上实际使用的字节数。 它只关心文件中的字节。
如果你想du报告每个文件的确切字节数,你可以使用--apparent-size 。
既然你没有提供细节,就有猜测/猜测的余地。
我会假设/数据和/备份安装在不同的分区,使用不同的块大小格式化。 这会导致物理使用的磁盘空间略有不同,因为需要一个(或多个)附加(或更less)块。
您可以通过执行df并复制挂载点/data和/backup的/dev/...部分并将它们提供给file -s
例如
file -s /dev/sda1
这可能是由于两个目录树中单个目录的大小不同造成的。 每个目录在磁盘上由一些磁盘块表示,这些磁盘块存储目录中文件的名称。 这些块有时被称为“目录文件”。 运行“ls -l”或“ls -s”时,目录的大小字段就是该目录文件的大小。
在目录中创build文件时,文件名将被添加到目录文件中。 如果目录文件没有足够的空间,则可能需要通过添加另一个磁盘块来放大。当从目录中删除文件时,文件的名称将从目录文件中删除,留下一些未使用的空间。 未使用的空间可以用来存储另一个文件名。 但是它并没有返回到操作系统,所以目录文件可以增长,但是永远不会缩小。
如果您要并排比较目录树,则可能会发现某些匹配的目录大小不同。 这通常意味着一个目录曾经有更多的文件,或者名称较大的文件,或者过去有很多文件创build/删除“stream失”。
当diff比较两个目录时,它只检查两个目录是否有相同的名称。 它不检查相应目录文件中的未使用空间,也不关心两个目录文件是否实际上是相同的大小。