При сравнении
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/
Какова причина?
du
сообщает об «использовании диска» файлами, а не о точном количестве байтов, содержащихся в каждом файле. страница руководства du
даже говорит:
du - оценка использования файлового пространства
вполне возможно, что один и тот же набор файлов использует разный объем дискового пространства. это из-за сложности файловой системы. для получения дополнительной информации об использовании диска в файловой системе прочтите следующий вопрос и ответы: https://superuser.com/questions/218395/about-file-size-and-disk-usage-in-ext3.
diff
сравнивает содержание файлов. diff
не заботится о том, сколько байтов файл фактически использует в файловой системе. он заботится только о байтах в файлы.
если вы хотите du
чтобы сообщить точное количество байтов для каждого файла, который вы можете использовать --apparent-size
.
Поскольку вы не предоставили подробностей, есть место для предположений / предположений.
Я бы предположил, что / data и / backup смонтированы на разных разделах, отформатированных с использованием блоков разных размеров. Это приведет к несколько иному количеству физически используемого дискового пространства, поскольку необходимы один (или несколько) дополнительных (или меньше) блоков.
Вы можете быстро это проверить, выполнив df
и копирование /dev/...
часть точек монтирования /data
и /backup
и кормить их file -s
например
file -s /dev/sda1
Вероятно, это связано с различиями в размере отдельных каталогов в двух деревьях каталогов. Каждый каталог представлен на диске некоторыми дисковыми блоками, в которых хранятся имена файлов в каталоге. Эти блоки иногда называют «файлом каталога». Когда вы запускаете "ls -l" или "ls -s", поле размера для каталога равно размеру файла этого каталога.
Когда вы создаете файл в каталоге, имя файла добавляется к файлу каталога. Если файл каталога не содержит достаточно места, его, возможно, придется увеличить, добавив еще один дисковый блок. Когда вы удаляете файл из каталога, имя файла удаляется из файла каталога, оставляя некоторое неиспользуемое пространство. Неиспользуемое пространство можно использовать для хранения другого имени файла. Но он не возвращается в ОС, поэтому файл каталога может увеличиваться в размере, но никогда не сжимается.
Если бы вы сравнили деревья каталогов бок о бок, вы, вероятно, обнаружили бы, что некоторые из совпадающих каталогов были разных размеров. Обычно это означает, что в одном каталоге было больше файлов, или файлы с большими именами, или в прошлом у него было много "оттока" при создании / удалении файлов.
когда разница сравнивает два каталога, он только проверяет, имеют ли в обоих каталогах одинаковые имена. Он не проверяет неиспользуемое пространство в соответствующих файлах каталогов, и ему все равно, действительно ли два файла каталога имеют одинаковый размер.