Ext3 / 4'te nasıl şeffaf, verimli, dosya sistemi anlık görüntüsü alabilirim?


11

Uzun zamandır dosya sistemlerini versiyonlamayı düşündüm. Bu bir katil özellik ve Wayback, ext3cow, zfs, sigorta çözümleri veya sadece cvs / svn / git yer paylaşımlarına baktım.

Benim gereksinimlerim için ext3cow'u model olarak görüyorum. Şeffaf, verimli, ancak ekstra ls abc@timestampözellik olmadan yapabilirim . Bir şekilde dosyalarımın otomatik, şeffaf bir versiyonunu elde ettiğim sürece.

Anlık olabilir veya 10s, 30s, 1m, 5m, 15m, vb. Aralıklarla anlık görüntülere dayalı olabilir. 100m'den 1gb'ye kadar.

ZFS, linux'da olduğum için gerçekten bir seçenek değil (ve yeni bir şey değil, sürüm istiyorum, bir ext3 kurulumuna sahip olduğum için sigorta yoluyla kullanmamayı tercih ederim).

Orada hangi çözümler var?

Yanıtlar:


7

Dosya sistemlerinizi LVM kullanarak kaydırırsanız, temel mantıksal birim katmanını kullanarak bir anlık görüntü birimi oluşturabilirsiniz. Bu oldukça basit bir işlemdir ve yedekleme ve geri alma rm -froopsileri gibi standart "enstantane" şeyler için şaşırtıcı derecede etkilidir .


Cevap için teşekkürler. Ne yazık ki, varolan bir dosya sistemine uygulanabilecek bir şey arıyorum.
Dale Forester

6

8 yıl sonra arama buldum SVNFS tarafından Marco R. Gazzetta (aynı isimde eski projesinden farklı olan John Madden [biri farklı şeyler yapar]). Bu SVNFS kullanımları svn r / işlemleri ağırlık şeffaf:

Kendi sürümlemesini yapan bir dosya sistemi oluşturmak yerine, var olan bir sürümleme aracını, alt sürümünü kullandım ve kullanımını şeffaf hale getirdim. Avantajı, alt dosya biliyorsanız, bu dosya sisteminin yeni bir araç öğrenmenizi gerektirmemesidir

Python ile yazılmış ve FUSE kullanıyor:

Şimdi, ekli komut dosyasını çağırarak sürüm dosya sistemini başlatın:

python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles

Her şey yolunda olduğunda, her iki dizinin bir listesini alabilmeniz ve içeriğin aynı olduğunu görebilmeniz gerekir.

Şimdi, herhangi bir dizinde (neredeyse) herhangi bir dosya oluşturursanız, çitin diğer tarafında da görünecektir. En büyük fark, myfiles dizininde bir dosya oluşturduğunuzda, dosyanın otomatik olarak sürüm kontrolü altına yerleştirilmesidir (tersi doğru değildir).

Örnekte SVNFS , repo için ayrı bir dizin kullanır. Test etmeme rağmen. İhtiyaçlarım için çalışma bölümümde depoya sahip olmak istiyorum.


Ayrıca 4 yıl önce Reiser4'ün sürüm yeteneklerine de başvurdum :

Bkz. Reiser 4. Dosyalar dizinlerdir.

Örneğin: diff -u main.C main.C/r/123

Veya mülklere erişmek için

cat main.C/p/svn-eolstyle

echo "foobar" > main.C/p/my-property 

Bu modeli takip etmek en iyisi gibi görünüyor, çünkü büyük bir dosya sistemi zaten bu yola gidiyor.

Paul Querna

Ama ben de kontrol etmedim.


İki yıl önce daha fazla araştırmaya gittim, istiflenebilir dosya sistemleri oluşturmak için FiST projesi buldum ve prof. Erez Zadok ait Stony Brook Üniversitesi danışmanı / Mentor Proje denilen içindi versionfs uzun zaman önce. Alıntı yapmak:

http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/

http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf

kullanıcıların kendi sürümlerini kolay ve verimli bir şekilde yönetmelerini sağlar. Versionfs, bu işlevselliği tipik kullanıcı benzeri iş yükleri için% 4'ten fazla ek yük olmadan sağlar. Versionfs, kullanıcıların hem tutma sürümleri hem de saklama politikaları aracılığıyla sırasıyla hangi sürümlerin saklanacağını ve nasıl saklanacağını seçmelerine olanak tanır. Kullanıcılar, kendi ihtiyaçlarını en iyi karşılayan alan ve performans arasındaki dengeyi seçebilir: tam kopyalar, sıkıştırılmış kopyalar veya deltaları engelle. Kullanıcılar sürümlerini kontrol edebilse de, yönetici minimum ve maksimum değerleri zorlayabilir ve kullanıcılara mantıklı varsayılan değerler sunabilir.

Ayrıca, libversionfs kullanarak, değiştirilmemiş uygulamalar sürümleri inceleyebilir, değiştirebilir ve kurtarabilir. Kullanıcılar, kullanıcılardan ayrı komutlar öğrenmelerini istemek yerine önceki dosya sürümlerine erişmek için tanıdık araçları çalıştırabilir veya sistem yöneticisinden bir dosya sistemini yeniden yüklemelerini isteyebilir. Libversionfs olmadan, önceki sürümler kullanıcılardan tamamen gizlenir.

Son olarak, Versionfs, geçmiş sistemler tarafından kullanılan basit bir yazarak kopyalamanın ötesine geçer: Değişiklik üzerine kopyalamayı uygularız. İlk başta eski ve yeni sayfalar arasındaki karşılaştırmanın çok pahalı olmasını beklememize rağmen, sistem süresindeki artışın değişmemiş blok yazma ile ilişkili azaltılmış G / Ç ve CPU süresinden daha fazla dengelendiğini bulduk. Daha pahalı depolama ilkeleri kullanıldığında (örn. Sıkıştırma), değişiklik üzerine kopyalama daha da yararlıdır.

Benim için çok ilginç görünüyordu, ancak projede çalışan adamlarla iletişime geçmek, kaynak kodunun bilinen bir yeri olmadığını ortaya çıkardı. Profesör postada şöyle dedi:

Versionfs kodu artık çok eskidir ve yalnızca çekirdek 2.4'te çalışmıştır. Hala istiflenebilir bir sürüm f / s istiyorsanız, bunu sıfırdan yazmak gerekir - muhtemelen wrapflere dayanır (bkz. Wrapfs.filesystems.org/).

İstiflenebilir dosya sistemleri kavramı benim için çok hoş görünse de burada çalışan bir proje yok. Herkes projeye başlamak istiyorum onf wrapfs , bana haber verin :)


3

Gitfs'i kontrol edebilirsiniz . Git'e dayanan bir FUSE dosya sistemidir, oldukça kararlı ve kullanımı kolaydır.

Temel olarak, git üzerine bir bindirme. Bir dosyayı veya dizini her güncellediğinizde bu değişiklikle bir taahhüt oluşturur (taahhütleri toplu hale getirmeyi bilir, böylece bir arşivi açtığınızda 100 taahhüt ile sonuçlanmazsınız). Ayrıca uzaktan kumandanızı senkronize etmeyi ve 'her zaman benimkini kabul et' stratejisini kullanarak çatışmaları birleştirmeyi bilir.

Bağladığınızda, size iki dizin getirir: güncel ve geçmiş . ├── current │   ├── test1.md │   ├── test2.md │   ├── test3.md -> current/test2.md │   ├── test4.md │   └── test_directory └── history ├── 2014-11-23 │   ├── 20-00-21-d71d1579a7 │   │   └── testing.md │   └── 20-42-32-7d09611d83 │   ├── test2.md │   └── testing.md ├── 2014-12-08 │   ├── 16-38-30-6d6e71fe47 │   │   ├── test2.md │   │   └── test1.md

Daha fazla bilgi bu sayfada bulunabilir .


Daha fazla bilgi eklemek bu cevabı geliştirecektir.
Dave M


0

Ben rsnapshot deneyin - Ben kendim kullanmadım, ama @ dosya düzeyinde veri tekilleştirme sistemleri bakarken tökezledi.


İlginç. Kesinlikle içine bakacağım. Endişem, io yükünün sistemimde kekemeliğe neden olacağı (rsync ile bir süre önce benzer bir şey yapmadı ve çalıştırıldığında diğer konsollardaki aksamalar / kekemelik davranışı nedeniyle kullanmayı bıraktım).
Dale Forester

Ben rsnapshot bir göz attım ve onun fikrini seviyorum ama anlık görüntü ne olursa olsun kopyasını gerektirir çok, çok talihsiz bir durum. Ne yazık ki ve gereklilikle, sınırlarında sürücülerle çalışıyorum ve boş alandan biraz daha büyük olan içerikleri anlık olarak çekmek istiyorum.
Dale Forester

1
Zorluk gereksinimlerinizdedir. rsnapshot veya LVM gibi bir şeyin yanı sıra ext2 / ext3'te yerleşik bir enstantane özelliği yoktur. ext3cow'a dikkat çekersiniz, ancak temeldeki sistem sistemini değiştirmeniz gerekir. Rsnapshot'ı kullanabileceğiniz ve verilerinizi BAŞKA bir makinede saklayabileceğinizi unutmayın , ne tür bir alandan bahsettiğinizi bilmiyorum, ancak anlık görüntülerinizi başka bir makinede tutmak mantıklı olabilir mi? Ayrıca, her türlü anlık görüntünün disk alanı gerektireceğini unutmayın. Sürücüleriniz kapasiteye yakınsa, anlık görüntüler için ne kadar alanınız kalır?
Jason

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.