Kötü bir sektör arızalı bir diske işaret ediyor mu?


16

Ubuntu 13.10 sistemim son bir gün içinde çok kötü performans gösteriyor. Çekirdek günlüklerine bakıldığında, <1 yıl eski 3 TB SATA diskinin belirli bir sektörle ilgili sorunları olduğu anlaşılıyor:

Nov  4 20:54:04 mediaserver kernel: [10893.039180] ata4.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Nov  4 20:54:04 mediaserver kernel: [10893.039187] ata4.01: BMDMA stat 0x65
Nov  4 20:54:04 mediaserver kernel: [10893.039193] ata4.01: failed command: READ DMA EXT
Nov  4 20:54:04 mediaserver kernel: [10893.039202] ata4.01: cmd 25/00:08:f8:3f:83/00:00:af:00:00/f0 tag 0 dma 4096 in
Nov  4 20:54:04 mediaserver kernel: [10893.039202]          res 51/40:00:f8:3f:83/40:00:af:00:00/10 Emask 0x9 (media error)
Nov  4 20:54:04 mediaserver kernel: [10893.039207] ata4.01: status: { DRDY ERR }
Nov  4 20:54:04 mediaserver kernel: [10893.039211] ata4.01: error: { UNC }
Nov  4 20:54:04 mediaserver kernel: [10893.148527] ata4.00: configured for UDMA/133
Nov  4 20:54:04 mediaserver kernel: [10893.180322] ata4.01: configured for UDMA/133
Nov  4 20:54:04 mediaserver kernel: [10893.180345] sd 3:0:1:0: [sdc] Unhandled sense code
Nov  4 20:54:04 mediaserver kernel: [10893.180349] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180353] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Nov  4 20:54:04 mediaserver kernel: [10893.180356] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180359] Sense Key : Medium Error [current] [descriptor]
Nov  4 20:54:04 mediaserver kernel: [10893.180371] Descriptor sense data with sense descriptors (in hex):
Nov  4 20:54:04 mediaserver kernel: [10893.180373]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
Nov  4 20:54:04 mediaserver kernel: [10893.180384]         af 83 3f f8
Nov  4 20:54:04 mediaserver kernel: [10893.180389] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180393] Add. Sense: Unrecovered read error - auto reallocate failed
Nov  4 20:54:04 mediaserver kernel: [10893.180396] sd 3:0:1:0: [sdc] CDB:
Nov  4 20:54:04 mediaserver kernel: [10893.180398] Read(16): 88 00 00 00 00 00 af 83 3f f8 00 00 00 08 00 00
Nov  4 20:54:04 mediaserver kernel: [10893.180412] end_request: I/O error, dev sdc, sector 2944614392
Nov  4 20:54:04 mediaserver kernel: [10893.180431] ata4: EH complete

kern.logDosya 33MB etrafında tekrarlanan yukarıdaki hata çoğunlukla dolu ve sektör tekrarlanan mesajlarda farklı olsun görünmemektedir.

Şu anda test etmek ve diskin sahip olabileceği sorunları çözmek için şimdi monte edilmemiş diskte aşağıdaki komutu çalıştırıyorum. Ben 12 saat civarında ve disk çok büyük olduğu için başka bir 24/48 saat almasını bekliyoruz:

e2fsck -c -c -p -v /dev/sdc1

Sorum şu: Bu sürücü başarısız mı, yoksa burada ortak bir sorun mu arıyorsunuz? Kötü sektörleri onarmam ya da görmezden gelmem için herhangi bir nokta olup olmadığını ve hala kapalıyken diski garanti kapsamında değiştirmem gerekip gerekmediğini merak ediyorum. Yukarıdaki komutla ilgili bilgim biraz eksik, bu yüzden yardımcı olup olmayacağı konusunda şüpheliyim.

Hızlı güncelleme!

e2fsck nihayet 2 gün sonra çok sayıda 'inode'da çok sayıda talep edilen blok (lar) ile bitti. Dosya sistemini bağlamaya çalışmak bir hatayla sonuçlandı ve onu salt okunur olarak bırakmaya zorladı:

Nov 11 08:29:05 mediaserver kernel: [211822.287758] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Nov 11 08:29:05 mediaserver kernel: [211822.301699] EXT4-fs (sdc1): mounted filesystem with ordered data mode. Opts: errors=remount-ro

Sektörü manuel olarak okumaya çalışıyorum:

sudo dd count=1 if=/dev/sdc of=/dev/null skip=2944614392
dd: reading ‘/dev/sdc’: Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.73077 s, 0.0 kB/s

Yazmaya çalışıyorum:

sudo dd count=1 if=/dev/zero of=/dev/sdc seek=2944614392
dd: writing to ‘/dev/sdc’: Input/output error
1+0 records in
0+0 records out
0 bytes (0 B) copied, 2.87869 s, 0.0 kB/s

Her iki konuda da, Reallocated_Sector_Ct0 kaldı.

Sürücü oldukça sık uyku durumuna giriyor. Şimdi bunun bir dosya sistemi sorunu olabileceğini düşünüyorum. % 100 değilim.


4
Yedeklemelerinizin düzgün olduğundan emin olmak ve ardından donanımınızı kontrol etmek neredeyse / kesinlikle / bir işarettir.
Shadur

Hmm. Biraz güncel değiller ama ne olursa olsun oradalar. Bu sürücü başka bir hatalı sürücünün yerini aldığından çok sinir bozucu.
MrNorm

Diskler arızalanırsa, nasıl devam edeceğimi sorduğum
slm

2
... Bu sürücü arızalı olanı değiştirdiyse, sürücü yerine denetleyici olma olasılığı vardır.
Shadur

Yanıtlar:


17

Kötü sektörler her zaman arızalı bir HDD'nin bir göstergesidir, aslında böyle bir G / Ç hatası gördüğünüzde, muhtemelen bazı verileri zaten kaybetmiş / bozmuş olabilirsiniz. Henüz yapmadıysanız, kendi kendine test yapın smartctl -t long /dev/diskve SMART verilerini kontrol edin smartctl -a /dev/disk. Mümkünse bir yedek alın.

Kötü sektörler onarılamaz, sadece HDD performansına zarar veren rezerv sektörleriyle değiştirilir, çünkü her erişildiklerinde rezerv sektörlerine ek araştırmalar gerektirirler. Bu tür sektörleri dosya sistemi katmanında kötü olarak işaretlemek, o zaman hiç erişilmeyeceklerinden yardımcı olur; ancak hangi sektörlerin disk tarafından önceden yeniden tahsis edildiğini belirlemek zordur, bu nedenle dosya sisteminin etkilenen bölgeden kaçınmayı bilemeyeceği ihtimali vardır.


Teşekkürler. Benim için her zaman gri bir alan olduğunu bilmek gerçekten yararlı. Sürücüyü sıfırlayacağım ve garanti kapsamında olduğu gibi geri göndereceğim.
MrNorm

1
Öyle değil. Kötü sektörler sadece bir sektöre ciddi oranda yüksek trafik olduğunu gösterir. ÇOK durumda, arızalı bir diske işaret eder. Daha yavaş yanıtları kötü olarak işaretlemek için arama hızınızı ayarlayabilirsiniz ... Her zaman söylemek çok karmaşık.
RobotHumans

2
Ayrıca, bir nedenden dolayı gerçek diskten daha büyük olan bir dosya sistemi için okuma hataları görülebilir.
Thorbjørn Ravn Andersen

@ frostschutz ne anlama geliyor Get a replacement if you can.? Disk değiştirmeyi mi demek istiyorsun?
uçak

10

Sektörleri yeniden tahsis etmeyi sağlamak için genellikle bunlara bir şeyler yazmanız gerekir. Bununla birlikte, dd( D isk D estroyer) her zaman işe yaramaz ve çok güvensizdir: skipve seekseçeneklerini karıştırırsanız , ilk bloklara ping yaparak ve o "ofset" ten bir blok yazarak kolayca ayağınızı çekebilirsiniz . sabit diskinizin sektör 0'ıskipN/dev/zero .

Sektörün sıfırın üzerine yazılmasını zorlamak istediğinizi gerçekten biliyorsanız, şunu kullanmalısınız hdparm:

% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error

Evet, 833192656 sektörü de akıllı testlerde başarısız oldu. Ona sıfır yazmak için şunu kullanın --write-sector:

% sudo hdparm --write-sector 833192656 /dev/sda
/dev/sda:
Use of --write-sector is VERY DANGEROUS.
You are trying to deliberately overwrite a low-level sector on the media.
This is a BAD idea, and can easily result in total data loss.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.

Bir önlem olarak, hdparmgeçmek sürece gerçekten bir şey yazmaz --yes-i-know-what-i-am-doinganahtarı için hdparm:

% sudo hdparm --yes-i-know-what-i-am-doing --write-sector 833192656 /dev/sda
/dev/sda:
re-writing sector 833192656: succeeded
% sudo hdparm --read-sector 833192656 /dev/sda                              

/dev/sda:
reading sector 833192656: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[      ... more zeroes here...        ]
0000 0000 0000 0000 0000 0000 0000 0000

%

Bu eski bir soru olmasına rağmen, "dd her zaman işe yaramaz" ile ne demek istediğinizi gerçekten merak ediyorum. Verileri talimatlara uygun şekilde yazmanın başarısız olabileceğini mi düşünüyorsunuz? Başarısızlığa özellikle açık bir şey yapmıyor, sadece verileri kopyalıyor. Hemen hemen her programlama dilinde iki satır kullanarak aynı sonucu elde edebilirsiniz.
TooTea

7

Hayır, kötü sektörler her zaman başarısız bir yöntemin göstergesi değildir . Bazen bir elektrik kesintisi sırasında bir yazma işlemi devam ediyorsa, sektördeki veriler bozularak okumaya çalıştığınızda bir hata oluşur. Sektöre yeni veri yazmaya çalışmak, fiziksel olarak yanlış bir şey olmadığı için işe yarayabilir.

badblocks -nHer sektörü okuma ve yeniden yazma dürtüsünde çalışabilirsiniz ya da söz konusu sektörün sayısını zaten bildiğinizden, ddbuna sıfır yazmak için kullanabilirsiniz . SMART istatistiklerini ile kontrol edebilirsiniz smartctl -a. Bekleyen yeniden tahsis edilen sayının kaç sektörün okumada başarısız olduğunu gösterdiğini görmelisiniz ve sektörü yazmaya çalıştıktan sonra bu sayı düşecektir. Yeniden tahsis edilen sektör sayısı artabilir, bu durumda fiziksel olarak kötüydü ve yedek havuza yeniden gönderildi ve bu, sürücünün çıkış yolunda olduğunu gösteren bir işaret olabilir. Değilse, o zaman sadece karıştırıldı ve şimdi iyi olmalı.

Önce sektörü okumaya çalışın:

dd count=1 if=/dev/sda of=/dev/null skip=nnnn

Bu başarısız olursa, o zaman doğru numaraya sahipsiniz, o zaman sıfırlayabilirsiniz:

dd count=1 if=/dev/zero of=/dev/sda seek=nnnn

Enter tuşuna basmadan önce komutu tam olarak yazıp yazmadığınızı bir kez daha kontrol edin.


Bunu söylemeniz ilginç, çünkü komutlarınızı takip ederek bazı ilginç bilgiler aldım. Yukarıdaki sorumu değiştirdim.
MrNorm

Sürücünüz bir nedenden dolayı SMART'ı desteklemiyor mu veya neden henüz kontrol etmediniz?
frostschutz

1
@frostschutz "Her iki sayımda da Reallocated_Sector_Ct 0 kaldı." OP görünüyor etmiştir SMART kontrol etti.
CVn

@ MrNorm, lütfen sorunuza tam smartctl -açıktı ekleyin .
psusi

2
Lütfen bunu kullanmayın (her zaman işe yaramaz) ve atlama ve aramayı karıştırırsanız, bunun yerine MBR'nizin üzerine yazacaksınız. Cevabımı
Antti Haapala
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.