GNU/Linux >> Znalost Linux >  >> Linux

Paralelní rsync pomocí GNU Parallel

Následující kroky udělaly práci za mě:

  1. Spusťte rsync --dry-run nejprve k získání seznamu souborů, kterých by se to týkalo.
$ rsync -avzm --stats --safe-links --ignore-existing --dry-run \
    --human-readable /data/projects REMOTE-HOST:/data/ > /tmp/transfer.log
  1. Vložil jsem výstup z cat transfer.log do parallel za účelem spuštění 5 rsync s paralelně takto:
$ cat /tmp/transfer.log | \
    parallel --will-cite -j 5 rsync -avzm --relative \
      --stats --safe-links --ignore-existing \
      --human-readable {} REMOTE-HOST:/data/ > result.log

Zde --relative volba (odkaz) zajistila, že adresářová struktura pro dotčené soubory ve zdroji a cíli zůstane stejná (uvnitř /data/ adresář), takže příkaz musí být spuštěn ve zdrojové složce (například /data/projects ).


Osobně používám tento jednoduchý:

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

Což je užitečné pouze v případě, že máte více než několik téměř prázdných adresářů, jinak budete mít téměř každý rsync ukončí a poslední dělá veškerou práci sám.

Všimněte si zpětného lomítka před ls což způsobí přeskočení aliasů. Tím je zajištěno, že výstup je požadovaný.


Důrazně bych někoho odrazoval od použití přijaté odpovědi, lepším řešením je procházet adresář nejvyšší úrovně a spustit proporcionální počet operací rync.

Mám velký objem zfs a mým zdrojem byl CIFS mount. Oba jsou propojeny s 10G a v některých benchmarcích mohou spojení nasytit. Výkon byl hodnocen pomocí zpool iostat 1 .

Zdrojový disk byl připojen takto:

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

Pomocí jediného rsync proces:

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

iometr ukazuje:

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

V syntetických benchmarcích (krystalový disk) se výkon pro sekvenční zápis blíží 900 MB/s, což znamená, že spojení je nasycené. 130 MB/s není moc dobré a rozdíl mezi čekáním víkend a dva týdny.

Vytvořil jsem tedy seznam souborů a pokusil se znovu spustit synchronizaci (mám 64jádrový počítač):

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

a měl stejný výkon!

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

Jako alternativu jsem jednoduše spustil rsync v kořenových složkách:

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

To ve skutečnosti zvýšilo výkon:

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

Na závěr, jak řekl @Sandip Bhattacharya, napište malý skript, abyste získali adresáře a paralelně s tím. Případně předejte seznam souborů rsync. Nevytvářejte však nové instance pro každý soubor.


Linux
  1. Použití zástupných znaků v Gnu Make Pattern Rule?

  2. Pomocí obrazovky Gnu dostanu nezpracovanou výzvu se zpětnými lomítky?

  3. rsync pomocí regulárního výrazu k zahrnutí pouze některých souborů

  1. Je používání Rsync během aktualizace zdroje bezpečné?

  2. Jak získat cpio (gnu, rhel 4) pro extrakci do určeného adresáře?

  3. Použití příznaku archivu rsync bez kopírování symbolických odkazů

  1. Gnu Parallel Vs &(i Mean Background) Vs Xargs -p?

  2. Jak odesílat a stahovat soubory pomocí Rsync

  3. Použití rsync k synchronizaci souborů