Проблемы с использованием rsync для переноса файлов на новый сервер

#rsync

Вопрос:

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

Каталог содержит 174 412 файлов и имеет размер 136 гр. Исходя из этого, я создал для них диск емкостью 256 г на новом сервере.

Проблема в том, что когда я синхронизировал файлы на новый сервер, в новом разделе не хватило места, прежде чем все файлы были скопированы.

Я провел несколько тестов с большим целевым диском на своей тестовой машине, и когда он закончится, общий размер нового диска составит 272 г

 time sudo rsync -avh /mnt/dotcms/* /data2/
sent 291.61G bytes  received 2.85M bytes  51.75M bytes/sec
total size is 291.52G  speedup is 1.00

df -h /data2
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/data2vg-data2lv  425G  272G  154G  64% /data2
 

Источник находится на NAS, а новая цель-файловая система XFS, поэтому сначала я подумал, что это может быть проблема с размером блока. Но затем я использовал команду cp, и она скопировала точно такой же размер.

 time sudo cp -av /mnt/dotcms/* /data

df -h /data2
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/data2vg-data2lv  425G  136G  290G  32% /data2
 

Почему rsync увеличивает используемое пространство?

Комментарии:

1. Добавьте опцию --sparse .

2. @Cyrus разве это не отсрочит решение проблемы? Я бы предположил -H , что это тоже необходимо. Тим, попробуй find /mnt/dotcms/. -type f -links 1 -ls (GNU cp -av сохраняет жесткие ссылки

3. @jhnc: Чтобы сделать это как можно более правильным, многие варианты все еще отсутствуют. См.: Какие флаги использовать в rsync для достижения полной репликации?

4. @Cyrus определенно, но, вероятно, не причина этой конкретной проблемы.

Ответ №1:

Согласно документации, dotcms использует жесткие ссылки. Таким образом, вам нужно предоставить rsync -H возможность сохранить их. Обратите внимание, что GNU cp -av сохраняет жесткие ссылки, поэтому у него нет этой проблемы.

Другие параметры rsync, которые вы должны рассмотреть, включают:

  • -H , --hard-links : сохранение жестких ссылок
  • -A , --acls : сохранение списков управления доступом (подразумевает —perms)
  • -X , --xattrs : сохранение расширенных атрибутов
  • -S , --sparse : превращает последовательности нулей в разреженные блоки
  • --delete : удаление посторонних файлов из файлов назначения

Это предполагает, что вы работаете от имени root и что в пункте назначения должны быть те же пользователи/группы, что и в источнике. Если пользователи и группы не совпадают, то использование альтернативной командной строки @Cyrus --numeric-id может быть более подходящим.

Комментарии:

1. Я проверил с помощью just-sparse, и это не имело значения. Я повторю тест с дополнительными опциями-HAX. Обычно я использую —delete с дополнительными запусками, когда выполняю дельта-и окончательную синхронизацию. Копия занимает пару часов, поэтому я обновлю ее позже этим вечером.

2. Использование дополнительных опций выше решило проблему. time sudo rsync -avh --sparse --hard-links --acls --xattrs /mnt/dotcms/* /data2/