Hangi dosya sistemi, güç kaybı nedeniyle bozulmaya karşı verilerin güvenliğini sağlamak için en iyi korumayı sunar?


9

Bir x86 aygıtında küçük uClibcve busyboxtabanlı bir yerleşik sistem çalıştırıyorum . Bir initramfs kullanıyorum ama aynı zamanda ext3özel bir yazılı c ++ uygulaması tarafından oluşturulan kalıcı ölçüm günlüğü verilerini depolamak için kullandığım IDE modunda kompakt bir flash aygıt üzerinde özel bir dizin monte . ext3Okuduğum birkaç kitapta IDE modunda CF sürücülerini kullanırken güç kaybına karşı güvenlik için önerildiği için dosya sistemini seçtim ( Karim Yaghmour tarafından Gömülü Linux Sistemleri Oluşturma ve Christopher Hallinan tarafından Gömülü Linux Astarı ). Bu özellikle önemlidir ve veriler kritik öneme sahiptir.

Ancak, önceki sorumdaki bazı yorumlardan dolayı, bir dosya yazma sırasında elektrik kesintisi meydana gelirse bozuk ext3 dosyalarının nasıl geri yükleneceği ile ilgili karışıklık aslında bu dosya sisteminin güç nedeniyle veri bozulmasına karşı güvenlik garantisi sunmadığı anlaşılıyor kaybı. Bu yüzden bilmek istiyorum

  1. ext3aslında bu kurulum için en iyi seçimdir?
  2. Disk yazma işlemi sırasındaki güç kaybı, veriye düzenli olarak eklediğim veri bölümünü düzenli olarak bozuyor mu yoksa dosyanın tamamını bozabilir mi?
  3. Veri olduğunu olduğunu değil tamamen güvenli güç kaybı noktasında yazılıyor? Özellikle, initramfs.cpiodosyamın da bozulma riski var mı?
  4. Verileri korumak için uygulama kodumda kullanabileceğim herhangi bir yöntem var mı (yani ekstra bir bölüm oluşturmak ve verilerimi ayna görüntülerine yazmak için her zaman 2 kopya olacak şekilde) - hız, uygulama için gerçek bir sorun değil, bu yüzden pahalı kopyalama işlemleri kabul edilebilir.

Bu ilgili sorunun yanıtlarını gördüm ve okudum: Günlük kaydı dosya sistemleri bir elektrik kesintisinden sonra bozulmaya karşı garanti veriyor mu? , ama beni şaşırtan şeylerin hepsini kapsamıyor.

Çok fazla soru sorduğumu fark ettim ama çok fazla materyal okumaya rağmen, güç kaybı durumunda verilerim için riskleri anlamada temel bir başarısızlık yaşadığım anlaşılıyor.

Yanıtlar:


11

Güvenlikle ilgili her şeyde olduğu gibi, herhangi bir garanti yoktur, ancak riski (ve maliyeti) olasılığa karşı dengelemeniz gerekir. Deneyimden (ve karanlık çağlardan beri düzinelerce * nix boxen çalıştırıyorum), hiçbir zaman önemli güç kaynaklı dosya sistemi bozulmasına sahip olmadım.

Bu makinelerin bazıları dergisiz dosya sistemlerinde bile çalışıyordu (genellikle ufs ve ext2). Bazıları gömülü ve birkaç tanesi Nokia N900 gibi cep telefonuydu - bu yüzden iyi bir güç kaynağı garanti edilmedi.

Dosya sistemi bozulması gerçekleşemez, sadece gerçekleşme olasılığı sizi endişelendirmeyecek kadar düşüktür. Yine de, bahislerinizi korumak için hiçbir neden yok.

Gerçek sorularınıza cevap olarak:

  1. En azından referans verdiğiniz ilk kitap daha önce yazılmıştı ext4- yazar kullanmayı önerdiğinde ext3, gerçekten 'gibi dengesiz veya dergisiz dosya sistemlerini kullanma' diyorlar ext2). Deneyin ext4, oldukça olgun ve dönmeyen diskler için flash cihazınızın ömrünü uzatabilecek bazı iyi seçeneklere sahip.
  2. Büyük olasılıkla dosyanın tamamını değil, son iki bloğu kaybedersiniz. Günlüklü bir dosya sisteminde bu tek kayıpla ilgili olacaktır. Dosyaya rasgele veri püskürtülebildiğim arıza senaryoları var, ancak gömülü cihazınızdan parçalanan bir mikrometeorit kadar muhtemel görünüyorlar.
  3. Bkz. 2. Hiçbir şey% 100,00 güvenli değildir.
  4. İkinci bir IDE kanalınız varsa, buraya ikinci bir CF kartı yapıştırın ve düzenli olarak dosya sisteminin bir yedeğini alın. Bunu yapmak için birkaç yol vardır: rsync, cp dump, dd, hatta kullanarak md(4)cihazı (yazılım RAID) (Eğer, bu senkronize izin bazen ikinci sürücüyü eklemek sonra çıkarmak - her iki cihaz her zaman canlı olup olmadığını, aynı riskiyle dosya sistemi bozulması). LVM kullanıyorsanız, anlık görüntüler bile alabilirsiniz. Bir veri toplama gömülü cihaz için, sadece ikinci dosya sistemini bağlayan am veri çözümü kullanır, veri günlüğüne kopyalar, hemen çıkarır. İyi bir önyükleme görüntüsüne sahip aygıttan endişe ediyorsanız, önyükleme yöneticisinin ikinci bir kopyasını ve ikinci aygıtta gerekli tüm önyükleme görüntülerini yapıştırın ve bilgisayarı her iki CF karttan önyükleme yapacak şekilde yapılandırın.

    Depolama aygıtları sabit dosya sistemlerinden daha sık başarısız olduğu için aynı aygıtta ikinci bir kopyaya güvenmem . Çok daha sık, şimdiye kadar yaşadığım deneyime göre (iş yerinde, Cuma öğleden sonra disk başarısızlıklarının inanılmaz derecede yüksek şansı hakkında acı bir yarım şaka vardı. Neredeyse bir süreliğine haftalık bir olaydı). Disk dönüyor ya da dönmüyorsa başarısız olabilir. Bu yüzden yumurtalarınızı iki sepette tutun ve verilerinizi daha iyi koruyabilirsiniz.

    Veriler özellikle hassassa, cihaza düzenli ziyaretler yaparım, yedek CF'yi yeni bir tane için değiştirir ve yeniden başlatır, fscktüm dosya sistemlerini iyi bir şekilde ölçmesini sağlar.


+1, ancak çoğaltma birincil kopyayla aynı sorunlardan muzdariptir - iki cihazı senkronize etmeye başlarsanız (RAID veya daha üst düzey yardımcı program olsun) ve güç söner (verilere sürekli ekleme yapılıyorsa), tekrar çöp al. Yardımcı olabilecek şey, zaman zaman aygıtlardan birini fiziksel olarak değiştiren ve kaldırılandan çevrimdışı bir yedekleme formu oluşturan RAID1'e sahip olmaktır. Tutarlı olduğundan emin olmak için FS'yi kaldırmadan önce dondurmanız gerekir (örn. Anlık görüntüler yapın). XFS, bunu destekleyen dosya sistemlerinden biridir.
peterph

Aslında. Yazdığım gibi, herhangi bir garanti yok. Verileri her yazışınızda bozulma olabilir. Electronics.stackexchange.com adresindeki insanlar, yerleşik sistemin gücün bildirildiğini ve yazma işlemlerini iptal etmek için yeterli suyu aldığı süper kapasitörler ve kahverengileştirme algılamasıyla oynuyorlar. Olabilir. :) Her şey potansiyel tehlikenin ne kadar olası olduğunu ve sorunu elinizde kaldırmak için ne kadar para / çaba harcamak istediğinizi (ve bir sonrakini düşünmeye başlayın) bir mesele.
Alexios

Bu cevap için teşekkürler. Bu benim için her şeyi önemli ölçüde açıklığa kavuşturuyor.
mathematician1975

4

Bana öyle geliyor ki, ani güç kaybı durumunda bir dosya sistemi uygulamasının başarabileceği sınırlıdır - sonuçta, aslında donanım ile arabirim oluşturuyor, bu yüzden donanıma veri / talimat gönderme zamanı ile donanım bir kontrolden kontrolden çıkar. Bu sorunu atlatabilecek bir dosya sistemi olsaydı, onu duyardınız.

Bu nedenle, kritik verileri korumak için bir strateji, çoğu zaman kesintisiz bir güç kaynağı kullanarak donanım düzeyinde alınan kararlardan en iyi şekilde faydalanacaktır . Muhtemelen bu sizin durumunuzda mümkün değildir.

Performansın gerçekten büyük bir mesele olmadığını söylediniz, bu yüzden akıllıca kullanın fsync().

Disk yazma işlemi sırasındaki güç kaybı, veriye düzenli olarak eklediğim veri bölümünü düzenli olarak bozuyor mu yoksa dosyanın tamamını bozabilir mi?

ExtN dosya sistemlerini kişisel olarak ve düşük-orta trafikli internet sunucularında yıllardır kullanıyorum ve Alexios gibi elektrik kesintisi nedeniyle çok fazla bozulma görmedim (adil olmasına rağmen, sunucular UPS ve hatırlayamıyorum bunlardan biri aslında bu şekilde aşağı iniyor). Çok daha ciddi bir sorun, farklı dosya sistemlerinin sorunla daha fazla ve daha az başa çıkabileceği donanım arızasından kaynaklanan bozulmadır, ancak (tekrar) bu temel olarak kontrollerinin ötesindedir ve bunu önleyemezler.

Zaman zaman dosyaları kaybettim veya sıfır boyutuna kesildi. Bunların bir şekilde kurtarılabilir olma şansının iyi olduğunu düşünüyorum; yedeklendikleri için bu benim için gerekli değildi. Çoğu zaman yanlış bir şey varsa bununla fsckbaşa çıkmak gibi görünüyor.

Güç kaybı noktasında yazılmayan veriler tamamen güvenli mi? Özellikle, initramfs.cpio dosyamın da bozulma riski var mı?

Bence, sadece bir elektrik kesintisinden kaynaklanan risk gerçekten düşüktür, flash depolama bozulma türü hariç, elektrik kesintilerine eşlik edebilecek elektrik dalgalanmasına maruz kalabilir - deneyimim yok, ama umarım düşündünüz. ve araştırdı.

Verileri korumak için uygulama kodumda kullanabileceğim herhangi bir yöntem var mı?

Fsync () ile ilgili noktayı tekrar etmeye değer . C ++ / iostream nesnelerinin bunun için bir yöntemi yoktur (:: flush ve :: sync fsync değildir), ancak tek ihtiyacınız olan bir dosya tanımlayıcıdır.


Bu cevap için teşekkür ederim de çok yararlıdır. Bu yazma yoluyla senkronize olmaya zorlar anlıyorum dosya üzerinden syncseçeneği ile yazılı bölümü monte /etc/fstabediyorum. Bu benim dosya yazma kodu döndüğünde, veri fiziksel olarak diske yazılmıştır anlamına geliyordu. Ben montaj ile syncaslında fsync(my_filedescriptor)bir yazma sonrası çağırmak için aynı şeyi anladım . Bunu anlamam doğru mu?
mathematician1975

@ mathematician1975 Öyle sanırım, bu araştırdığım bir şey değil. IMO, bir şekilde elverişsiz olmadığı sürece fsync(), uygun olduğunu düşündüğünüz noktalara atmak zaten zarar vermez ve sistemi daha sağlam hale getirir (örneğin, cihaz senkronizasyon seti olmadan rasgele monte edilirse, vb.).
goldilocks 26:13

1

ZFS kesinlikle tasarımla bozulmaya karşı korunan bir dosya sistemidir ve muhtemelen tek dosyadır. Ancak, uClinux tabanlı platformlar için ZFS uygulamalarının (sigorta tabanlı veya yerel) kullanılabilir olduğundan emin değilim.


0

Muazzam bir iş yapan en az bir ticari dosya sistemi var, dosya sisteminin elektrik kesintileri nedeniyle neredeyse bozulamayacağından ve kaybetme riskiniz olan tek verinin güç kesildiğinde eklenen veriler olduğundan emin olun.

Aşağı tarafı çok pahalı, yukarı tarafta büyük destek sunuyorlar. Masraf nedeniyle, bu gerçekten sadece yüksek bahisli ve / veya yüksek hacimli ürünler için bir seçenektir. Petrol ve gaz üretiminde "belirsiz" çalışma koşullarında (örneğin, sık sık elektrik kesintileri, vb.) Sistem bütünlüğünü sağlaması gereken kritik gömülü ekipman gibi.

DataLight'a (şirket) ve / veya " Reliance NITRO " ürününe göz atın . (Reliance, Reliance NITRO'nun yerini alan eski ve güvenli ancak çok etkili olmayan bir çözümdür ). Bu sistemi kullanmak için paranız olmasa bile, sistemlerinin nasıl çalıştığını, neden ext3 ve ext4'ten daha güvenilir olduğunu tartışan bazı iyi makaleleri var.

Bu bir reklam gibi okunuyorsa özür dilerim, sadece seçenekleri belirtmek istedim.


Merhaba ve siteye hoş geldiniz. Ürünleri önerecekseniz, lütfen i) söz konusu ürüne bir link veriniz; ii) neden alternatiflerden daha iyi olduğunu açıklayın (sadece muazzam bir iş yaptığını iddia edersiniz, ancak neden başka bir şeyden daha iyi olduğunu açıklamayın); iii) bunu yapan şirket ile ilişkiliyseniz, bunu açıkça belirtmeniz veya spam yapmakla suçlanmanız gerekir (sadece bir başkan olduğunuzu söylememek).
terdon
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.