Як пришвидшити rsync?


44

Я запускаю rsync для синхронізації каталогу на зовнішньому жорсткому диску USB. Це приблизно 150 гігів даних. 50000+ файлів, я б здогадався.

На даний момент він працює першою синхронізацією, але копіює файли зі швидкістю лише 1-5 Мб / с. Це здається неймовірно повільним для корпусу USB 2.0. Інших передач також не відбувається на диску.

Ось варіанти, які я використав:

rsync -avz --progress /mysourcefolder /mytargetfolder

Я запускаю Ubuntu Server 9.10.


2
Ви впевнені, що Ви отримуєте з'єднання USB2? чи (нормальна копія) чи інша операція запису працює з нормальною швидкістю? якщо ні, чи спробували ви скопіювати / інший запис для запису через інший порт USB / кабель?
хитаючий кіхот

Дивіться також serverfault.com/questions/43014/… - там люди також пропонують використовувати дві трубопровідні tarкоманди або cpio.
Blaisorblade

Відповіді:


38

Для першої синхронізації просто використовуйте

cp -a  /mysourcefolder /mytargetfolder

rsync додає накладні витрати лише тоді, коли пункт призначення порожній.

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


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

6
Він повинен бути корисним і для місцевих переказів, і він набагато гнучкіший. Це можливо лише надмірне завантаження для першої синхронізації.
Blaisorblade

1
rsync - це також одностороння синхронізація. Дуже добре для резервного копіювання на сервер або з сервера. Однак, якщо ви хочете, щоб локальна TWO-Way синхронізація зі змінним накопичувачем, ви можете перевірити csync csync.org/get-, щоб не плутати з csync2, що є абсолютно іншим проектом.
Джессі Вітер Мандрівник

3
rsync -avz --progress /mysourcefolder/ /mytargetfolderабо ви отримаєте копію mysourcefolderвсередині, mytargetfolderа не дзеркальне відображення вмісту
редактор

2
Ця відповідь не дає відповіді на запитання. Питання полягало у тому, як оптимізувати rsync - а не замінити її командою cp.
oemb1905

38

Якщо ви використовуєте rsync зі швидкою мережею або диском для диска в одній машині,

не використовуючи стиснення -z

а за допомогою --інстанції

прискорює його до продуктивності жорстких дисків або мережі

для стиснення використовується багато процесора

не використання inplace робить harddrive thrash багато (він використовує тимчасовий файл перед створенням остаточного)

стиснення та невикористання Inplace краще робити це через Інтернет (повільна мережа)

НОВЕ: Будьте в курсі пункту призначення ... якщо ввімкнено "стиснення" NTFS ... це сильно уповільнює великі файли (я б сказав, 200 Мб +), rsync майже не затримується, це викликано цим.


Стиснення NTFS є повільним на великих файлах
Скотт Крамер

Я не бачу нічого про "--inline" на сторінці чоловіка
Ентоні

1
Це '--інстанція'
Скотт Крамер

26

Використовуйте -Wопцію. Це вимикає дельта / різницеві порівняння. Коли час / розміри файлу відрізняються, rsync копіює весь файл.

Також видаліть -zопцію. Це корисно лише для стиснення мережевого трафіку.

Тепер rsyncслід так само швидко cp.


6
Незначна примітка: -zкорисна лише для низькошвидкісного мережевого трафіку. Якщо ваша мережа досить швидка, вона сповільнить роботу, оскільки вас обмежить процесор.
WhyNotHugo

3
Ці поради значно прискорили передачу моїх файлів між двома пристроями NAS, дякую!
djhworld

2
але зауважте, що згідно з довідковою сторінкою написано -W: "Це за замовчуванням, коли і джерело, і пункт призначення вказані як локальні шляхи, але тільки якщо не існує жодної опції пакетного запису".
GuoLiang Oon

14

По-перше - кількість файлів у цьому випадку стане головним фактором. Це середній розмір по 3 Мб кожен. Ймовірно, вузьке вузьке вузьке місце впливає на швидкість в корпусі ОП. Більше тут - це досить сухе читання, але картина обкладинки того варта.

Отже, використовуючи rsync для копіювання в порожній каталог? Ось кілька способів прискорити це:

  1. Ні -z - точно не використовуйте -z, як в ОП.
  2. --но-компрес може пришвидшити вас. Це може мати найбільший вплив ... мій тест склав 13 000 файлів, загальний розмір 200 МБ та використання rsync 3.1.3. Я синхронізувався з іншим розділом на тому ж внутрішньому диску SSD. З --но-компресом я отримую 18 Мбіт / с, а без нього - 15 Мбіт / с. cp, до речі, отримує 16 Мбіт / с. Це набагато менший середній розмір файлу. Крім того - я не можу знайти жодної документації для --no -press. Про це я дізнався з цієї публікації на stackexchange.com.
  3. -W копіювати файли цілими - завжди використовуйте це, якщо ви не хочете, щоб вони порівнювали відмінності; не майте на увазі, що суть rsync полягає в порівнянні відмінностей і лише оновленні змін.
  4. -S добре обробляти рідкісні файли - не зашкодить, якщо у вас немає розріджених файлів.
  5. --exclude-from або щось подібне для виключення файлів, які, можливо, не знадобляться, скоротять час, але це не збільшить швидкість передачі.
  6. Це можливо, якщо ви надсилаєте вихідний файл у такий файл rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err- перший> в основному друкує файл із усіма речами, які ви зазвичай бачили, а 2> стосується повідомлень про помилки.
  7. Нарешті, запуск декількох примірників rsync для різних частин вашої передачі може стати великою підмогою.

Моєю командою було б:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

Якби все виглядало добре, я б видалив "--dry-run" і відпустив його. A, X і E охоплюють розширені атрибути та дозволи, не охоплені -a, l - для м'яких посилань, H - для жорстких посилань, а h - для людини.

Оновлення вже синхронізованого каталогу на USB-накопичувачі, тому самому диску або через мережу вимагатиме різних команд rsync для максимальної швидкості передачі.

Бонус - ось сторінка rsync man , і якщо ви хочете перевірити швидкість вашого жорсткого диска, боні ++ - хороший варіант, а для швидкості роботи в мережі спробуйте iperf .


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


1
Щодо пункту 7) Я міг би значно поліпшити продуктивність, використовуючи традиційний жорсткий диск як джерело, розширивши буфер зчитування вперед, використовуючи "blockdev --setra 8192 / dev / sdX". Тож я маю намір зменшити пристріти.
користувач2480144

2

Ви не кажете, яке розподілення розмірів мають ваші файли. Якщо є багато невеликих файлів, то це знизить загальну швидкість передачі за рахунок збільшення затримки руху головки як у вихідних, так і в кінцевих накопичувачах, оскільки інструмент відкриває нові файли, а ОС зберігає записи каталогів та інші метадані (наприклад, журнал файлової системи, якщо ви використовуєте Журнал метаданих, як ext3 / ext4 і NTFS, за замовчуванням) актуалізований під час передачі. Процес копіювання файлів "увійде в його крок" лише для великих об'єктів, коли відбувається проста об'ємна передача.


0

Ви обов'язково хочете спробувати rclone . Ця річ з розуму швидко:

$ tree / usr [...] 26105 каталогів, 293208 файлів

$ sudo rclone sync / usr / home / fred / temp -P -L - переклади 64

Перенесено: 17,929G / 17,929 Гбіт, 100%, 165,692 Мбіт / с, ETA 0s Помилки: 75 (повторна спроба може допомогти) Перевірки: 691078/691078, 100% Перенесено: 345539/345539, 100% Пройдений час: 1m50.8s

Це локальна копія з та на жорсткий диск LITEONIT LCS-256 (256 ГБ).

Ви можете додати --ignore-контрольну суму під час першого запуску, щоб зробити її ще швидшою.


0

Уникайте

  • -z/ --compress: стиснення завантажує лише процесор, оскільки передача відбувається не через мережу, а через оперативну пам’ять.
  • --append-verify: відновити перервану передачу. Це звучить як гарна ідея, але він має небезпечний випадок відмови: будь-який файл призначення такого ж розміру (або більше), ніж джерело, буде ІГНОРОВАНО. Крім того, він перевіряє суми всього файлу в кінці, тобто немає значної швидкості --no-whole-fileпри додаванні небезпечного випадку відмови.

Використовуйте

  • -S/ --sparse: перетворити послідовності нулів у розріджені блоки
  • --partialабо -Pщо --partial --progress: зберегти будь-які частково передані файли для подальшого відновлення. Примітка. Файли не матимуть тимчасового імені, тому переконайтеся, що ніхто не очікує використання пункту призначення, поки вся копія не буде завершена.
  • --no-whole-fileтак що все, що потрібно повторити, використовує передачу дельти. Читання половини частково переданого файлу часто набагато швидше, ніж його повторне написання.
  • --inplace щоб уникнути копіювання файлу (але тільки якщо нічого не читає пункт призначення, поки вся передача не завершиться)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.