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