Následující kroky udělaly práci za mě:
- 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
- Vložil jsem výstup z
cat transfer.log
doparallel
za účelem spuštění 5rsync
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.