linux -rsync之后,du显示大小差异,而diff不显示

cqoc49vn  于 2023-01-16  发布在  Linux
关注(0)|答案(3)|浏览(163)

我使用“rsync”将一个大文件夹从NTFS复制到ext4,并使用“diff”验证它。出于好奇,我还使用“du”命令检查文件夹是否具有相同的大小。虽然“diff”没有显示任何差异,但“du”显示文件夹具有不同的大小。我在执行以下命令时没有遇到任何错误。

rsync --archive --recursive "$src" "$dest" 2>rsync_error.txt

sync

diff --brief --recursive --new-file "$src" "$dest" 1>diff-log.txt 2>diff-error.txt

然后我用“du”表示每个文件夹:

du -sb "$src"
du -sb "$dest"
Output:
137197597476
137203512004

1.既然没有任何区别,为什么会发生这种情况?
2.我应该担心我的数据还是我的系统?
编辑:我也试过du -s --apparent-size,还是有区别的。

qltillow

qltillow1#

备份文件

在linux下,你可以创建所谓的sparse files,它们是一个没有完整NULL块的文件!
试试这个:

$ dd if=/dev/zero count=2048 of=normalfile
2048+0 records in
2048+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0103269 s, 102 MB/s

以及

$ dd if=/dev/zero count=0 seek=2048 of=sparsefile
0+0 records in
0+0 records out
0 bytes copied, 0.000182708 s, 0.0 kB/s

那么

$ ls -l sparsefile normalfile
-rw-r--r-- 1 user  user  1048576 Feb  3 17:53 normalfile
-rw-r--r-- 1 user  user  1048576 Feb  3 17:53 sparsefile

$ du -b sparsefile normalfile
1048576     sparsefile
1048576     normalfile

但是

$ du -k sparsefile normalfile
0   sparsefile
1024        normalfile

$ du -h sparsefile normalfile
0   sparsefile
1.0M        normalfile

sparsefile中的长块未使用,因此不会 * 分配 *!

$ du -k --apparent-size sparsefile normalfile
1024        sparsefile
1024        normalfile

然后

$ diff sparsefile normalfile
echo $?
0

这两个文件之间几乎没有区别!

进一步

$ /sbin/mkfs.ext4 sparsefile 
mke2fs 1.44.5 (15-Dec-2018)
Filesystem too small for a journal
...
Writing superblocks and filesystem accounting information: done

$ ls -l sparsefile normalfile 
-rw-r--r-- 1 user  user  1048576 Feb  3 17:53 normalfile
-rw-r--r-- 1 user  user  1048576 Feb  3 17:59 sparsefile

$ du -k sparsefile 
32  sparsefile

$ diff sparsefile normalfile
Binary files sparsefile and normalfile differ
83qze16e

83qze16e2#

问候无敌,
我搜索了一下,发现了这个:
由于du报告的是分配空间而不是绝对文件空间,因此如果文件已删除但其块尚未释放,则du显示的文件系统空间量可能与df显示的空间量不同。source
不是最好的源代码,但很好地描述了du的用途。
因此,我将依靠diff来检查文件的内容,但我建议忽略文件系统上的大小差异,除非它太大,但这不是这种情况。

zzoitvuj

zzoitvuj3#

du报告的空间包括文件系统空间,而不仅仅是文件内容大小。
同时检查du中可能不包含的隐藏文件。

相关问题