flash bellekteki bir dosyayı güncellemek ve elektrik kesintisi ihtimali

turkuazaga

Üye
Katılım
23 Aralık 2018
Mesajlar
58
Bir NAND flash bellekte, sistemin yapılandırma bilgilerini içeren bir text dosyası var. Yapılandırma değiştiğinde bu text dosyayı da güncellememiz gerekiyor. Ama şöyle birşey aklıma takılıyor. Tam bu text dosyaya veri yazıyorken elektrikler kesilirse ne olur? Aklıma gelen ihtimaller, flash'daki dosyalama sisteminin bozulması (şu anda JFFS kullanılıyor). Veya dosyanın yarım bilgiler içerecek şekilde kalması. Bu şekilde flash belleklere yazma yapılırken elektrik kesilmesi ihtimaline karşı ne tür tedbirler almak lazım?
 
Öncelikle o JFFS filesystem'i hemen kaldır ve onun yerine UBIFS'i devreye al. UBIFS'te, yazma sırasında elektrik kesilmesi durumunda filesystem'in zarar görme ihtimali çok daha düşüktür. UBIFS'in tasarımındaki en önemli kriterlerden birisi bu idi ve yıllar boyu ortaya çıkan sorunlar da giderilmiştir.

Filesystem'i hallettikten sonra, gelelim config dosyasının güncellenmesine. Burada izlenmesi gereken prosedüre şu:
  1. Yeni bir dosya oluşturuyorsun ve bu dosyaya yeni config verilerini yazıyorsun
  2. Yazma işlemi bittikten sonra dosyayı kapatıyorsun.
  3. Yeni dosya ismini, asıl config dosyasının ismini alacak şekilde değiştiriyorsun. Bu aşamada, asıl config dosyası silinmiş oluyor ve yeni dosya, onun yerini alıyor.
İşletim sistemi (yani linux kernel), isim değiştirme işleminin tek adımda bitirileceğini garanti eder. Bu tip tek adımda biten, herhangi bir ara aşamada takılı kalması mümkün olmayan işlemlere "atomic operation" deniyor. O yüzden, bu prosedürü kullanırsan, elektrik kesilmesinin tam olarak nerede meydana geldiğine bağlı olarak, asıl config dosyası ya hiç değişmeden eski haliyle kalır, yada gene doğru bilgileri içeren güncellenmiş duruma gelir. Ama kesinlikle arada bir yerde, verilerin bir kısmı yazılmış bir kısmı yazılamamış durumda kalmaz.
 
Son düzenleme:
UBIFS desteği ekledim kernel'a, image'a da mtd-utils-ubifs ekledim ve yukarıdaki metodu denedim. Bazan yapılandırma dosyasının içini boş olarak buluyorum. Yani yukarıdaki işlem basamaklarını tamamlıyorum sonra da power off on yapıyorum ve yapılandırma dosyasına baktığımda 0 uzunlukta bir dosya olduğunu görüyorum. JFFS'de bu sorun olmuyordu.
 
Performans nedeniyle UBIFS sistem hafızasını "cache" olarak kullanır. O yüzden yazma işlemi sonunda herşeyin diske gitmesini sağlaman lazım. Bunun için de hemen yazma işlemi sonunda fsync fonksiyonunu çağırabilirsin.
 

Forum istatistikleri

Konular
7,726
Mesajlar
128,623
Üyeler
3,119
Son üye
İsmail16

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top