Düzenlendiğinde sabit bağlantıları yeni bir dosyaya yönlendirilen `cp -al` anlık görüntüsü


11

Düzenli olarak büyük bir klasörün anlık görüntülerini almaya çalışıyorum.

Burada okudum: http://www.mikerubel.org/computers/rsync_snapshots/#Incremental
, cp -alsadece sabit bağlantıları kopyalayarak bir klasörün anlık görüntüsünü alır.

Her şey harika, ama sorun şu ki, bu anlık görüntüde, bir dosyayı değiştirirsem, tüm anlık görüntülerde değişir. Bunun yerine ne istiyorum, sistem değişiklik üzerine yeni bir dosya oluşturmak ve bunun yerine bağlantı var. Bu şekilde, ilk dosyanın düzenlenmesinde her anlık görüntü geçersiz olmaz.

Bunu nasıl başarabilirim?

ps Denedim rsync -a --delete --link-dest=../backup.1 source_directory/ backup.0/, ama aynı sorunu var.

Yanıtlar:


7

Hardlinkler böyle çalışır. Ancak, bunun etrafında yollar var:

Birkaç seçenek akla geliyor:

  • Yazarken kopyalanacak dosyalar için destekli bir dosya sistemi kullanın btrfs. Elbette, btrfs kullanıyor olsaydınız, sadece yerel anlık görüntülerini kullanırdınız ... Dosya sisteminiz destekliyorsa, kullanabilirsiniz cp --reflink=always. Ne yazık ki, ext4 bunu desteklemiyor.
  • Sabit bağlantıları yalnızca orijinal fotoğraflarınızla değil, anlık görüntülerinizde paylaşın. Yani, bir dosyanın belirli bir sürümünü ilk gördüğünüzde anlık görüntüye kopyalayın. Ancak bir dahaki sefere önceki görüntüye bağla. (Bunu yapmak için hangi programı kullandığımdan emin değilim - on yıl önce - ancak arama dirvish, obnam, storebackup ve rsnapshot'ı açar)
  • Dosyalarınızın nasıl değiştirildiğine bağlı olarak, bunları değiştirmek için bir yazma temp / yeniden adının kullanıldığını garanti edebilirsiniz, bu durumda sabit bağlantı kesilir - böylece anlık görüntüdeki sürüm bozulmadan kalır. Bununla birlikte, hatalar anlık görüntünüzü bozabileceğinden, bu daha az güvenlidir.
  • Tüm dosya sisteminin LVM anlık görüntülerini alın.

Tabii ki, başka bir seçenek var - uygun bir yedekleme sistemi kullanın. Çoğu yalnızca değiştirilen dosyaları yedeklemeyi başarabilir.


Devasa bir klasörü yedeklemenin bir yolu olarak ne öneriyorsunuz?
Hermann Ingjaldsson

Anlık görüntüler için düzenli olarak cp -al yapmak için bir cronjob olan bir sunucuya rsync kullanarak düşünüyordum .. daha fazla kopya için devam rsync-ing yanında. Kulağa nasıl geliyor?
Hermann Ingjaldsson

@HermannIngjaldsson iyi, yedeklerinizi nasıl yaptığınıza bağlı. Şahsen, sadece Bacula kurulumuma eklerdim - ancak yedeklemek için bir grup makineniz yoksa veya zaten Bacula'yı bilmiyorsanız bunu tavsiye etmem. Yani, sanırım önce rsnapshot'ı denemenizi öneririm.
derobert

rsnapshotiyi
developerbmw

4

Aradığınız şey, aynı içeriğe sahip birden çok dosyanın biri değiştirilene kadar diskte aynı alanı kullandığı bir yazma-kopyalama kopyasıdır . Sabit bağlantılar, yalnızca yazma işlemini yapan uygulama dosyayı silip aynı adla yeni bir dosya oluşturduğunda (genellikle farklı bir adla yeni bir dosya oluşturup yerine taşıyarak yapılır) yazma üzerine kopyalama uygular. Kullandığınız uygulama açıkça bunu yapmıyor: varolan dosyanın üzerine yazıyor.

Bazı uygulamalar değiştirme stratejisini kullanacak şekilde yapılandırılabilir. Bazı uygulamalar varsayılan olarak değiştirme stratejisini kullanır, ancak sabit bağlantıları koparmamak için birden çok sabit bağlantıya sahip bir dosya gördüklerinde üzerine yazma stratejisini kullanır. Uygulamanızı üzerine yazmak yerine değiştirilecek şekilde yapılandırabiliyorsanız, mevcut anlık görüntü tekniğiniz çalışır.

Fl-cow, programları çoklu sabit bağlantıları olan dosyalarda değiştirme stratejisini sistematik olarak kullanacak şekilde değiştirir.

Alternatif olarak, dosyalarınızı yazma üzerine kopyalama veya tekilleştirme gerçekleştiren veya anlık görüntü özelliğine sahip olan ve sabit bağlantılar konusunda endişelenmeyen bir dosya sisteminde saklayabilirsiniz: Btrfs veya Zfs . Bölümleme düzeninize bağlı olarak, LVM anlık görüntüleri kullanmak bir seçenek olabilir.

Benim tavsiyem uygun bir enstantane aracı kullanmak. Güvenilir yedeklemeler yapmak şaşırtıcı derecede zordur. Muhtemelen rsnapshot istiyorsunuz .


2

Aşağıdaki "cp -al" ve rsync elle veya cron üzerinden çalıştırılabilir güzel bir komut dosyası içine saran bir yakut komut dosyası. Hedef yerel veya uzak olabilir (ssh ile):

Getto Timemachine

Sorunuzun temel cevabı, önceki bir yorumda belirtildiği gibi, kaynağın sabit bağlantılardan ayrı tutulması gerekir. Örneğin, ana dizininizin günlük yedeğini alın:

Kaynak:

  • / Home / flakrat

Hedef:

  • Günlük / veri / yedekleme /
    • /Pazartesi
    • /Salı
    • /Çarşamba
    • /Perşembe
    • ...

Sabit bağlantılar, dünün yedeklemesine karşı "cp -al" çalıştırılarak oluşturulur. Diyelim ki onu çalıştırdığın Salı sabahı:

cd /data/backup/daily

rm -rf tuesday

cp -al monday tuesday

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


0

rdiff-backup istediğinizi yapıyor gibi görünüyor, kontrol edin.

Rsync'i kullanarak sabit bağlantıları kullanmadan önce tam bir yedekleme yapmanız gerekir. Bir sonraki yedekleme, önceki yedeklemeyi ve sabit bağlantıyı gösterebilir. Bu şekilde yedeklemeleriniz, çalışan dosyalarınıza (değiştirdiğiniz dosyalara) sabit bir şekilde bağlanmaz. Misal. Önceki yedeklemem çok fazla klasör yedeklemesi olsaydı, yedekleme komut dosyam önce klasörleri birer birer yeniden adlandırarak arttıracaktır, bu yüzden backup.01 yedek olur. Daha sonra komut dosyası, backup.01 adlı yeni bir boş klasör oluşturur. daha sonra yeni yedeklemeyi yeni klasöre yeniden bağlar ve backup.02'ye sabit bir bağlantı kurar, böylece yedeklemede yalnızca yeni dosyalar yer kaplar. Rsync komutu şuna benzer: rsync -rlt sourcepath backuppath / backup.01 --link-dest = backuppath / backup.02

Gördüğünüz gibi, tüm zor bağlantılar yedekleme yolunda oluyor. Bu şekilde, kaynak yolunuzdaki dosyaları değiştirirken yazma üzerine kopyalama konusunda endişelenmenize gerek kalmaz.

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.