Istantanea ZFS su file come backup con rotazione


14

Ho un sistema FreeNAS locale e voglio usare gli snapshot ZFS per i backup.
FreeNAS ha le attività di replica integrate che utilizzano

zfs send snapshot_name

per inviare un'istantanea a un sistema remoto. Ma questo richiede un sistema con ZFS dall'altra parte.

Voglio inviare l'istantanea a un file e inviare questo file compresso e crittografato al computer remoto.

Questo è possibile con

zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl

Ogni giorno faccio un'istantanea del pool di archiviazione e conservo ogni istantanea per 30 giorni.
Con ogni istantanea acquisita, invierò questa istantanea a un file.
- snapshot_file 1 contiene tutti i file (diciamo 2GB)
- snapshot_file 2 ha solo le modifiche a snapshot_file 1 (diciamo 5MB)
- snapshot_file 3 contiene le modifiche a snapshot_file 2; e così via.

Il giorno 31 snapshot_file 1 viene eliminato (perché voglio solo le modifiche degli ultimi 30 giorni)

Pertanto snapshot_file 2 deve contenere tutti i file (2 GB di modifiche snapshot_file 1 + 5 MB)

Ma con questo approccio ogni giorno (dal giorno 31 in poi) è necessario creare un nuovo file da 2 GB e inviarlo a un sistema remoto. Questo è troppo sovraccarico.

Quale sarebbe l'approccio migliore per utilizzare le istantanee reindirizzate a un file come strategia di backup con una cronologia di X giorni?

PS: So che ci sono molti software di backup là fuori (ad esempio rdiff-backup), che potrei usare. Ma sono curioso di sapere come si possa fare.


Perché non lo usi zfs recvall'altra estremità (su un pool con zfs set compression=gzip-9ad esempio). La memorizzazione di file di istantanee mi sembra molto inefficiente.
Stéphane Chazelas,

1
@StephaneChazelas perché non ho un file system ZFS all'altra estremità. Il mio sistema remoto è un gentoo box con ext4 (so che potrei installare zfsonlinux, ma preferisco non farlo)
Martin Grohmann,

Risposte:


12

Se memorizzi le istantanee nei file, al contrario del file system (ad es. Con zfs receive), temo che ciò non sia possibile.

ZFS sul lato ricevente

Se si utilizza ZFS sul lato di invio e sul lato di ricezione, è possibile evitare di dover trasferire l'intera istantanea e trasferire solo le differenze dell'istantanea rispetto alla precedente:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' | \
  zfs receive

ZFS conosce le istantanee e memorizza i blocchi reciproci solo una volta. Avere il file system in grado di comprendere le istantanee consente di eliminare quelle vecchie senza problemi.

Altro file system sul lato ricevente

Nel tuo caso, memorizzi le istantanee in singoli file e il tuo file system non è a conoscenza delle istantanee. Come hai già notato, questo interrompe la rotazione. O è necessario trasmettere intere istantanee, il che sprecherà larghezza di banda e spazio di archiviazione, ma consente di eliminare singole istantanee. Non dipendono l'uno dall'altro. Puoi fare istantanee incrementali come questa:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' \
  > incremental-2014-02-04:05

Per ripristinare uno snapshot incrementale sono necessari anche gli snapshot precedenti. Ciò significa che non è possibile eliminare i vecchi incrementali.

Possibili soluzioni

Potresti fare incrementali come mostrato nel mio ultimo esempio e fare un nuovo non incrementale ogni mese. I nuovi incrementali dipendono da questo non incrementale e sei libero di eliminare le vecchie istantanee.

Oppure potresti cercare altre soluzioni di backup. C'è rsnapshot , che utilizza rsynce collegamenti reali . Fa un ottimo lavoro a rotazione ed è molto efficiente in termini di larghezza di banda, poiché richiede un backup completo solo una volta.

Poi ci sono bareos . Fa incrementi, che sono a banda larga e salvaspazio. Ha una caratteristica molto bella; può calcolare un backup completo da un set di incrementali. Ciò consente di eliminare i vecchi incrementali. Ma è un sistema piuttosto complesso e destinato a configurazioni più grandi.

La soluzione migliore, tuttavia, è utilizzare ZFS sul lato ricevente. Sarà efficiente in termini di larghezza di banda, archiviazione efficiente e molto più veloce rispetto alle altre soluzioni. L'unico vero inconveniente a cui riesco a pensare è che dovresti avere almeno 8 GiB di memoria ECC su quella scatola (potresti stare bene con 4 GiB se non esegui alcun servizio e lo usi solo per zfs receive).


si questo lo so. Ma cosa succede se elimino (perché voglio solo avere una cronologia di 30 giorni) il set di dati del file @ 2014-02-04? Quindi ho solo le modifiche apportate dopo il 4 febbraio, ma non tutti i file.
Martin Grohmann,

2
@MartinGrohmann Capisco cosa intendi ora. Bene, questa è la bellezza di ZFS, puoi eliminare le vecchie istantanee su ZFS senza problemi. Su altri filesystem devi conservare quelli vecchi. Forse stai meglio con qualcosa del genere rsnapshot. In alternativa, è possibile iniziare un nuovo non incrementale dopo un mese e quindi eliminare gli incrementali precedenti.
Marco,

grazie per l'aiuto; Ho appena trovato la duplicità È probabilmente la strada da percorrere con la possibilità della crittografia.
Martin Grohmann,

2
@MartinGrohmann Duplicity è un bel programma, ma soffre dello stesso problema . Se fai solo incrementi, il tuo spazio continua a crescere. Non è possibile recuperare spazio senza sprecare larghezza di banda e fare un nuovo backup completo. O vai su ZFS su entrambi i lati o dai un'occhiata a bareos , può calcolare un nuovo backup completo da incrementali. Ciò consente di eliminare i vecchi incrementali senza trasferire nuovamente tutto.
Marco,

Se il problema è l'ampiezza di banda della tua fonte, una potenziale soluzione (che sto implementando per il mio NAS ZFS di casa ora) è quella di inviare sempre solo incrementali al tuo archivio remoto, ma una volta al mese gira un VPS freeBSD remoto (es. oceano digitale) che può quindi aprire l'ultima istantanea completa, zfs recv al suo interno un numero # di incrementali, quindi memorizzare il risultato come una nuova istantanea. Il VPS deve solo essere abbastanza a lungo per creare il nuovo backup di base. Digital ocean ha un'API che consente di creare / distruggere facilmente i loro VPS. E il tuo sistema locale deve solo inviare backup incrementali.
stuckj
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.