Btrfs bodur nasıl çalışır ve ne işe yarar?


19

Btrfs bodur tam olarak ne yapar? Tamamen belirsiz olan manuel sayfaya göre, bazı hata kontrolü yapıyor. Ne tür bir hata kontrolü? Ne kadar güvenilir? Bazı hataları kurtarabilir mi? O nasıl çalışır? Her btrfs diskinde çalışır mı?


3
Bağlam: BTRFS sağlama toplamlarını depolar, böylece her zaman bir dosyanın (veya meta verilerin) iyi olup olmadığını veya bozuk olup olmadığını söyleyebilir. Ext4 gibi diğer tüm dosya sistemlerinde sağlama toplamı yoktur, bu nedenle bozuk bir sürücü tarafından bozulmuş olan (ölmek üzere olan ve zaten verileri bozmaya başlamış) bir dosyayı okumanızı engellemezler. Bu, BTRFS'deki önemli bir veri koruma özelliğidir ve fırçalamayı mümkün kılar.
basic6

Yanıtlar:


23

Başka bir şey yapıp yapmadığını bilmiyorum, ama en azından btrfs scrubtam disk veri ovma yaptığını biliyorum . Temel olarak, diskteki tüm verileri * okur, sağlama toplamını yeniden hesaplar ve yeniden hesaplanan sağlama toplamını depolananla karşılaştırır. Depolanan ve yeniden hesaplanan sağlama toplamları eşleşmediğinde, sistem bozulma olduğunu bilir.

Bir kez bozulma algılandığında, davranış disk kurulumunuza bağlıdır. Örneğin, RAID 1 (yansıtma) varsa, btrfs scrubbozuk bir sürümü başka bir diskten kopyalayarak bozuk verileri düzeltebilir. Bazı verilerin tüm kopyaları bozulursa (örn., Çoklu disk hasarı veya ilk etapta yedek kopyaların olmaması), btrfs scrubsizi uyarmanın yanında yapabileceğiniz çok şey yoktur.

Bunun önemli olmasının nedeni, sabit sürücülerin bit okuma ve yazma işlemlerinde yalnızca% 99.999999999999 güvenilir olmasıdır. Bu nedenle, her birkaç terabaytlık veri G / Ç'sinde bir hata olması muhtemeldir. Her ne kadar normal disk erişimi sırasında hatalar tespit edilse ve algılanabilse (ve düzeltilse de, gereksiz bir kopyanın hala geçerli olduğu varsayılarak), rutin tam disk fırçalama, aynı verilerin tüm kopyalarının bozulduğunu birikmeden önce hataları bulabilir ve düzeltebilir.

* Meta verileri eklemek için "dosya" yerine "veri" kullanıyorum. Btrfs, dosyaları ve karşılık gelen meta verileri (sağlama toplamları dahil) veri bloklarında saklar ve bunların tümü kontrol toplamı ile kontrol edilir btrfs scrub.

Ayrıca bakınız:


Saymadım, ancak güvenilirlik rakamınızın birkaç büyüklükte olduğunu tahmin etmeye hazırım. Tüketici HDD'leri genellikle 10 ^ -14 bitlik bir UBE oranına göre belirlenir. Başka bir deyişle, her 10 ^ 14 bitlik okuma için bir kurtarılamaz okuma hatası. Sorun şu ki, bu tam bir sektör için; ya tam sektörü alırsınız ya da hiçbir şey elde etmezsiniz (ya da fikir budur; sessiz hatalar tamamen başka bir fincan çaydır). Bu nedenle hata, Gelişmiş Biçim sürücülerle 32.768 bit olan sektör boyutu tarafından güçlendirilir. Bu nedenle, gerçek hata oranı 10 ^ -10 ila 10 ^ -11 okuma biti hataları gibidir.
CVn

@ MichaelKjörling Sektörlerin burada önemli olduğunu düşünmüyorum .... Bilgisayarımın iki dahili 1 TB sabit sürücüsünün son 29 btrfs scrubs kayıtları var. Veri miktarı 270 ile 300 GiB arasında değişti (toplam fırçalama için toplam 1,35 * 10 ^ 14 ila 1,49 * 10 ^ 14 bit için). Bu fırçalama sırasında 3 hata bulundu. Ovalamayan G / Ç'nin ne bit ne de sabit bit çürümesine neden olduğunu varsayarsak, bu beklenen hata oranının "% 99.999999999999% güvenilir" oranının sadece 2 ila 2¼ katıdır. Sadece 4096 bit sektörlerde bile, argümanınızın şimdiye kadar sürücülerimin binlerce hata olmasını beklediğini düşünüyorum.
Mark Haferkamp

@ MichaelKjörling Üreticinin teknik özellik sayfalarını (Seagate ve WD) anladığım kadarıyla, bit hataları değil, tüm sektörler değil. Ve cevaptaki dokuzların sayısı bile iyimser: 100-1/10^1416 dokuz ve yazıların sadece 14'ü var (10 ^ 12'ye karşılık geliyor).
Luc

@Luc Sektör ölümünün daha az yaygın olması iyidir; ölmekte olan sektörler, diskin (belki) gerçekten başarısız olduğu ve değiştirilmesi gerekebileceği anlamına gelir. Bit hataları sadece sessiz veri bozulmasına yol açar, bu da yedeklemelerden geri yüklenecek kadar gürültülü hale getirilebilir. Matematik notu: Gerçek hesaplama, 1-10^ninsanlar önde gelen ondalık sayıları sevmediği için yüzde olarak dönüştürülür. Ayrıca, önceki yorumumda sürücülerin RAID 1'de (dolayısıyla her birinde aynı 270-300 GiB verisi olduğu) bahsetmeyi ihmal ettim, bu da başka bir belirgin hesaplama hatasını düzeltir.
Mark Haferkamp

5

Mark Haferkamp'ın mükemmel cevabına genişleyerek, tüm dosyalar yerine btrfs scrubtüm verileri okumak kritik bir özelliktir ve aslında onu bu kadar kullanışlı kılan şeydir. Unutmayın, btrfs yerleşik RAID desteğine sahiptir. RAID1 kullanacak şekilde yapılandırdığınız iki sürücüyü kapsayan bir btrfs dosya sisteminiz olduğunu varsayalım. Bu durumda, bir dosyaya yazdığınızda, bu yazma her iki diske de çoğaltılır. (Daha karmaşık bir örnekle daha karmaşık hale gelir, ancak bu basit durum için her zaman böyle olur.) Ancak bu dosyadan okuduğunuzda, okuma yalnızca bir diske çarpar (çünkü dosyayı iki kez okumak bir israftır) ilk kopya bir nedenle kullanılamazsa).

Şimdi ikinci btrfs sürücünüzün bozulduğunu ve dosya sisteminizdeki verileri bozmaya başladığını varsayalım. Bu diskten blokları okuduğunuzda, btrfs sağlama toplamının eşleşmediğini fark eder ve bant içi blok bilinen iyi bir kopyadan (ilk sürücüdeki kopya) geri yüklenir. Verileri, read()hiçbir şey olmamış gibi uygulama çağrısına (veya her neyse) döndürür .

Peki ya btrfs ikinci diskten okumaya karar vermezse? Unutmayın, iki kopya vardır, böylece birinci veya ikinci diskten okuyabilir . İlk diskten okursa, yanlış bir şey fark etmez. Bir şeyin yanlış olduğunu farkedeceği tek zaman, ilk diskin de bozulduğu zamandır. Şimdi verileri kurtarmak için çok geç kaldınız - ikinci diskin kopyası bir süreliğine bozuldu ve ilk kopya (ikinci diski geri yüklemek için kullanacağınız şey) artık bozuk!

Burası devreye btrfs scrubgiriyor. Tüm dosyaları değil, tüm verileri okuyor . Bu, meta verileri içerir, ancak normalde okuma yolunda olmayacak dosyaların ikincil kopyalarını da içerir. Bu ikincil kopyaları okuduğunda, btrfs'nin bant içi hata düzeltmesi için tek bir kopyadan veri alma ve geri yükleme için bir fırsat yaratır.


2
RAID1'de okumanın sadece 1 diskten yapıldığından emin misiniz? En azından mdadm RAID ile durum böyle olmamalı. Okuma her iki diskten paralel olmalı, ancak farklı verilerden oluşmalıdır, yani bir diskten okumaktan iki kat daha hızlı olmalıdır. Okuma performansı artışı RAID 1'in en önemli özelliklerinden biridir
Petr

@Petr evet, haklısın. tek tek bloklar sadece bir diskten okunur.
17'de strugee

@Petr: Ayrıntılı olarak - normal kullanım altında ne MDADM ne de BTRFS aynı verilerin her iki kopyasını her iki diskten de okumaz. Sadece bir kopyasını okurlar. - MDADM, okuma hızını iki katına çıkarmak için okuma yükünü dengeleyebilir ve kopyalar arasında dağıtabilir. (çünkü tüm A kopyaları disk 1'e ve tüm B kopyaları disk 2'ye gider. Çünkü mdadm tam olarak 2 disk kullanacaktır). - BTRFS'nin daha fazla zorluğu var. (çünkü A ve B kopyası şu anda en fazla boş alana sahip olan 2 diskten (2 veya daha fazla diskten) oluşacaktır - yani: 2 kopya mevcut tüm diskler arasında rasgele yayılacaktır)
DrYak

ve güvenlikle ilgili olarak: - hem MDADM hem de BTRFS, sorun olması durumunda diğer kopyayı deneyecektir. - MDADM için algılayabildiği tek sorun "disk yanıt vermiyor" (yukarıda depolanan dosyalar hakkında gerçek bir fikri olmadığı için) - BTRFS için ayrıca sessiz veri bozulmasını da algılayabilir (çünkü veriler kontrol toplamı yapılır, vb. BTRFS'nin RAID katmanı, bir kopyanın güvenilir olup olmadığını veya başka bir kopya getirmesi gerekip gerekmediğini bilir)
DrYak

son fakat en az değil RAID5 / 6 ile ilgili: - MDADM sadece çalışır . (Ancak sessiz bozulmaları tespit etmeyecek) - Şimdilik BTRFS'de sessiz bozulma işlenmiyor (çünkü şeridin hangi üyesinin bozuk olduğunu tahmin etmek için Silme Kodlaması hesaplamasını yapmak yerine yalnızca başka bir kopyayı (RAID1'de) almak daha kolay. kalan verilerden / pariteden yeniden oluşturulmalıdır). Başka bir deyişle: bugün itibarıyla (Ağustos 2017) btrfs 'RAID5 / 6 kullanmayın.
DrYak
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.