I seguenti passaggi hanno fatto il lavoro per me:
- Esegui
rsync --dry-run
prima per ottenere l'elenco dei file interessati.
$ rsync -avzm --stats --safe-links --ignore-existing --dry-run \
--human-readable /data/projects REMOTE-HOST:/data/ > /tmp/transfer.log
- Ho alimentato l'output di
cat transfer.log
aparallel
per eseguire 5rsync
s in parallelo, come segue:
$ cat /tmp/transfer.log | \
parallel --will-cite -j 5 rsync -avzm --relative \
--stats --safe-links --ignore-existing \
--human-readable {} REMOTE-HOST:/data/ > result.log
Qui, --relative
option (link) ha assicurato che la struttura della directory per i file interessati, all'origine e alla destinazione, rimanga la stessa (all'interno di /data/
directory), quindi il comando deve essere eseguito nella cartella di origine (ad esempio, /data/projects
).
Io personalmente uso questo semplice:
\ls -1 | parallel rsync -a {} /destination/directory/
Il che è utile solo quando hai più di poche directory non quasi vuote, altrimenti finirai per avere quasi tutte le rsync
terminando e l'ultimo facendo tutto il lavoro da solo.
Nota la barra rovesciata prima di ls
che fa saltare gli alias. Pertanto, assicurando che l'output sia quello desiderato.
Scoraggerei fortemente chiunque dall'utilizzare la risposta accettata, una soluzione migliore è eseguire la scansione della directory di livello superiore e avviare un numero proporzionale di operazioni rync.
Ho un grande volume zfs e la mia fonte era un supporto cifs. Entrambi sono collegati con 10G e in alcuni benchmark possono saturare il collegamento. Le prestazioni sono state valutate utilizzando zpool iostat 1
.
L'unità di origine è stata montata come:
mount -t cifs -o username=,password= //static_ip/70tb /mnt/Datahoarder_Mount/ -o vers=3.0
Usando un singolo rsync
processo:
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/ /StoragePod
il misuratore io legge:
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
Questo nei benchmark sintetici (disco di cristallo), le prestazioni per la scrittura sequenziale si avvicinano a 900 MB/s, il che significa che il collegamento è saturo. 130 MB/s non è molto buono, e la differenza tra aspettare un fine settimana e due settimane.
Quindi, ho creato l'elenco dei file e ho provato a eseguire nuovamente la sincronizzazione (ho una macchina a 64 core):
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
e ha avuto le stesse prestazioni!
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
In alternativa ho semplicemente eseguito rsync sulle cartelle root:
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
Questo ha effettivamente migliorato le prestazioni:
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
In conclusione, come ha sollevato @Sandip Bhattacharya, scrivi una piccola sceneggiatura per ottenere le directory e metterla in parallelo. In alternativa, passa un elenco di file a rsync. Ma non creare nuove istanze per ogni file.