Ubuntu'da hatalı blok yeniden deneme / bekleme sürelerini azaltma


10

İşletim sisteminin sürekli olarak arızalı bir sürücüye yazmaya çalışmaması için IO bekleme süresini ve yeniden deneme sürelerini nasıl azaltabilirim?

Müşterilere normal SATA masaüstü sabit disklerine aktarılan demo içeriğin kopyalarını oluşturmak için kullandığım bir sistemim var. SAS üzerinden aynı anda birçok sürücüyü bağlarız ve bir komut dosyası kullanarak içeriği kopyalarız.

Sürücüler ödünç verildiği için, bazen bazıları geri döndü ama hasar gördüklerini bilmiyorum, bu nedenle bir dahaki sefere bir kopyalama işleminde yeniden kullanıldığında, sistem IO'yu bu sürücüye yeniden denediğinde diğer sürücüleri yavaşlatır. Bazen bozuk sürücüyü fark edip çıkarmadan saatler sürebilir. Sürücü çıkarıldıktan sonra, diğer sürücüler normal hızda yazmaya başlar.

Kötü sürücüleri kurtarmayı umursamıyorum. Sadece onları ayıklamam gerekiyor, böylece her şeyi yavaşlatmıyorlar.

Ayrıca badblocks ve smartmontools'u araştırıyorum ve yazmaya başlamadan önce sürücüler üzerinde bir ön kontrol yazmayı düşünüyorum.

İşletim Sistemi: Ubuntu Linux (12.04 lts)


udisks/ Aracılığıyla SMART verilerini kontrol etmede sorun nedir smartmonctl? Burada klasik bir XY sorunu, methinks.
Deer Hunter

2
Teşekkürler, smartmonctl'i daha fazla araştıracağım. Deneyimlerime göre, son gönderi sırasında kötü sektörler olduysa, SMART durumu sürücünün hala iyi olduğunu gösterir ve kopyalama sırasında rastgele bir parçaya kadar iyi performans gösterir ve ardından taramayı yavaşlatır ve diğer sürücüleri de etkiler. kaldırılır.
Ryan Sorensen

Soru doğrudan bir cevap almamıştır, bu yüzden bunun linux'da olası bir şey olup olmadığını bilmiyoruz: IO bekleme süresini ve yeniden deneme sürelerini nasıl azaltabilirim?
imz - Ivan Zakharyaschev

@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 Ancak, çekirdek bu hataları günlüğe kaydeder , bu nedenle yapmak istediğiniz tek şey daha fazla sorun haline gelmeden önce başarısız bir diski yakalamaksa, sistem günlüklerini tarayabilirsiniz. Düzenli aralıklarla.
goldilocks

@gol Daha hızlı yakalamak istersem ne olur? Tanrı beklemeden IO operasyonunun bir hata raporunun engellemesini kaldırmasından önce ne kadar zaman geçtiğini biliyor? (Aslında, hataları bir diskten veri kaydetmeye çalışıyorum, ama benim sorunum benzer: bu "hatalı" sektörlerde çalıştırmak büyük gecikmelere neden olabilir. ... Belki de tavsiye takip ve bir yol icat SMART ddrescuetarafından raporlanan sektörlere bile dokunmaması için SMART testinden gelen bilgileri besleyin .)
imz - Ivan Zakharyaschev

Yanıtlar:


7

Bu ayarlamayı daha önce kullanmadım, ancak muhtemelen söz konusu sürücü için eh_timeout'u (hata işleme zaman aşımı) ayarlamak istiyorsunuz :

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

Yukarıdaki sda10 saniyeye ayarlanmış gösterir . Red Hat Bilgi Bankasından:

Belirli depolama yapılandırmalarında (örneğin, birçok LUN içeren yapılandırmalar), SCSI hata işleme kodu yanıt vermeyen depolama aygıtlarına TEST BİRİMİ HAZIR gibi komutlar vermek için çok fazla zaman harcayabilir. SCSI aygıt nesnesine, SCSI hata işleme kodu tarafından kullanılan TEST UNIT READY ve REQUEST SENSE komutları için zaman aşımı değerinin yapılandırılmasına izin veren yeni bir sysfs parametresi (eh_timeout) eklendi. Bu, yanıt vermeyen cihazları kontrol etmek için harcanan zamanı azaltır. Eh_timeout'un varsayılan değeri 10 saniyedir; bu, bu işlevi eklemeden önce kullanılan zaman aşımı değeridir.


Bunu şimdi kontrol ediyorum. Ubuntu'da eh_timeout yoktur, ancak aynı şey olabilecek bir zaman aşımı dosyası vardır. Varsayılan Ubuntu değeri 30 sn. 5 saniyeye indirir ve rapor verir.
Ryan Sorensen

1
Meraktan sonuç ne oldu?
Bratchley

Zaman aşımı bayrağını 12.04 olarak ayarlamak hiçbir şey yapmadı. Ben eh_timeout (ve ayrıca zaman aşımı) var çünkü bir test sistemi bu hafta sonu 14.04 yükseltmeyi planlıyorum.
Ryan Sorensen

@RyanSorensen, bu parametrenin hiç çalışıp çalışmadığını görme şansınız oldu mu?
Nat

Değiştiremedim eh_timeoutama timeouteldeki görevi yerine getirmek için değişebildim .
GuitarPicker

2

/sys/block/<dev>/statİlgilendiğiniz cihazları izleyin ve 10. parametreyi (io_ticks) karşılaştırın.

Örneğin, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Bu, diskin io'yu beklemek için harcadığı kullanılabilir sürenin yüzdesidir.

% 100'e yakın bir şey elbette kontrol etmeye değer, ya da gerçekten zeki olsun ve tüm disklerinizin ortalamasıyla karşılaştırın ve ortalamanın üzerinde herhangi bir disk (ler) seçin.

Bkz blok katmanı istatistikleri belgeler .

Başka Munin gibi bir şey kullanın ve grafik. Munin'in bir eşiğin üzerine çıkması durumunda uyarmasını sağlayabilirsiniz, örneğin% 90 veya grafiğinizin gösterdiği her şey iyi bir uyarı rakamıdır.

örneğin, / dev / sdi'nin bakması gerektiğini gösteren iki Munin grafiğine bakın. Bu örnekte / dev / sdi bir dizinin parçasıysa, dizinin tamamı onun yüzünden zarar görür.

Cihaz başına disk kullanımı - gün başına

Cihaz başına disk kullanımı - haftaya göre

Hafta grafiğine bakarsanız / dev / sdc'nin de yavaş olabileceğini göreceksiniz.

Ben / dev / sdi yukarıdaki kırık değil, sadece yavaş bir disk (aslında birileri kurumsal sınıf sata diskler bir dizi ekledi yeşil bir disk) hangi dizi yavaşlatmak eklemeniz gerekir. Gerçek bir arızalı disk ağrılı bir başparmak gibi çıkacaktır.

Özetle, zamanım olsaydı muhtemelen bir senaryo ile giderdim, ama Munin hızlı bir çözüm istersem ve sunucuya bağlanmak kolaydı.


Teşekkürler! Linux'taki iio istatistikleri hakkındaki bilgiler gerçekten yeni ve bu gibi durumlarda (bana göre) yararlı görünüyor.
imz - Ivan Zakharyaschev
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.