Прискорити / уникати обчислення списків файлів rsync


12

Я використовую rsync 3.1.1 для синхронізації двох дисків, один з яких знаходиться в мережі та встановлений як спільний доступ самби /mnt/ROUTER_WD_2TB/. Це джерело зі швидкістю 30-40 МБ / с через обмеження в мережі. Інший, пункт призначення, встановлений локально (пік 110 МБ / с) і є /mnt/BACKUP_HITACHI_2TB/.

Я використовую таку команду rsync:

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

Диски містять багато файлів, більшість з яких невеликі.

Проблема полягає в тому, що rsync займає досить тривалий час (10-20 м), перш ніж починати переміщувати будь-які файли, я думаю, тому що він повинен обчислити списки файлів для дуже великої кількості невеликих файлів. У цей період використання ньютворку сягає низьких 200-500 КБ / с, тоді як при передачі файлів швидкість становить близько 40 МБ / с.

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

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


1
Ви спробували рішення з цієї теми? unix.stackexchange.com/questions/189878/…
UVV

@UVV Я цього не робив. я можу це зробити, однак 1) rsync вже, здається, не використовує повне ядро ​​в моєму випадку, чомусь (= я не впевнений, якщо я обмежений процесором або якщо обмеження лежить в іншому місці) і 2) це лише на двоядерному процесорі, так що навіть якби покращення було 2X, все одно буде велика маржа на покращення.
AF7

Так, це здається мені божевільним, чому rsync настільки повільний? Навіть із "--size-only" rsync здається вічно для створення свого додаткового списку файлів. Чому? Я можу вручну перевірити розміри файлів і визначити, які з них змінилися набагато швидше! На що витрачаєш стільки часу, і як вимкнути ці модні функції? EDIT: Ах, неважливо, у мене був випадково встановлений прапор 'c'. Без контрольних сум це дуже швидко.
Бен Фармер

Відповіді:


5

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

Тим не менш, тут є інші варіанти, які слід розглянути

  1. Копіювання, не турбуючись про видалення старих файлів. Це може дозволити вам виконувати більш швидку передачу частіше та відпускати повільну очистку, щоб сказати, лише один раз на день:

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. Використовуйте варіант rsyncалгоритму видалення за замовчуванням, щоб уникнути створення повного списку файлів перед передачею:

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. Розділіть каталоги верхнього рівня на окремі завдання та запустіть їх паралельно. Ви можете виявити, що якщо ви пов'язані з диском IO, це не дуже допоможе, а для спінінг блюд це майже напевно погіршить ситуацію.

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

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


--delete --delete-duringне зробив це для мене - що все-таки надіслав інкрементальний список файлів - але --delete --delete-beforeперейшов прямо до:, building file listщо здається великим прогресом. Я думаю.
mlissner

Ні, це назад, я боюся. Якщо ви користуєтесь --delete-before, то виконайте rsyncдва проходи по дереву файлів: один для видалення та другий для копіювання.
roaima

Спасибі. У такому випадку ... будь-яким способом уникнути створення додаткового списку файлів?
mlissner

@mlissner це залежить від кількох різних факторів. Найбільший на сьогоднішній день - чи ви робите локальне копіювання або локальне віддалене копіювання.
roaima

Для мене це все локально, хоча один із місцевих жителів - це USB-диск?
mlissner

-2

ви можете використовувати -vvдля перегляду всього журналу rsync.


2
Як би це відповіло на питання, тобто як би це прискорило справи?
Кусалаланда

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