Hatalar için BTRFS dosya sistemi baskını nasıl izlenir?


11

Çeşitli BTRFS olayları için bir program / komut dosyası çalıştırabilen bir arka plan programında bazı belgeler gördüm, ancak artık bulamıyorum.

BTRFS raid1 dizisi için sürücü hatasıyla ilgili bir komut dosyası / program nasıl çalıştırılabilir? Potansiyel olarak başarısız bir sürücü için erken bir uyarı olarak hareket etmek için herhangi bir hata üzerinde bir komut dosyası çalıştırmak istiyorum, ancak gerçek sürücü hatası en önemlisidir. Bu noktada dosya sistemini (BTRFS zaten yapmazsa) çıkarmak ve bir alarm ayarlamak istiyorum.


1
Sistemin neden sürücü arızasında raid1 bağlantısını kesmesini istiyorsunuz? Bu tür bir amacı yener değil mi? Yani bunun bir nedeni olabilir, ama varsayılan olarak bunu yapmamalı
Petr

Bir RAID5 vardı ve iki sürücü kısa sürede başarısız. BTRFS'nin ayna baskını özelliğini kullanarak yeni bir sistem kurmak ve orijinal nedenle başa çıkmak için zaman sağlarken daha fazla hasar olasılığını azaltmak için sürücü sorunlarına (mutlaka sürücü arızası değil) hızlı bir şekilde tepki vermek istiyordum. BTRFS'nin N yönlü aynasının bir gün iyi çalışacağını umuyorum.
Ioan

@Ioan: Bu nedenle RAID-5 her zaman önerilmez ve bunun yerine RAID-6 kullanılmalıdır. Bir resilver tüm sürücülere çok fazla stres uygular ve bu da kötü gitmek üzere olabilecek ikinci bir sürücünün bu işlem sırasında başarısız olmasına neden olabilir. RAID-5'in aksine, RAID-6 bunu kaldırabilir (ikinci sürücüyü değiştirmeden önce salt okunur olarak yeniden bağlayabilir ve yedeklemenizi güncelleyebilirsiniz).
basic6

Yanıtlar:


18

Normal günlük sistemine ek olarak, BTRFS'nin sürücü başına hataları (okuma, yazma ve bozulma / sağlama toplamı hataları dahil) izleyen bir istatistik komutu vardır:

# btrfs device stats /
[/dev/mapper/luks-123].write_io_errs   0
[/dev/mapper/luks-123].read_io_errs    0
[/dev/mapper/luks-123].flush_io_errs   0
[/dev/mapper/luks-123].corruption_errs 0
[/dev/mapper/luks-123].generation_errs 0

Böylece basit bir kök cronjob oluşturabilirsiniz:

MAILTO=admin@myserver.com
@hourly /sbin/btrfs device stats /data | grep -vE ' 0$'

Bu, her saat pozitif hata sayısını kontrol eder ve size bir e-posta gönderir. Açıkçası, e-posta bildiriminin çalıştığını doğrulamak için böyle bir senaryoyu test edersiniz (örneğin bozulmaya neden olarak veya grep'i kaldırarak).

Buna ek olarak, BTRFS (sağlama toplamı olan) gibi gelişmiş dosya sistemlerinde, kötü bir sürücünün neden olduğu sessiz yolsuzluğu tespit etmek için genellikle her iki haftada bir bir fırçalama zamanlamanız önerilir.

@monthly /sbin/btrfs scrub start -Bq /data

Bu -Bseçenek fırçalamayı ön planda tutar, böylece e-posta kronundaki sonuçları size görürsünüz. Aksi takdirde, arka planda çalışır ve e-postada olmayacakları için sonuçları manuel olarak kontrol etmeyi hatırlamanız gerekir.

Güncelleme : Michael Kjörling'in önerdiği gibi grep geliştirildi, teşekkürler.

Güncelleme 2 : Ovma ve normal okuma işlemleriyle ilgili ek notlar (bu yalnızca BTRFS için geçerli değildir):
Ioan'ın işaret ettiği gibi, bir ovma, dizinin boyutuna ve türüne (ve diğer faktörlere) bağlı olarak, bazı durumlarda bir günden fazla zaman alabilir. Ve aktif bir taramadır, gelecekteki hataları algılamaz - bir fırçalamanın amacı, o zamandaki sürücülerinizdeki hataları bulmak ve düzeltmektir. Ancak diğer RAID sistemlerinde olduğu gibi, periyodik ovmaların programlanması önerilir. Dosya okumak gibi tipik bir G / Ç işleminin, okunan verilerin gerçekten doğru olup olmadığını kontrol ettiği doğrudur. Ancak basit bir ayna düşünün - dosyanın ilk kopyası hasar görürse, belki ölmek üzere olan bir sürücü tarafından, ancak doğru olan ikinci kopya aslında BTRFS tarafından okunursa, BTRFS yolsuzluk olduğunu bilmez sürücülerden birinde. Bunun nedeni, istenen verilerin alınmasıdır,Bu, özel olarak bir sürücüde bozuk olduğunu bildiğiniz bir dosyayı okuduğunuzda bile, bozulmanın bu okuma işlemi tarafından algılanacağının garantisi olmadığı anlamına gelir.
Şimdi, BTRFS'nin sadece iyi sürücüden okuduğunu varsayalım, kötü sürücüdeki hasarı tespit edecek hiçbir fırçalama yapılmıyor ve sonra iyi sürücü de kötü gidiyor - sonuç veri kaybı olacak (en azından BTRFS biliyordu) hangi dosyalar hala doğrudur ve bunları okumanıza izin verir). Tabii ki, bu basitleştirilmiş bir örnektir; gerçekte, BTRFS her zaman bir sürücüden okuma ve diğer sürücüyü göz ardı etmeyecektir.
Ancak önemli olan nokta, periyodik fırçalamaların önemli olmasıdır, çünkü düzenli okuma işlemlerinin mutlaka algılamayacağı hataları bulurlar (ve düzeltirler).

Hatalı sürücüler : Bu soru oldukça popüler olduğu için, bu "izleme çözümünün" muhtemelen kötü sürücülerle ilgili sorunları tespit etmek olduğunu belirtmek isterim (örneğin, sürücüye neden olan ölmekle birlikte hala erişilebilir).

Öte yandan, bir sürücü aniden kaybolursa (ölmek ve hata üretmek yerine bağlantısı kesilmiş veya tamamen ölmüşse), hatalı bir sürücü olacaktır (ZFS böyle bir sürücüyü FAULTED olarak işaretler). Ne yazık ki, BTRFS, 09/2015 tarihli bu posta listesi girişinde belirtildiği gibi, dosya sistemi takılıyken bir sürücünün gittiğini fark etmeyebilir (bunun yamalanmış olması mümkündür):

Aradaki fark, bir aygıtın bağlantı noktasında bulunmadığını algılamak için kodumuz olması, bağlı bir dosya sistemine düştüğünü algılamak için kodumuz (henüz) yok. Neden bir aygıtın kaybolması için uygun bir algılamanın olması bir öncelik olarak görünmüyor, hiçbir fikrim yok, ancak bu bağlanma davranışından ayrı bir konudur.

https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg46598.html

O zamana kadar dmesg'de tonlarca hata mesajı olurdu, bu yüzden dmesg'i selamlamak güvenilir olmayabilir.
BTRFS kullanan bir sunucu için, RAID dizisindeki sürücülerden en az biri gitti, yani artık erişilemiyorsa bir uyarı gönderen özel bir kontrol (cron işi) olması bir fikir olabilir ...


1
Daha grep -vE ' 0$'iyi bir şey olmaz mıydı ?
CVn

@ MichaelKjörling: İyi fikir, cevabımı güncelledim, teşekkür ederim!
basic6

Bu güzel bir fikir ve bunu düzenli bir bütünlük kontrolü olarak yapıyorum. Ancak, tüm verileri kontrol etmek bir saatten uzun sürebilir. Hataları almak için sürekli çalıştırıyorsanız donanımdaki aşınmadan bahsetmiyorum. BTRFS, tüm normal dosya sistemi işlemlerinin kontrol toplamını yapar ve bu onlara hemen tepki vermenin daha etkili bir yolu olacaktır.
Ioan

@ kredi: Doğru, bir ovma saatlerce çalışabilir, bu yüzden sürücülere çok fazla stres atıyor. Ancak sessiz yolsuzluğu tespit etmek için yapılır, böylece başka bir sürücü de kötüleşmeden önce kötü bir sürücüyü değiştirebilirsiniz. Normal fs işlemleri sırasında sessiz yolsuzluk olmaz, bu nedenle otomatik olarak bilgilendirilmezsiniz.
basic6

@ basic6: Kesinlikle ve bu harika. Ancak, normal çalışma sırasında bozulmuş BTRFS dizisi gibi hataları bir sonraki fırçalamaya kadar algılamak için hiçbir şey yapmaz. Sessiz yolsuzluk, verimlilik için aylık bir fırça kullanarak ele alınabilir, ancak bu diğer hatalar için çok uzun.
Ioan

4

Btrfs-progs v4.11.1 istatistiklerinde, değerlerden herhangi biri sıfır değilse sıfırdan farklı bir değer döndüren --check seçeneğine sahiptir ve normal ifadeye olan ihtiyacı ortadan kaldırır.

cihaz istatistikleri -c /


3

Hata bildirimi için istatistik komutuna güvenmem, çünkü bir sürücü aniden kaybolursa bu komut hata döndürmez. Önemli bir dosya sistemi ile önerilmez - sata kablosunu çıkararak veya bir sürücü çekerek test edebilirsiniz.

btrfs device stats /

Yeniden başlatmanın ardından, btrfs eksik sürücüleri gösterir, ancak bu çok geç olabilir.

btrfs fi show

2

Kullanıcıların işlenmesi için resmi olarak BTRFS olaylarını bildiren bir arka plan programı veya yardımcı program görünmüyor. En yakın alternatif, BTRFS'den gelen iletiler için sistem günlüğünü izlemek ve buna göre tepki vermektir.

http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html

Yukarıdaki bağlantı, BTRFS ile ilgili beklenmedik günlük iletileri üzerinde hareket etmek üzere genel amaçlı günlük izleme için tasarlanmış bir komut dosyasını ( secDebian veya SEC üzerinde paket) yapılandırmak için daha fazla ayrıntı sağlar . Ayrıca, önleyici bir önlem olarak bit-çürümesini kontrol etmek ve günlük girişlerini yayınlamak için düzenli olarak planlanmış bir dosya sistemine sahip olmaya da bağlıdır. Aşağıda SEC komut dosyasına özel bir alıntı verilmiştir:

Sn, olay ilişkilendirici btrfs dosya sistemi hatalarını veya uyarılarını bildirmek için nasıl yapılandırılır

Sec.pl (debian veya http://simple-evcorr.sourceforge.net/ adresine apt-get install sec) yüklendikten sonra , aşağıdaki 2 yapılandırma dosyasını yükleyin.

Bu kusursuz değildir, bilinen mesajların normal ifadesine dayanır ve bilinmeyen tüm mesajları bildirir. İleriye dönük negatif normal ifadeyi gerektiği gibi genişletebilirsiniz.

polgara:~\# cat /etc/default/sec  
\#Defaults for sec  
RUN_DAEMON="yes"  
DAEMON_ARGS="-conf=/etc/sec.conf -input=/var/log/syslog -pid=/var/run/sec.pid -detach -log=/var/log/sec.log"

polgara:~# cat /etc/sec.conf  
\# http://simple-evcorr.sourceforge.net/man.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html  
type=SingleWithSuppress  
ptype=RegExp  
pattern=(?i)kernel.*btrfs: (?!disk space caching is enabled|use ssd allocation|use .* compression|unlinked .* orphans|turning on discard|device label .* devid .* transid|detected SSD devices, enabling SSD mode|has skinny extents|device label|creating UUID tree|checking UUID tree|setting .* feature flag|bdev.* flush 0, corrupt 0, gen 0)  
window=60  
desc=Btrfs unexpected log  
action=pipe '%t: $0' /usr/bin/mail -s "sec: %s" root

1

Sistem izleme için bir görev gibi görünüyor. Nagios Plugin API'sini uygulayan bir check var: check_btrfs . Kaynak kodunda da görebileceğiniz gibi, check_dev_statscihaz istatistiklerini kontrol eden ve değerlerden herhangi biri sıfırdan farklıysa kritik önem taşıyan bir fonksiyona sahiptir . Ayrıca tahsis sorunlarını da denetler. Belirsiz olan şey , bir disk yoksa veya çevrimdışı olursa kontrolün nasıl davrandığıdır .

Not: Eklenti Debian'da paketlenmiştir: tracking-plugins-btrfs

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.