Резервное копирование набора виртуальных машин на внешний USB-накопитель с помощью rsync -a
. Исходный каталог - 145G, как сообщает du -sh
, но цель - 181G.
Две файловые системы ext3
и размер блока такой же, так может кто-нибудь объяснить, в чем разница?
Как сказал Деннис, это проблема с разреженным файлом. Примером этого может быть:
$ dd if=/dev/zero of=sparse.txt count=0 seek=1000
0+0 records in
$ du sparse.txt
0 sparse.txt
$ ls -l sparse.txt
-rw-r--r-- 1 user user 512000 2010-03-22 11:54 sparse.txt
Как вы видете du
сообщает, сколько блоков фактически используется, а ls
показывает, насколько большим должен быть файл.
Другие уже рассказывали о разреженных файлах, но есть еще одна вещь: жесткие ссылки. Жесткие ссылки - несколько имен для файла (и места на диске) часто используются в системных разделах (например, для нескольких команд оболочки, реализованных в одном и том же двоичном файле), и они не обрабатываются rsync специально с параметром '-a'. Так, например, файл с четырьмя жесткими ссылками будет сохранен как четыре отдельных файла.
Попробуйте использовать rsync -aH
.
-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination. Conflicts with --inplace because it's not possible to overwrite data in a sparse fashion. NOTE: Don't use this option when the destination is a Solaris “tmpfs” filesystem. It doesn't seem to handle seeks over null regions correctly and ends up corrupting the files.
С помощью сценария rsync вы удаляете элементы, которые существуют в месте назначения и больше не находятся в нем? Если вы хотите иметь идентичную копию с обеих сторон, вам понадобится флаг «--delete» в вашей подпрограмме rsync.
"rsync -a --delete /source/ /destination/"
Вы также можете вставить «-n» и «-P» в строку, чтобы получить индикатор пробного прогона и индикатор прогресса, соответственно, чтобы показать вам, что произойдет с параметром «--delete».