Як прискорити rsync для невеликих файлів


15

Я намагаюся перенести тисячі малих файлів з одного сервера на інший за допомогою наступної команди:

rsync -zr --delete /home/user/ user@10.1.1.1::backup

Зараз передача триває багато часу (я її не приурочила). Чи є спосіб зробити це швидше? Чи варто використовувати інший інструмент? Чи повинен я використовувати rsync через ssh, а не використовувати протокол rsync?


Це насправді лише сотні? Як менше ніж на пару тисяч?
Зоредаче

Ще кілька, ніж це ... 475 576 на загальну суму 9,3 Гб
локшина

Це буде смоктати, використовуючи практично будь-який інструмент, який працює на рівні файлової системи. Я підозрюю, що якщо ви зробили якісь профілірування, ви побачили б значну кількість часу, на яке потрібно витратити дзвінки stat().
Зоредаче

Чому ні, -aале -r?
kamae

Відповіді:


13

Вам потрібно визначити вузьке місце. Це не rsync. Можливо, це не ваша пропускна здатність мережі. Як @Zoredache припустив, це, швидше за все, величезна кількість іопів, генерованих усімаstat() дзвінками. Будь-який інструмент для синхронізації потребує статистики файлів. Під час синхронізації запустіть iostatдля підтвердження.

Так стає питання; як оптимізувати стат? Два простих відповіді:

  1. отримати більш швидку підсистему диска (на обох хостах, якщо це потрібно) та
  2. налаштуйте вашу файлову систему (наприклад, для монтажу ext3 з noatimeта додайте a dir_index).

Якщо випадково це не обмеження вашого диска, то ви можете поекспериментувати з розділенням дерева dir на декілька різних дерев і запустити кілька rsyncs.


1
Дякую, я загляну в dir_index і побачу, як я ввійшов (ми вже використовуємо час роботи). Здається, що диск Io є вузьким місцем, але ми вже працюємо 15 к SAS накопичувачами в RAID 5. Наступним кроком буде SSD, але наша хостингова компанія поки не дає нам цього варіанту.
Локшина

5

Стиснення не дуже корисне для невеликих файлів (скажімо, менше 100 байт). Для невеликих файлів іноді стислий варіант може бути навіть більшим, ніж оригінал. Спробуйте rsyncкоманду без значка-z прапора.

sshдобре для безпеки, але не зробить передачу швидшою. Фактично, це зробило б передачу повільнішою через необхідність шифрування / дешифрування.

rsyncможе не здатися швидким під час першого запуску, оскільки є багато даних для передачі. Однак якщо ви плануєте періодично виконувати цю команду, подальший запуск може бути набагато швидшим, оскільки rsyncрозумно не переносити файли, які не змінилися.


Якщо ви просто використовуєте rsyncклієнт, він використовуватиме SSH поза кадром. Вам потрібно вийти зі шляху, щоб відключити шифрування під час використання rsync. Див: stackoverflow.com/a/1821574/64911
mlissner

1

Яку версію rsync ви використовуєте? Все, що старше 3.0.0 (на обох кінцях) не має функції додаткового списку файлів, що прискорює великі передачі.


Використання rsync 3.0.5 на обох серверах.
Локшина

1

Додайте -v --progress до командного рядка rsync

rsync виконується в 2 етапи:

  1. глибоко перегляньте всі файли на обох платформах, щоб порівняти їх розмір та mdate
  2. зробити фактичну передачу

Якщо ви rsync тисячі маленьких файлів у вкладених каталогах, просто може бути так, що rsync витрачає більшу частину цього часу, переходячи в підкаталоги та знаходячи всі файли

Якщо час не витрачається на перегляд, час може просто пояснюватися додаванням усіх затримок, що починаються з кожної нової передачі файлів.


1

У разі залучення файлових систем ext3 або ext4 перевірте, чи в обох включена функція dir_index ! Це потроїло пропускну здатність rsync у моєму випадку.

Деталі див. У моїй відповіді за адресою: /server//a/759421/80414

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.