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.
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,653
Mesajlar
97,271
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top