Istantanea `cp -al` i cui hard link vengono indirizzati a un nuovo file quando vengono modificati


11

Sto cercando di scattare regolarmente istantanee di una cartella enorme.

Ho letto qui: http://www.mikerubel.org/computers/rsync_snapshots/#Incremental
che cp -alscatta un'istantanea di una cartella semplicemente copiando i collegamenti reali.

Va benissimo, ma il problema è che in questa istantanea, se cambio un file, cambia in tutte le istantanee. Quello che vorrei invece è che il sistema crei un nuovo file in cambio e lo colleghi invece. In questo modo ogni istantanea non diventerebbe non valida in una modifica del primo file.

Come posso raggiungerlo?

ps ho provato rsync -a --delete --link-dest=../backup.1 source_directory/ backup.0/, ma ha lo stesso problema.

Risposte:


7

Ecco come funzionano gli hardlink. Ma ci sono modi per aggirarlo:

Mi vengono in mente un paio di opzioni:

  • Utilizzare un filesystem con supporto per file copy-on-write, come btrfs. Naturalmente, se stessi usando btrfs, useresti solo le sue istantanee native ... Se il tuo filesystem lo supporta, puoi usarlo cp --reflink=always. Sfortunatamente, ext4 non supporta questo.
  • Condividi solo i collegamenti fisici tra le tue istantanee, non con l'originale. Cioè, la prima volta che vedi una determinata versione di un file, copiarlo nell'istantanea. Ma la prossima volta, collegalo a quello nella precedente istantanea. (Non sono sicuro di quale programma ho usato per fare questo - un decennio fa - ma la ricerca rivela dirvish, obnam, storebackup e rsnapshot)
  • A seconda di come vengono modificati i tuoi file, potresti essere in grado di garantire che un temp / rename di scrittura venga usato per cambiarli, quindi ciò interromperà il collegamento fisico, quindi la versione nell'istantanea rimarrà incontaminata. Questo è meno sicuro, tuttavia, poiché i bug potrebbero corrompere la tua istantanea.
  • Scatta istantanee LVM dell'intero filesystem.

Naturalmente, c'è l'altra opzione: utilizzare un sistema di backup adeguato. La maggior parte di essi può gestire solo il backup dei file modificati.


Cosa mi consigliate come metodo per eseguire il backup di una cartella di grandi dimensioni?
Hermann Ingjaldsson,

Stavo pensando di usare rsync su un server che ha un cronjob per fare regolarmente cp -al per le istantanee ... insieme a rsync-in avanti per ancora più copie. Come ti sembra?
Hermann Ingjaldsson,

@HermannIngjaldsson bene, dipende da come esegui i tuoi backup. Personalmente, lo aggiungerei semplicemente alla mia configurazione di Bacula, ma non lo consiglierei a meno che tu non abbia un sacco di macchine per eseguire il backup o non conosci già Bacula. Quindi, immagino che ti suggerirei di provare prima rsnapshot.
derobert

rsnapshotè buono
Developerbmw

4

Quello che stai cercando è una forma di copia su scrittura , in cui più file con lo stesso contenuto utilizzano lo stesso spazio sul disco fino a quando uno di essi non viene modificato. I collegamenti fisici implementano la copia su scrittura solo se l'applicazione che esegue la scrittura elimina il file e crea un nuovo file con lo stesso nome (che di solito viene creato creando un nuovo file con un nome diverso, quindi spostandolo in posizione). Evidentemente l'applicazione che stai utilizzando non lo sta facendo: sta sovrascrivendo il file esistente.

Alcune applicazioni possono essere configurate per utilizzare la strategia di sostituzione. Alcune applicazioni usano la strategia di sostituzione per impostazione predefinita, ma usano la strategia di sovrascrittura quando vedono un file con più collegamenti fissi, proprio per non interrompere i collegamenti rigidi. La tua attuale tecnica di istantanea funzionerà se puoi configurare l'applicazione per sostituirla invece di sovrascriverla.

Fl-cow modifica i programmi per utilizzare sistematicamente la strategia di sostituzione su file con più collegamenti fissi.

In alternativa, puoi archiviare i tuoi file su un filesystem che esegue la copia su scrittura o la deduplicazione, oppure avere una funzione di istantanea e non preoccuparti dei collegamenti reali : Btrfs o Zfs . A seconda dello schema di partizionamento, l'utilizzo di snapshot LVM può essere un'opzione.

La mia raccomandazione è di utilizzare uno strumento di istantanea adeguato. Fare backup affidabili è sorprendentemente difficile. Probabilmente vuoi rsnapshot .


2

Quello che segue è uno script ruby ​​che ho scritto che avvolge "cp -al" e rsync in un bel script che può essere eseguito manualmente o tramite cron. La destinazione può essere locale o remota (tramite ssh):

Ghetto Timemachine

La risposta di base alla tua domanda, come menzionato in un commento precedente, la fonte deve essere separata dai collegamenti reali. Ad esempio, supponi un backup giornaliero della tua home directory:

Fonte:

  • / Home / flakrat

Destinazione:

  • / Dati / backup / al giorno
    • /Lunedi
    • /martedì
    • /mercoledì
    • /giovedi
    • ...

I collegamenti reali vengono creati eseguendo "cp -al" sul backup di ieri. Di 'che è martedì mattina quando lo esegui:

cd /data/backup/daily

rm -rf tuesday

cp -al monday tuesday

rsync -a --delete /home/flakrat /data/backup/daily/tuesday/


0

rdiff-backup sembra fare quello che vuoi, dai un'occhiata.

Utilizzando rsync è necessario innanzitutto effettuare un backup completo non utilizzando collegamenti fisici. Il backup successivo può puntare al backup precedente e al collegamento reale ad esso. In questo modo i tuoi backup non sono strettamente collegati ai tuoi file di lavoro (quelli che stai modificando). Esempio. Se il mio backup precedente fosse così backup cartella.01 il mio script di backup incrementerebbe prima le cartelle rinominandole di una in modo che backup.01 diventi backup.02. Quindi lo script crea una nuova cartella vuota chiamata backup.01. avrebbe quindi risincronizzato il nuovo backup nella nuova cartella e il collegamento reale al backup.02 in modo che solo i nuovi file occupassero spazio nel backup. Il comando rsync sarebbe simile al seguente: rsync -rlt sourcepath backuppath / backup.01 --link-dest = backuppath / backup.02

Quindi puoi vedere, tutto il collegamento reale sta avvenendo sul percorso di backup. In questo modo non è necessario preoccuparsi della copia in scrittura quando si modificano i file nel percorso di origine.

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.