Ben #btrfs IRC sorusunu sordum, onlar değil dedi - should be ok if your hw isn't "buggy"
"buggy" anlamına gelir your hw has correct flush/barrier semantics
.
TL; DR: Bu, btrfs'nin güç kaybı nedeniyle ZFS'ye benzer şekilde veri bozulmasına karşı korunduğu anlamına gelir.
İşte nedeni: ZFS ve btrfs'nin ardındaki genel fikir benzer. Her ikisi de veri yapısı olarak Merkle ağaçlarını kullanır . Yazmaların güncellenmesi için disklerde birden çok blok gerekebilir. Dosya sistemi, yeni verileri boş bloklara yazarak (mevcut bir dosya değiştirilse bile, bu nedenle eski durumu yansıtan blokları değiştirmeye gerek yoktur) ve yeni bir güncellenmiş ağaç oluşturarak bunu ele alır. Tüm ağır kaldırma işlemi tamamlandıktan ve veri + güncellenmiş ağaç diske yazıldıktan sonra, baş işaretçisi değişikliği görünür hale getirmek için yeni ağaca güncellenir.
Bir dosyaya yazarken işlerin nasıl davranması gerektiği aşağıda açıklanmıştır:
- Diskteki boş bloklara veri yazın.
- Merkle ağacının * bir kopyasını oluşturun, (1) 'de yazılı değişikliklere göre güncelleyin.
- Donanımdan verileri diske temizlemesini isteyin - donanım bekleyen tüm verileri yazar.
- Kafa işaretçisini yeni Merkle ağacına güncelleyin.
- Artık gerekli olmayan ücretsiz eski bloklar.
(4) 'ten sonra güç kesilirse işlem tamamlanır. (1) ila (3) arasındaki adımlarda güç kesilirse, dosya sistemi eski duruma gelir (adım (1) 'de yazılan veriler kaybolur ancak dosya sistemi tutarlıdır). Dosya sistemi hatalarını kontrol etmeye gerek olmadığını unutmayın, bu da dosya sisteminin hemen kullanılabilir olduğu anlamına gelir, bu da büyük bir avantajdır (büyük dosya sistemlerinin kontrol edilmesi çok uzun sürebilir!).
İşte "buggy" donanımı ile işlerin nasıl yanlış gidebileceğine bir örnek:
- Diskteki boş bloklara veri yazın.
- Merkle ağacının * bir kopyasını oluşturun, (1) 'de yazılı değişikliklere göre güncelleyin.
- Donanımdan verileri diske temizlemesini isteyin - donanım tamamlandığını doğrular, ancak tamamen temizlenmez (örn. Veriler diskin geri yazma önbelleğinde kalabilir).
- Kafa işaretçisini yeni Merkle ağacına güncelleyin. Bu veriler, beklemedeki diğer verilerden önce diske yazılır (örneğin, disk kafası doğru konumda olduğundan).
- Adım (1) ve (2) 'de yazılan veriler diske yazılır.
- Artık gerekli olmayan ücretsiz eski bloklar.
(4) ve (5) arasında güç kesilirse veya adım (5) gerçekleştirilirken dosya sistemi tutarsız hale gelir. Sonuç olarak, Merkle ağacı ve / veya veriler sadece kısmen yazılabilir ve dosya sisteminin tutarsız olmasına neden olabilir.
Uygulamada, RAID denetleyicilerini kullanırken özellikle dikkatli olmalısınız . Genellikle diskteki geri yazma önbelleklerini devre dışı bırakırlar ve bunun yerine kendi geri yazma önbelleklerini kullanırlar. Burada yanlış gitmenin iki yaygın yolu vardır:
* Burada işleri basitleştiriyorum. Aslında tüm ağacı kopyalamak gerekli değildir. Yalnızca değişen parçaların eklenmesi gerekir - kalan parçalar eski ve yeni ağaç arasında paylaşılabilir .
zpool clear -F
komutu