Güç her zaman kesilebildiğinde SD kartları güvenle kullanın


10

İşletim sistemi ve uygulamalar için küçük bir dahili NAND cihazı (250-500Meg) ve veri için 8Gb SDHC SD kartlı bir SD kart ile küçük bir gömülü Linux sistemi (2.6.35-ish) üzerinde çalışıyoruz.

Ünitenin gücü her zaman kesilebilir.

Sistem verileri SD kartlara kaydetmelidir. Bu veriler oldukça önemli ... sistemin tüm amacı bu. Sistemler genellikle uzak konumlardaki herhangi bir ağdan tamamen ayrılır ve veriler her 4-8 haftada bir sneakernet üzerinden alınır.

Şu anda, SD kartlarda VFAT var. Bu temelde ilk test istemcilerinin verileri kolayca Win7 dizüstü bilgisayarlarına manuel olarak kopyalayabilmeleriydi.

Ancak, yanlış zamanda bir elektrik kesintisinin veri kaybına neden olmasının sadece zaman meselesi olduğundan endişeliyim.

Veri kaybını önlemek için böyle bir sistemi yapılandırmanın en iyi yolu nedir? JFFS2 nasıl veri yazma açısından istediğim gibi geliyor (ve performans ihtiyaçları hiç yüksek değil), ancak block2mtd, vb kullanmak için oldukça kludgy gibi geliyor. Bununla birlikte.

Bunu yapmanın en iyi yolu nedir?

DÜZENLE

Şimdi dosya sistemi VFAT bırakarak ve büyük ölçüde güç döngüsü arızalarına maruz kalma sınırlaması gerekir 0xFF dolu bir seferde günlük boyutlu dosyaları tahsis düşünüyorum. O zaman sadece bu işlenmiş blokların içine kayıtlar ekleyebilirim ve umarım SD kartlar 0xFF bölgelerine yazma / aşınma seviyesi yazmalarını o kadar aptal değildir.

Noatime kullanabilirim, ancak değiştirilen zaman alanına yazmayı önlemek için bir VFAT nomtime eşdeğeri var mı? Yeni bir günlük dosyası oluşturulana kadar meta veri güncellemelerini önlemek için bir yol bulmam gerekir.

DÜZENLEME 2

Elektronik yığını değişimindeki biri bana NAND'de ECC verileri olduğunu hatırlattı, bu nedenle silme ihtiyacını önlemenin bir yolu yok.

Peki, block2mtd üzerinden JFFS2 bu durumda uygun olur mu?

DÜZENLEME 3

Düşündüğümden daha kötü. SD kartlar, aynı içeriği diske yazsanız bile veri bloklarını silecektir. Silme blokları 64KB'dir ve yazmaları tamamen geciktirmek için çok büyüktür. NAND flash'da (yazma davranışını kontrol edebileceğim) bir tür günlükte 128KB'a kadar veri depolayacağım ve daha sonra SD karttaki bir VFAT bölümünde 128KB hizalanmış bir dosyaya 128KB blok yazacağım ( diğer SD kartlarda 128KB eraseblocks varsa).


1
"Umarım SD kartlar o kadar aptal değildir ..." <--- ROFLOL. Muhtemelen değil!
derobert

Sahip olduğunuz soruna tam bir çözüm bulana kadar sync, SD karta her yazma işleminden sonra komutu kullanın, bitleri değiştirdikten / oluşturduktan sonra bunları RAM'de saklamaksızın derhal yazar, böylece değişiklikleriniz en azından kartta olur ve güç kaybına uğramazdı.
Hanan N.

syncmeta verilerin güncelleme ortasında olduğu süreyi artırdığından, büyük olasılıkla işleri daha da kötüleştirecektir.
Ben Voigt

Yanıtlar:


5

Peki, bunu düzeltmek için yolu "güç her zaman kesilebilir" sorunu düzeltmektir. Bir dakika pil gücü bile eklemek imkansız mı?

Alternatif olarak, belki iki SD kart kullanabilirsiniz. Verileri bir karta yazın, senkronize edin, diğerine yazın. Verilerinizin her bloğunun bir sağlama toplamı ve blok numarası gerekir, ancak daha sonra bazı şanssız elektrik arızalarında bile, kartlardan biri doğru olmalıdır.

Temel probleminiz, AFAIK'ın kart satıcısına bağlı olduğu SD kartlarda aşınma dengelemesi olacaktır (ve hatta toplu olarak, istedikleri zaman değiştirebilirler). Muhtemelen elektrik kesintisini doğru bir şekilde yapmıyor. Ve ne yaptığına bağlı olarak, bu sadece yazdığınız bloğu bozmak anlamına gelmeyebilir.

  1. Önemsiz derecede küçük bir kart olduğunu kabul edin — 3 (flash) blok. Blok 1, 2 veya 3'ten daha fazla yazma aldı. Fiziksel blokları sayı ile, mantıksal blokları A, B, C harf ile arayacağım. Şu anda A = 1, B = 2, C = 3.
  2. A'yı engellemek için bir yazı yayınlıyorsunuz SD kart aha gibi! Burada aşınma seviyelendirmeye ihtiyacımız var, aksi takdirde blok 1 2 ve 3'ten önce yıpranacaktır. Blok 1 ve 2'yi değiştirmeye karar verir.
  3. Blok 1'i RAM i konumuna (sistem kartında değil, SD kartta) okur. Değiştirmek istediğiniz kısmı günceller.
  4. Blok 2'yi RAM pozisyonuna okur ii
  5. Blok 1'i siler
  6. RAM konumunu ii blok 1'e yazar.
  7. Eşleme tablosunu B = 1 olacak şekilde günceller
  8. Blok 2'yi siler.
  9. RAM konumunu i blok 2'ye yazar.
  10. Eşleme tablosunu A = 2 olacak şekilde günceller

Tabii ki, "eşleme tablosunu günceller" her zaman önemsiz değildir. Ve 5-10 sırası farklı olabilir (eğer hepsi tamamlanırsa, önemli değil, elbette yazmadan önce silmelerin gelmesi gerekir). Ancak bir elektrik kesintisi olur, sadece A bozuk (beklediğiniz gibi) değil, aynı zamanda B de olabilir. Veya, bir eşleme güncellemesi sırasında elektrik kesintisi olursa, ne tür bir bozulmaya neden olacağını kim bilebilir?


1
Bu üniteler yıllarca nispeten zorlu ortamlarda yaşamalıdır ve kurulduklarında pilleri nitelemek zorunda kalmayacağımız çeşitli ülkelere gönderilirler. Bir pil kullanmadan önce muhtemelen MMC / SD'yi düşürüp kendi NAND-flash çözümümüzü oluşturacağız.
darron

Peki, bizim durumumuzda "düzeltmek 'güç her zaman kesilebilir'" çözüm kaynar "kamyon sürücülerinin direksiyon başında uykuya dalmasını ve cihazlarımıza sürüş durdurmak için". "Bir kamyonun içine düştü" aslında en yaygın arıza modu ile ilgilidir.
SF.

1
Bir dakika pil gücü gerekmez. Bir SD kartı güvenli bir şekilde çıkarmak için gereken güç miktarı, bir kapasitörün depolayabileceği aralık dahilinde olmalıdır.
Ben Voigt

4

Electronics.stackexchange.com'da benzer bir şey tartışıldı: SD kartı beklenmedik elektrik kesintilerine karşı nasıl koruyabilirim?

Çalışan A yanlara cevabı tandem (orada yazılım çözümleri ile donanım bakmak için bu konuda ESE bir soru çok oldu, ama şimdi bulamıyorum; bu kesinlikle SD kartlar ilgili değildi, sadece cihazların güç kaybediyor hakkında ve bunun nasıl tespit edileceği ve nasıl hareket edileceği).

Kısa öykü: pil gücünüz olmayabilir, ancak güç kaynağınızda kaynağı düzeltmek için oldukça büyük kapasitörler vardır. Temel olarak, güç sadece dışarı çıkmaz. Gerilim azalır. Voltaj belirli bir noktanın altına düştüğünde, gömülü sisteminizde RESET sinyalini veren muhtemelen kahverengi bir koruma IC / devresi vardır. PC anakartlarında da bunlar var ve PSU'dan gelen 'POWEROK' sinyaline yanıt veriyorlar. Bunun anlamı, güç kesildiğinde, voltaj güvenli seviyelerin altına düşmeden önce bilgisayarın birkaç milisaniyede zorla durdurulmasıdır. Bu süre boyunca, SD kartlar gibi çevre birimleri hala açıktır, ancak bilgisayardan başka işlem yapılmaz.

Bir SD kartın, gücü kesilmeden önce aşınma dengelemesi de dahil olmak üzere bekleyen işlemleri tamamlamak için yeterli zamana sahip olması muhtemeldir . Güç kaynağınızı yeterince büyük bir kapasitörle geliştirmek veya SD kartın yakınında kullanmak, bunun sağlanmasına yardımcı olabilir, ancak platformunuzu her zaman olduğu gibi deneyebilirsiniz. Gücü yeterli süre tutması muhtemeldir.

Sorunun donanım yönü bir sorun değilse, yalnızca yazılım olanlarını çözebilirsiniz. derobert'in yedeklilik için iki kart kullanma fikri kötü değildir ve VFAT gibi standart bir dosya sistemi kullanmak, kartın aşınma seviyeleme algoritmalarını karıştırmak gibi bir risk taşımamaktadır.

Her neyse, bu kadar fazla sorunun olmayacağı iyi olabilir. Kartınızdaki bir bloğun 100 yazmadan kurtulacağını varsayalım (muhafazakar - ancak kaliteli kartlar almaya çalışın!) Ve 8GB kartlar kullanarak, ilk blok öldüğünde (tabii ki istatistiksel olarak) 800GB yazmış olacaksınız.


Soru başladı çünkü zaten kapanma olaylarında büyük SD kart bozulması alıyordum. Aslında oldukça sık. Belki 20 elektrik kesintisi olayından 1'i felaketti ve muhtemelen 4'te 1'i en az BAZI hasar verdi. Sonunda dahili NAND flaşında bir günlük veri depolamaya ve gece yarısı SD'ye kopyalamaya (1 saniye kadar bir işlem) geçtim. Gelecekte işleri iyileştirmek istiyorum. Ray üzerinde zaten 400 uF değerinde kapak var ... yeterli değil, görünüşe göre ... belki de kaşıntı düzgün bir şekilde ele alınmıyor.
darron

Bu oldukça yüksek bir insidans oranı! Osiloskop problarını alma ve bunu hareket halinde görme zamanı, methinks. Muhtemelen yazılımda çalışabilmenize rağmen, güç tüketimi açısından en iyi yol donanım aksaklıklarınızın olmamasını sağlamaktır. Belki de bahislerinizi koruyabilir ve electronics.stackexchange.com'a da sorabilirsiniz ?
Alexios

@darron, SD kart depolama sorununuz için hangi çözümü buldunuz? Hala NANDFlash'a yazıyor ve günde bir kez kopyalıyor musunuz? Ana RFS (ayrı NANDFlash yok) olarak SD kartlı bir tasarıma sahibim ve ani elektrik kesintisi durumları olsun ya da olmasın veri bozulması sorunları görüyorum.
fred basset

4

SD ile ilgili bir sorun yaşadık, ext2 kök dosya sistemi beklenmedik güçte bozulduğunda başarısız oluyor. Her şeyden önce, sistemi salt okunur bir root mount ile çalıştırıyoruz. Yazılabilir bir depolamaya ihtiyacımız olduğu için (ancak veri kaydı değildi), yazılabilir olarak ikinci bir bölüm oluşturduk. Beklenmedik güç arızasında FS hasarını en aza indirmek için, karta en az iki kez fiziksel yazma işlemine neden olsa da, bunu bir ext3 bölümü haline getirdik. Bu kombinasyon (ama bizim ikinci bölüm yazma bir veri kaydedici ile karşılaştırıldığında nadir olduğunu itiraf) sorunsuz çalışıyor gibi görünüyor. Şimdiye kadar. (Profesyonel tesislerde yaklaşık 30 ay boyunca kurulan sistemler)


3

Elektrik kesintisi ve genel veri güvenliği olasılığı olan bir ortamda Veri Güvenliği için daha da fazla noktayı düşünmelisiniz.

Depolama için NO MLC hücresi KULLANMAYIN, sadece SLC'nin yeterli veri tutma süresi vardır. O zaman bu SLC kartlar akıllı bellenime sahip olabilir, bazıları hiçbir durumda güç kaybıyla bozulamaz. Elektrik kesintisini ölçerek tanır ve son bloğun tamamen yazıldığından emin olurlar.

Bu kartlar MLC hücrelerine göre daha pahalı ve biraz daha yavaş. Kartlar için swissbit gibi satıcılara bakın.

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.