Параллелизируйте rsync использование Параллели GNU

/private/var/empty вероятен messagebus корневой каталог пользователя. zsh расширение предложений корневых каталогов, когда это получает аргумент cd функция, что это думает, похожа на имя пользователя. В Вашем случае, bu расширен до messagebus приблизительным matcher, потому что никакой более определенный matcher не инициирует в пустом каталоге (в Вашей системе Linux, обоих uuid и messagebus возвращаются как возможные приблизительные соответствия для строки bu).

Возможно сказать zsh каких пользователей это должно рассмотреть для расширения при этих обстоятельствах, вставив что-то вроде этого Ваш ~/.zshrc:

zstyle ':completion:*' users user1 user2 root

Просто перечислите всех пользователей, которых Вы хотите, чтобы оболочка рассмотрела, source ~/.zshrc для взятия изменений, и Вы больше не должны добираться messagebus и т.д. как возможные завершения.

19
13.03.2015, 08:51
6 ответов

За меня сработали следующие шаги:

  1. Сначала запустите rsync --dry-run , чтобы получить список файлов, которые будут затронутый.
$ rsync -avzm --stats --safe-links --ignore-existing --dry-run \
    --human-readable /data/projects REMOTE-HOST:/data/ > /tmp/transfer.log
  1. Я отправил вывод cat transfer.log в параллельно для параллельного запуска 5 rsync s, как показано ниже:
$ cat /tmp/transfer.log | \
    parallel --will-cite -j 5 rsync -avzm --relative \
      --stats --safe-links --ignore-existing \
      --human-readable {} REMOTE-HOST:/data/ > result.log

Здесь, - относительная опция ( ссылка ) гарантирует, что структура каталогов для затронутых файлов в источнике и месте назначения остается неизменной (внутри каталога / data / ), поэтому команду необходимо запускать в исходной папке (например, / data / projects ).

16
27.01.2020, 19:44

Протестированный способ выполнения параллельной rsync: http://www.gnu.org/software/parallel/man.html#EXAMPLE : -Parallelizing-rsync

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

Следующее будет запускать один rsync для каждого большого файла в каталоге src-dir до каталога-назначения на нижнем сервере:

 cd src-dir; найти . -тип f -размер +100000 | \ 
parallel -v ssh fooserver mkdir -p / dest-dir / {//} \; \ 
rsync -s -Havessh {} fooserver: / dest-dir / {} 
 

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

 rsync -Havessh src-dir / fooserver: / dest-dir / 
 

Если вы не можете отправить данные, но вам необходимо вытащите их, и файлы будут называться digits.png (например, 000000.png), вы можете сделать это:

 seq -w 0 99 | parallel rsync -Havessh fooserver: src / * {}. png destdir / 
 
5
27.01.2020, 19:44

Я лично использую этот простой:

ls -1 | parallel rsync -a {} /destination/directory/

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

13
27.01.2020, 19:44

Я бы настоятельно не рекомендовал никому использовать принятый ответ, лучшее решение — просканировать каталог верхнего уровня и запустить пропорциональное количество операций rync.

У меня есть большой том zfs, и моим источником было монтирование cifs. Оба связаны с 10G, и в некоторых тестах может насытить связь. Производительность оценивалась с использованием zpool iostat 1.

Исходный диск был смонтирован следующим образом:

mount -t cifs -o username=,password= //static_ip/70tb /mnt/Datahoarder_Mount/ -o vers=3.0

С использованием одного процесса rsync:

rsync -h -v -r -P -t /mnt/Datahoarder_Mount/ /StoragePod

показания счетчика ввода-вывода:

StoragePod  30.0T   144T      0  1.61K      0   130M
StoragePod  30.0T   144T      0  1.61K      0   130M
StoragePod  30.0T   144T      0  1.62K      0   130M

Это в синтетических тестах (кристаллический диск), производительность при последовательной записи 900 МБ/с, что означает, что ссылка перегружена. 130мб/с это не очень хорошо, а разница между ожиданием выходных и двух недель.

Итак, я создал список файлов и попытался снова запустить синхронизацию (у меня 64-ядерный компьютер):

cat /home/misha/Desktop/rsync_logs_syncs/Datahoarder_Mount.log | parallel --will-cite -j 16 rsync -avzm --relative --stats --safe-links --size-only --human-readable {} /StoragePod/ > /home/misha/Desktop/rsync_logs_syncs/Datahoarder_Mount_result.log

и производительность была такой же!

StoragePod  29.9T   144T      0  1.63K      0   130M
StoragePod  29.9T   144T      0  1.62K      0   130M
StoragePod  29.9T   144T      0  1.56K      0   129M

В качестве альтернативы я просто запустил rsync для корневых папок:

rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/Marcello_zinc_bone /StoragePod/Marcello_zinc_bone
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/fibroblast_growth /StoragePod/fibroblast_growth
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/QDIC /StoragePod/QDIC
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/sexy_dps_cell /StoragePod/sexy_dps_cell

Это фактически повысило производительность:

StoragePod  30.1T   144T     13  3.66K   112K   343M
StoragePod  30.1T   144T     24  5.11K   184K   469M
StoragePod  30.1T   144T     25  4.30K   196K   373M

В заключение, как сказал @Sandip Bhattacharya, напишите небольшой скрипт для получения каталогов и параллельного выполнения. Либо передайте список файлов в rsync. Но не создавайте новые экземпляры для каждого файла.

23
27.01.2020, 19:44

Для синхронизации с несколькими пунктами назначения я использую

parallel rsync -avi /path/to/source ::: host1: host2: host3:

Подсказка: все соединения ssh устанавливаются с открытыми ключами в ~/.ssh/authorized_keys

2
27.01.2020, 19:44

Я всегда ищу в Google параллельный rsync, так как всегда забываю полную команду, но ни одно решение не сработало для меня так, как я хотел -либо оно включает несколько шагов, либо требует установки parallel. В итоге я использовал этот один вкладыш -для синхронизации нескольких папок :

.
find dir/ -type d|xargs -P 5 -I % sh -c 'rsync -a --delete --bwlimit=50000 $(echo dir/%/ host:/dir/%/)'

-P 5количество процессов, которые вы хотите создать -использовать 0 для неограниченного (явно не рекомендуется ).

--bwlimit, чтобы не использовать всю полосу пропускания.

Аргумент

-I %предоставляется путем поиска каталога (, найденного в dir/)

.

$(echo dir/%/ host:/dir/%/)-выводит исходный и конечный каталоги, которые rsync считывает как аргументы. % заменяется на xargsс найденным именем каталога find.

Предположим, у меня есть два каталога в/home:dir1и dir2. Я бегу find /home -type d|xargs -P 5 -I % sh -c 'rsync -a --delete --bwlimit=50000 $(echo /home/%/ host:/home/%/)'. Таким образом, команда rsync будет работать как два процесса (два процесса, потому что /homeимеет два каталога )со следующими аргументами:

rsync -a --delete --bwlimit=50000 /home/dir1/ host:/home/dir1/
rsync -a --delete --bwlimit=50000 /home/dir1/ host:/home/dir1/
2
27.01.2020, 19:44

Теги

Похожие вопросы