Domanda

È possibile utilizzare Sovversione Apache (SVN) come strumento di backup per uso generale?(Come una sorta di rsync alternativa.)

È stato utile?

Soluzione

Ho trovato questo articolo una descrizione piuttosto interessante dell'uso di svn per eseguire il backup della directory home e altro ancora:

Utilizzo Subversion per eseguire il backup dei miei box Linux.Con un po' di creatività minore, copre facilmente:

  • Istantanee giornaliere e backup fuori sede.
  • Facile aggiunta e rimozione di file e cartelle.
  • Tracciamento dettagliato delle versioni dei file.

Consente inoltre alcune funzionalità bonus:

  • E-mail di registro regolari per tenere traccia dell'attività del file system tramite gli hook di eventi di Subversion.
  • Gli utenti possono richiedere il checkout delle proprie cartelle home da qualsiasi revisione del repository.
  • I server nuovi o sostitutivi possono essere configurati con alcuni comandi svn checkout.

Fonte: http://www.mythago.net/svn_for_backup.html

Anche trovato Questo articolo che mostra un esempio di controllo delle versioni della directory home.Ciò ti consente di portare il tuo ambiente con te controllando la tua directory home su una nuova macchina.Facevo qualcosa di simile e l'ho trovato molto utile.

Altri suggerimenti

Una cosa da tenere a mente quando si utilizza SVN come backup per i file binari è che SVN raddoppierà la dimensione dei file, poiché mantiene una copia locale di ciascun file (nel file .svn/text-base).

A parte questo utilizzo SVN anche per il backup.Aggiungi semplicemente tutti i file e poi esegui il commit tramite script.

Come backup "generale", direi che probabilmente non è l'idea migliore, principalmente per i motivi indicati da altri (molte cartelle in eccesso e spazio su disco sprecato).Se vuoi solo conservare i backup, ancora una volta direi che probabilmente ci sono opzioni migliori, a seconda delle tue esigenze, ad esempio:hai bisogno di conservare ogni singola versione di ogni singolo file o sarebbero sufficienti alcune istantanee dei tuoi dati?

Tuttavia, nel mio ufficio abbiamo un piccolo team di 6 persone che lavora con file condivisi (ad esempio:manuali di politiche e procedure, moduli di registrazione, ecc.).Nella maggior parte dei casi, i membri del team lavoreranno in remoto (da casa o in viaggio) e spesso offline.Invece di utilizzare una configurazione centrale di cartelle condivise, utilizziamo SVN per fornire a ogni persona un'intera copia funzionante della cartella su cui può lavorare, fare riferimento e sincronizzare quando possibile.Questo prende due piccioni con una fava:tutti possono accedere e modificare i file anche mentre sono offline, inoltre ci offre una ridondanza davvero eccezionale nei nostri backup.Se il mio portatile prende fuoco, non è un problema perché posso semplicemente estrarre un'altra copia (ovviamente su un altro computer).Se il server prende fuoco, avremo i backup del repository da ripristinare.Se il server E tutti i backup del repository prendono fuoco, tutto ciò che hai perso sono le vecchie versioni dei file.L'unico modo in cui perderai i dati correnti è se il server, i backup del repository e ogni singolo computer che dispone di un checkout prendono misteriosamente fuoco.

Come alcuni hanno detto, però, SVN non rimuoverà mai le informazioni dal repository, il che significa che se vuoi conservare i backup solo per 60 giorni, allora, beh, non puoi.Questo non è esattamente vero.Attraverso l'uso di esportare, scarico E importare potresti eliminare efficacemente le versioni precedenti dei file.Non è carino, ma è possibile.

Una cosa che mi darebbe molto fastidio sono le cartelle ".svn", che svn inserisce in ogni cartella di cui tiene traccia.

Sembrano fastidiosi, quando copi una cartella, dovresti ricordarti di non copiarli (o la tua sandbox potrebbe essere irritata) ed è molto più difficile sfogliare un gruppo di cartelle, poiché spesso ci sono molti risultati nel file . cartelle di risorse svn.

Mi piace l'idea di utilizzare un controllo del codice sorgente per controllare il tuo ambiente.Ma personalmente non sceglierei svn per questo lavoro.Io opterei per qualcosa come Git.Ma probabilmente sono solo io...

Utilizzo SVN per eseguire il backup del mio computer e anche per sincronizzare il mio laptop e il mio desktop.Ma presenta i problemi menzionati nelle risposte precedenti, principalmente il raddoppio dell'utilizzo del disco.Ritengo inoltre che l'eccesso di file e il processo SVN che controlla costantemente le modifiche del mio HD rendano la mia macchina più lenta.

Vorrei sottolineare, tuttavia, che SVN è ottimo per sincronizzare diverse macchine e hai anche il vantaggio di poter estrarre un file ovunque se ne hai bisogno: lo faccio anche nel mio browser attraverso l'interfaccia web, A volte.

In sintesi, ho sentimenti contrastanti sull'utilizzo di SVN per il backup per scopi generali.Ma se lo fai, lo consiglio non per archiviare librerie come film, foto e musica, perché tendono ad essere grandi (soffrendo enormemente dell'utilizzo dello spazio raddoppiato) e immutabili: non è necessario un sistema di controllo delle versioni per questo, perché nelle rare occasioni in cui si cambia una file, generalmente non hai bisogno delle vecchie versioni (e SVN non è bravo a creare/memorizzare differenze di file binari, salva l'intera nuova versione del file).Quindi, a meno che SVN non possa essere adattato (una mia intenzione di progetto da molto tempo) per questi casi, suggerisco di utilizzare un metodo alternativo per eseguire il backup di questo tipo di file.

Potresti anche considerare bup - Sistema di backup dei file altamente efficiente basato sul formato git packfile. Si basa su Git nel modo in cui memorizza i dati, il che è molto efficiente per archiviare i file e le loro differenze.

Ho usato CVS come sostituto di ghost quindi non vedo perché no.

È carino perché puoi taggare una linea di base:puoi cambiare la gestione delle macchine.

Funziona meglio su Unix che su Windows, ovviamente.

La cosa che mi scoraggia da questa idea è che per uso generale qualsiasi dato binario verrebbe copiato ogni volta che cambia, mentre il contenuto testuale su cui si basano i sistemi SCM può essere facilmente aggiornato sotto forma di differenze.

Quindi potresti farlo, tieni solo presente che potresti non volerlo usare per gestire cose come i repository di foto se fai molte modifiche.

La cosa bella delle soluzioni di backup più generiche (ad esempio, Time Machine) è che possono eseguire il rollup di più modifiche binarie dopo un po' per risparmiare spazio.Non sono sicuro di quanto sarebbe facile farlo in SVN, Git o Mercurial.

L'uso di SVN per i backup può funzionare.Tuttavia, con il passare del tempo può essere difficile eliminare le vecchie revisioni non necessarie.Supponiamo che tu voglia conservare solo 30 o 60 giorni di backup.SVN non fornisce un modo semplice per rimuovere la cronologia più vecchia di X giorni.Se non disponi di un modo per eliminare la vecchia cronologia, prima o poi esaurirai lo spazio sull'unità di backup.

Ecco una citazione da SVN Libro su svndumpfilter comando:

Poiché la sovversione memorizza tutto in un sistema di database opaco, tentare le modifiche manuali non è saggio, se non abbastanza difficile.E una volta che i dati sono stati archiviati nel repository, la sovversione generalmente non fornisce un modo semplice per rimuovere tali dati.[13]

[13] Questa, tra l'altro, è una funzionalità, non un bug.

ho trovato all'unisono essere un'opzione migliore di svn per un'alternativa rsync.

Questa affermazione di JoaoPSF non è corretta:

(e SVN non è bravo a creare/memorizzare differenze di file binari, salva l'intera nuova versione del file)

Vedi questa citazione da Come fa Subversion a gestire i file binari:

Tieni presente che il fatto che un file sia binario o meno non influisce sulla quantità di spazio del repository utilizzato per archiviare le modifiche a quel file, né influisce sulla quantità di traffico tra client e server.Per scopi di archiviazione e trasmissione, Subversion utilizza un metodo di differenza che funziona altrettanto bene su file binari e di testo;questo non è completamente correlato al metodo di differenza utilizzato dal comando svn diff.

Il backup di /etc con il controllo del codice sorgente può essere di grande aiuto quando si desidera annullare una modifica che ha danneggiato il sistema, sperimentare modifiche o trasferire modifiche da un server a un altro.

Ma la moltitudine di directory .svn di subversion può ostacolarlo, non solo durante la ricerca ma in alcuni casi, come le cartelle *.d, sistemi mal progettati potrebbero interpretare le cartelle .svn stesse come contenenti dati di configurazione.

Ora preferisco usare Mercurial per il backup di /etc poiché inserisce una singola cartella .hg sotto /etc.Per un backup reale e non solo per il controllo della versione è necessario copiare la cartella .hg altrove.

Per utilizzare SVN come backup su Linux, procedi come segue:

  1. Crea un repository vuoto.
  2. Controlla il repository vuoto nell'albero delle cartelle di cui desideri eseguire il backup.
  3. Utilizzare il seguente frammento di codice (svnauto).Devi sostituire "myuser" e "mypassword" con credenziali valide per il tuo repository:
    #!/bin/sh
    svn status --depth=infinity --username=myuser --password=mypassword > /tmp/svnauto_tmp.list
    cat /tmp/svnauto_tmp.list | grep '^?' | sed -e 's/^?       /svn add --depth=infinity --force --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    cat /tmp/svnauto_tmp.list | grep '^!' | sed -e 's/^!       /svn delete --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    rm -f /tmp/svnauto_tmp.list
    svn update . --username=myuser --password=mypassword
    svn commit --username=myuser --password=mypassword --message "Automatic backup"

Lo script sopra aggiungerà/rimuoverà e aggiornerà tutti i file e le sottodirectory all'interno della directory corrente.Per usarlo semplicemente cd nella cartella di cui desideri eseguire il backup (che ovviamente deve essere una copia funzionante) ed esegui svnauto.Nota che devi avere grep e sed installati sul tuo sistema e crea un file temporaneo in /tmp.Può essere utilizzato da un lavoro cron per il commit notturno, utilizzando il seguente script cron:

#!/bin/sh
export LANG=en_US.UTF-8 && cd /my/directory && echo Starting backup $(date) > /root/backup_log.txt && /root/svnauto >> /root/backup_log.txt 2>&1 && echo Finished backup. >> /root/backup_log.txt && cat /root/backup_log.txt

Questo script cron lo presuppone /my/directory è la cartella di cui desideri eseguire il backup (sostituiscila secondo necessità).Si presuppone anche che tu abbia inserito il file svnauto sceneggiatura dentro /root.Crea un registro e lo visualizza alla fine.Ancora un dettaglio:il primo export è necessario affinché svn trovi la lingua corretta.Potrebbe essere necessario adattare questa riga alla tua lingua locale per farla funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top