C'è un modo per rsync in batch?


1

Ho una grande quantità di dati (11G) in un repository di subversion che sto usando rsync per migrare ad Alfresco, che lucene indicizza i nuovi file mentre colpiscono il file system. Sto usando un dav mount come proxy per permettermi di rsync.

Il problema che sto riscontrando è l'indicizzazione post-rsync è un'operazione piuttosto costosa per una grande quantità di dati, quindi mi chiedevo se c'era un modo per separare logicamente il rsync in batch di dimensioni identiche (diciamo 500 MB ciascuno) quindi Potrei programmarli in cron.

Al momento, sto attraversando le cartelle di primo livello e prendendo per prime le più piccole, ma una volta che ho finito con quelle, le sottodirectory molto più grandi saranno piuttosto fastidiose.

Per favore fatemi sapere se avete bisogno di ulteriori informazioni.

Grazie in anticipo.

Risposte:


2

Prima di provare una risposta, un'escursione: VCS sono abbastanza bravi a sincronizzare i dati tra computer. Forse una soluzione migliore sarebbe quella di eseguire il checkout del repository di subversion per migrarlo. Se Subversion non è adatto per qualche motivo, dai un'occhiata a Git. Git è estremamente efficiente quando si tratta di sincronizzazione perché può calcolare la differenza una volta. La sincronizzazione di sé è poco più che il trasferimento della quantità minima di dati.

Detto ciò, rsync non ha un "limite" (per numero di file o quantità di dati trasferiti).

Hai due opzioni:

  1. Esegui rsync tramite un comando small pipe che uccide la connessione dopo una certa quantità.

  2. Esegui rsync diverse volte con filtri diversi (una volta per ogni sottodir o una volta per tutti i file piccoli e poi di nuovo per ogni file enorme)

# 1 ha l'ovvio svantaggio che può causare la duplicazione di un file enorme due volte (ad esempio hai un file piccolo + 90% di file di grandi dimensioni - & gt; hit limit - & gt; il file grande viene trasferito 1,9 volte)

# 2 ha lo svantaggio che il filtro potrebbe essere troppo grossolano per i tuoi scopi.


Grazie Aaron, apprezza la rapida risposta. Risponderò di seguito.

Spiacenti, avrei dovuto chiarire: ho il repository SVN controllato su un server effimero in Amazon EC2. Ho quindi montato Alfresco come davfs sullo stesso server. Stai suggerendo di controllare il repository direttamente nel monte davfs? Prendo i tuoi due punti a bordo; e apprezzo gli avvertimenti nell'usare come li ho considerati prima. Tuttavia, se non c'è un modo più pulito per farlo, sarei più propenso ad optare per la seconda opzione dei due. Grazie ancora.

Non è accurato, se uccidi rsync quando trasferisci un file al 90%, quando lo avvii di nuovo lo riprenderà.
useless

Non so molto di davfs e di come risponda a varie operazioni, ma forse puoi provare a eseguire il checkout della subversion all'interno del monte davfs. Il problema qui è che svn eseguirà diverse operazioni di lettura / scrittura per file, quindi questo potrebbe essere negativo per i file di grandi dimensioni (probabilmente non è così male se si hanno solo molti file). Dopo il checkout / aggiornamento, Alfresco dovrebbe vedere alcuni file con le date delle modifiche. Se questo cambiamento può innescare la reindicizzazione, allora questo dovrebbe essere molto efficiente.
Aaron Digulla

In generale, il mio approccio è quello di eseguire l'indicizzazione sullo stesso computer (cioè non trasferirli nuovamente su qualche servizio remoto). In questo caso, proverei a controllare i dati sul server che esegue Alfresco invece di montare davfs.
Aaron Digulla
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.