linux - после rsyn c, du показывает разницу в размерах, когда diff не - PullRequest
0 голосов
/ 03 февраля 2020

Я скопировал большую папку из NTFS в ext4 с помощью 'rsyn c' и проверил ее с помощью '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', и разница все еще есть.

Ответы [ 3 ]

0 голосов
/ 03 февраля 2020

Приветствия Invinciblecache,

Поискивая вокруг, я нашел это:

Поскольку du сообщает о месте выделения, а не об абсолютном файловом пространстве, объем пространства в файловой системе, показанный du может отличаться от показанного df, если файлы были удалены, но их блоки еще не освобождены. source

Не лучший источник, но отличное описание того, для чего используется du.

Итак, я бы положился на diff для проверки содержимого файлов, но я бы порекомендовал игнорировать разницу в размерах файловой системы, если она не слишком велика, что не является этим сценарием.

0 голосов
/ 03 февраля 2020

Разрежает файлы

В 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
0 голосов
/ 03 февраля 2020

du - это пространство отчетов, включая пространство файловой системы, а не только размер содержимого файла.

Также проверьте наличие скрытых файлов, которые могут не быть включены в du.

...