1. Flash tabanlı depolama
Disk tipine (geleneksel sabit diskler ve katı hal diskleri) veya bilmediğim başka bir değişkene bağlı mı? Sadece (Linux'ta) oluyor mu, yoksa diğer işletim sistemlerinde mevcut mu?
Bir seçeneğiniz olduğunda, flaş tabanlı depolamanın temiz bir kapanma olmadan güç kaybetmesine izin vermemelisiniz.
SD kartlar gibi düşük maliyetli depolamada, tüm silme bloklarını (4KB'den birkaç kez daha büyük) kaybetmeyi, farklı dosyalara veya dosya sisteminin temel yapılarına ait olabilecek verileri kaybetmeyi bekleyebilirsiniz.
Bazı pahalı SSD'ler, elektrik kesintisi karşısında daha iyi garantiler sunabileceğini iddia edebilir. Bununla birlikte, üçüncü taraf testleri, birçok pahalı SSD'nin bunu yapamadığını göstermektedir. "Aşınma dengelemesi" için blokları tekrarlayan katman karmaşık ve tescillidir. Olası arızalar sürücüdeki tüm verilerin kaybolmasını içerir.
Test çerçevemizi uygulayarak, toplamda üç binden fazla hata enjeksiyon çevrimi kullanarak altı farklı üreticiden 17 emtia SSD'sini test ediyoruz. Deneysel sonuçlarımız, test edilen 17 SSD cihazının 14'ünün, elektrik kesintileri, bit bozulması, çakıl yazma, seri hale getirilmeyen yazma, meta veri bozulması ve toplam aygıt hatası dahil olmak üzere şaşırtıcı hata davranışları gösterdiğini ortaya koyuyor.
2017: https://dl.acm.org/citation.cfm?id=2992782&preflayout=flat
2013: https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf?wptouch_preview_theme=enabled
2. Dönen sabit disk sürücüleri
Dönen HDD'ler farklı özelliklere sahiptir. Güvenlik ve basitlik için, flash tabanlı depolama ile aynı pratik belirsizliğe sahip olduklarını varsaymanızı öneririm.
Açıkça bilmediğin özel kanıtların yoksa. Dönen HDD'ler için karşılaştırmalı rakamlara sahip değilim.
Bir HDD, tamamlanmamış yazılı bir sektörü kötü bir sağlama toplamı ile bırakabilir ve bu da daha sonra bize güzel bir okuma hatası verir. Genel olarak konuşursak, bu HDD'lerin başarısızlık modu tamamen bekleniyor; yerli Linux dosya sistemleri akılda tutularak tasarlanmıştır. fsync()
Bu tür bir elektrik kesintisi arızası karşısında sözleşmesini korumayı amaçlar . (Bunu SSD'lerde garantili görmek isteriz).
Bununla birlikte, Linux dosya sistemlerinin bunu her durumda başardığından veya bunun mümkün olup olmadığından emin değilim.
Bu tür bir arızadan sonraki bir sonraki önyükleme bir dosya sistemi onarımı gerektirebilir. Bu Linux'tur, dosya sistemi onarımının anlamadığınız bazı soruları sorması mümkündür, burada sadece Y'ye basabilirsiniz ve bunun çözüleceğini umarsınız.
2.1 Eğer fsync () sözleşmesinin ne olduğunu bilmiyorsanız
Fsync () sözleşmesi hem iyi haberlerin hem de kötü haberlerin bir kaynağıdır. Önce iyi haberi anlamalısınız.
İyi haber: fsync()
örneğin "kaydet" e bastığınızda dosya verilerini yazmanın doğru yolu olarak belgelenmiştir. Ve örneğin metin editörlerinin atomik olarak mevcut dosyaları değiştirmeleri gerektiği yaygın olarak anlaşılmaktadır rename()
. Bu, her zaman eski dosyayı sakladığınızdan veya yeni dosyayı ( fsync()
yeniden adlandırmadan önce basılan) aldığınızdan emin olmak içindir . Yeni dosyanın yarı yazılı sürümüyle bırakılmak istemezsiniz.
Kötü haber: Uzun yıllar boyunca, en popüler Linux dosya sistemine fsync () yöntemini çağırmak tüm sistemi etkin bir şekilde onlarca saniye bekletebilir. Uygulamalar bu konuda hiçbir şey yapamadığından, bu dosya sisteminde nispeten güvenilir görünen fsync () olmadan rename () yöntemini iyimser kullanmak çok yaygındı.
Bu nedenle, fsync () işlevini doğru kullanmayan uygulamalar var.
Bu dosya sisteminin bir sonraki sürümü genellikle fsync () 'nin askıya alınmasından kaçınır - aynı zamanda fsync ()' nin doğru kullanımına dayanarak başlar.
Bunların hepsi oldukça kötü. Bu tarihi anlamak, muhtemelen çelişkili çekirdek geliştiricilerin çoğu tarafından kullanılan küçümseyen ton ve inatçı tarafından desteklenmiyor.
Mevcut çözünürlük şu anda en popüler Linux dosya sisteminin fsync () işlevini gerektirmeden rename () desenini desteklemeye varsayılanlarönceki sürümle birlikte "bug-to-bug uyumluluğu" uygular. Bu, mount seçeneğiyle devre dışı bırakılabilir noauto_da_alloc
.
Bu tam bir koruma değil. Temel olarak, bekleyen IO'yu rename () zamanında temizler, ancak yeniden adlandırmadan önce IO'nun tamamlanmasını beklemez. Bu, örneğin 60 saniyelik bir tehlike penceresinden çok daha iyidir! Ayrıca mevcut bir dosyayı rename () ile değiştirirken kilitlenme emniyeti için hangi dosya sistemlerinin fsync () istediğine verilen cevaba bakınız.
Bazı daha az popüler dosya sistemleri koruma sağlamaz. XFS bunu yapmayı reddediyor . Ve UBIFS de uygulamamıştır, görünüşe göre kabul edilebilir, ancak bunu mümkün kılmak için çok fazla çalışmaya ihtiyaç duyar. Aynı sayfa, UBIFS'in güç kaybı dahil olmak üzere veri bütünlüğü için başka birkaç "TODO" sorunu olduğunu da göstermektedir. UBIFS, doğrudan flash depolamada kullanılan bir dosya sistemidir. UBIFS'in flash depolamanın bahsettiği bazı sorunların SSD hatalarıyla ilgili olabileceğini hayal ediyorum.