Döndürmeyle Yedekleme olarak dosyaya ZFS Anlık Görüntüsü


14

Yerel bir FreeNAS sistemim var ve yedeklemeler için ZFS anlık görüntülerini kullanmak istiyorum.
FreeNAS, aşağıdakileri kullanan yerleşik Çoğaltma Görevlerine sahiptir:

zfs send snapshot_name

uzaktaki bir sisteme anlık görüntü göndermek için. Ancak bunun için diğer tarafta ZFS'li bir sistem gerekiyor.

Anlık görüntüyü bir dosyaya göndermek ve bu sıkıştırılmış ve şifrelenmiş dosyayı uzak makineye göndermek istiyorum.

Bu mümkün

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

Her gün depolama havuzunun anlık görüntüsünü alıyorum ve her anlık görüntüyü 30 gün boyunca saklıyorum.
Alınan her anlık görüntü ile bu anlık görüntüyü bir dosyaya bağlayacağım.
- snapshot_file 1 içinde her dosya var (2GB diyelim)
- snapshot_file 2 yalnızca snapshot_file 1 değişikliğine sahiptir (diyelim 5MB)
- snapshot_file 3, snapshot_file 2 değişikliğini tutar; ve bunun gibi.

31. günde snapshot_file 1 siliniyor (çünkü yalnızca son 30 günün değişikliklerini istiyorum)

Bu nedenle snapshot_file 2'nin her dosyayı tutması gerekir (2GB snapshot_file 1 + 5MB değişikliği)

Ancak bu yaklaşımla her gün (31. günden itibaren) yeni bir 2GB dosya oluşturulmalı ve uzak bir sisteme gönderilmelidir. Bu çok fazla yük.

X gün geçmişiyle bir dosyaya eklenmiş anlık görüntüleri yedekleme stratejisi olarak kullanmak için en iyi yaklaşım hangisidir?

PS: Orada kullanabileceğim bir sürü yedekleme yazılımı (örneğin rdiff-backup) olduğunu biliyorum. Ama bunun nasıl yapılabileceğini merak ediyorum.


Neden zfs recvdiğer tarafta ( zfs set compression=gzip-9örneğin bir havuzda ) kullanmıyorsunuz ? Anlık görüntü dosyalarını saklamak benim için çok verimsiz geliyor.
Stéphane Chazelas

1
@StephaneChazelas, çünkü diğer ucunda bir ZFS dosya sistemi yok. Uzaktaki sistemim ext4 ile bir gentoo kutusu (zfsonlinux'u kurabileceğimi biliyorum, ama ben değilim)
Martin Grohmann

Yanıtlar:


12

Anlık görüntüleri dosya sistemindeki (örneğin ile zfs receive) dosyalarda saklarsanız, korkarım, bu mümkün değildir.

Alıcı taraftaki ZFS

Gönderme ve alma tarafında ZFS kullanıyorsanız, anlık görüntünün tamamını aktarmaktan ve yalnızca anlık görüntünün farklılıklarını bir öncekine göre aktarmak zorunda kalmadan kaçabilirsiniz:

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

ZFS anlık görüntüleri bilir ve karşılıklı blokları yalnızca bir kez saklar. Dosya sisteminin anlık görüntüleri anlaması, eskilerini sorunsuz bir şekilde silmenizi sağlar.

Alıcı taraftaki diğer dosya sistemi

Sizin durumunuzda anlık görüntüleri tek tek dosyalarda saklarsınız ve dosya sisteminiz anlık görüntülerin farkında değildir. Daha önce fark ettiğiniz gibi, bu rotasyonu bozar. Bant genişliğini ve depolama alanını boşa harcayan, ancak ayrı ayrı anlık görüntüleri silmenizi sağlayan tüm anlık görüntüleri iletmeniz gerekir. Birbirlerine bağlı değiller. Bunun gibi artımlı anlık görüntüler yapabilirsiniz:

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

Artımlı bir anlık görüntüyü geri yüklemek için önceki anlık görüntülere de ihtiyacınız vardır. Bu, eski artımları silemeyeceğiniz anlamına gelir.

Muhtemel çözümler

Son örneğimde gösterildiği gibi artımlı yapabilir ve her ay yeni bir artımlı olmayan yapabilirsiniz. Yeni artımlar bu artımlı olmayan duruma bağlıdır ve eski anlık görüntüleri silmekte özgürsünüz.

Veya diğer yedekleme çözümlerine bakabilirsiniz. Sabit bağlantıları kullanan rsnapshot var rsync. Rotasyonda çok iyi bir iş çıkarır ve sadece bir kez tam yedekleme gerektirdiğinden bant genişliği verimlidir.

Sonra bareolar var . Bant genişliği ve yerden tasarruf sağlayan artışlar yapar. Çok güzel bir özelliği var; bir dizi artımdan tam bir yedek hesaplayabilir. Bu, eski artımları silmenizi sağlar. Ancak oldukça karmaşık bir sistemdir ve daha büyük kurulumlar için tasarlanmıştır.

Ancak en iyi çözüm, alıcı tarafta ZFS kullanmaktır. Bant genişliği verimli, depolama verimli ve diğer çözümlerden çok daha hızlı olacaktır. Düşünebileceğim tek dezavantajı, bu kutuda en az 8 GiB ECC belleğiniz olması gerektiğidir (herhangi bir hizmet çalıştırmazsanız ve sadece bunu kullanırsanız 4 GiB ile iyi olabilirsiniz zfs receive).


evet bunu biliyorum. Ama 2014-02-04 dosya veri kümesini silersem (yalnızca 30 günlük bir geçmişim olmasını istediğimden)? Sonra sadece 4 Şubat sonra değişiklikler var, ama her dosya değil.
Martin Grohmann

2
@MartinGrohmann Şimdi ne demek istediğini anlıyorum. ZFS'nin güzelliği bu, ZFS'deki eski anlık görüntüleri sorunsuz bir şekilde silebilirsiniz. Diğer dosya sistemlerinde eskilerini tutmanız gerekir. Belki de o zaman böyle bir şey yapsan iyi olur rsnapshot. Veya bir ay sonra yeni bir artımlı olmayan başlatabilir ve ardından önceki artımları silebilirsiniz.
Marco

yardımın için teşekkürler; Ben sadece yineleme buldum Muhtemelen şifreleme yeteneği ile gitmek için bir yol.
Martin Grohmann

2
@MartinGrohmann Duplicity güzel bir program, ancak aynı sorundan muzdarip . Sadece artım yaparsanız alanınız büyümeye devam eder. Bant genişliğini boşa harcamadan ve yeni bir tam yedekleme yapmadan alan geri kazanamazsınız. Ya her iki tarafa da ZFS gidin ya da bareolara bakın, artımlardan yeni bir tam yedek hesaplayabilir. Bu, her şeyi yeniden aktarmadan eski artımları silmenizi sağlar.
Marco

Kaynağınızdaki bant genişliği sorunsa, (şimdi evim ZFS NAS'ım için uyguladığım) potansiyel bir çözüm her zaman yalnızca uzak depolama alanınıza artımlı göndermektir, ancak ayda bir uzak bir freeBSD VPS (örn. dijital okyanus) daha sonra son tam anlık görüntüyü açabilen zfs, artımlı sayıların bazılarını içine alır ve ardından sonucu yeni bir anlık görüntü olarak depolar. VPS'nin yeni temel yedeklemeyi oluşturacak kadar uzun olması yeterlidir. Dijital okyanus, VPS'lerinin kolayca oluşturulmasını / yok edilmesini sağlayan bir API'ye sahiptir. Yerel sisteminizin yalnızca artımlı yedekler göndermesi gerekir.
stuckj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.