GNU/Linux >> Linux Esercitazione >  >> Linux

Parallelizza rsync usando GNU Parallel

I seguenti passaggi hanno fatto il lavoro per me:

  1. 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
  1. Ho alimentato l'output di cat transfer.log a parallel per eseguire 5 rsync 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.


Linux
  1. L'uso di Rsync durante l'aggiornamento della sorgente è sicuro?

  2. Gnu Parallel Vs &(mean Background) Vs Xargs -p?

  3. Usando Gnu Screen, ricevo un prompt Raw con backslash?

  4. Come inviare e scaricare file utilizzando Rsync

  5. Utilizzo di rsync per sincronizzare i file

Riprendi i file parzialmente trasferiti su SSH utilizzando Rsync

Come eseguire il backup di file e directory utilizzando Rsync in Linux

Impara gli script Bash multi-threading con GNU Parallel

Come eseguire il backup dell'host Unix locale utilizzando l'utilità rsnapshot rsync

Come eseguire il backup dell'host Linux remoto utilizzando l'utilità rsnapshot rsync

Come limitare la velocità di rsync e l'utilizzo della larghezza di banda usando –bwlimit