Назад | Перейти на главную страницу

Размер Rsync отличается от источника к месту назначения

Я использую rsync с параметрами

-r for recursive
-l copy symlinks as symlinks
-t preserve modification time
-D preserve devices and specials
-v verbose
--prune-empty-dirs

Исходная файловая система - ext4, а конечная - XFS. Я скопировал несколько сотен папок размером от нескольких сотен гигабайт до нескольких ТБ, и все они находятся в пределах менее 1 ГБ. Однако эта конкретная папка имеет размер 264 ГБ в исходном коде, и после того, как я синхронизирую ее, она составляет 286 ГБ. Это огромная разница, и я не знаю, что в ней не так.

Если исходная файловая система ext4 имеет некоторые повреждения, возможно ли, что она не сообщает о правильном использовании диска? Я использую "дю-сч".

Я удалил все это и перезапустил 3 раза, и он дает те же результаты.

Столкнитесь с этой "проблемой" при использовании 'du -b -d0 source destination'
поскольку у меня был огромный список несоответствий, когда я углубился.

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

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

Решение состоит только в сравнении размеров реальных файлов, а не каталогов.

Следующая командная строка использует find для вывода только файлов в музыкальном каталоге, а затем использует du для подсчета количества байтов.

find music -type f -print0 |du --files0-from=- -cb

если кто-то опубликует сценарий sed, чтобы сделать то же самое, сделайте

Наиболее вероятная причина - жесткие ссылки. Rsync по умолчанию превращает 2 файла с жесткой связью в дубликаты файлов на целевой машине, занимая вдвое больше места на диске. Если вы хотите сохранить жесткие ссылки, добавьте -H/--hard-links вариант.

Следующая наиболее вероятная проблема - разреженные файлы. Rsync по умолчанию не записывает какие-либо файлы как разреженные файлы, даже если они находятся в источнике (на самом деле он не может сказать). Если у вас есть разреженные файлы (чаще всего используемые как образы виртуальных машин и неполные загрузки p2p), то вы захотите использовать --sparse option.

На странице часто задаваемых вопросов по rsync перечислены следующие причины: https://sanitarium.net/rsyncfaq/#differentsizes

Однако единственный способ узнать это - сравнить файлы.

Для небольшого количества файлов вы можете сделать diff -r /mnt/data /mnt/data-BACKUP. Однако, если это остановится на полпути, его нельзя будет перезапустить с того места, где он остановился. Старые программы сравнения плохо обрабатывают двоичные файлы.

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

См. Этот сценарий в качестве примера:

https://github.com/TomOnTime/tomutils/blob/master/bin/md5tree

md5tree /mnt/data        >/var/tmp/list.orig
md5tree /mnt/data-BACKUP >/var/tmp/list.backup
# NOTE: For these next 2 lines TAB means press the TAB key.
sort  -t'TAB' -k6 </var/tmp/list.backup >/var/tmp/list.backup.sorted
sort  -t'TAB' -k6 </var/tmp/list.orig >/var/tmp/list.orig.sorted
diff /var/tmp/list.orig.sorted /var/tmp/list.backup.sorted

Одинаковы ли размеры блоков в обеих файловых системах?

Если вы действительно сомневаетесь в том, что файлы были повреждены, рассмотрите возможность использования параметра (медленно!) -C для rsync.