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

Каталог, зарезервированный с помощью rsync, намного больше, чем исходный

Резервное копирование набора виртуальных машин на внешний 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».