Linux diskinde okunamayan tek bir bloğu kolayca nasıl onarabilirim?


22

Linux sistemim syslog'da SMART hatalarını atmaya başladı. İzini sürdüm ve sorunun diskteki tek bir blok olduğuna inanıyorum. Diskin tek bir bloğu yeniden tahsis etmesini nasıl kolaylaştırabilirim? Bu sırada hangi dosyanın imha edildiğini bilmek istiyorum. (Bir blok bir diskte başarısız olursa diğerlerinin izlemesinin muhtemel olduğunun farkındayım; devam etmekte olan iyi bir yedeğim var ve sadece bu diskin çalışmaya devam etmesini istiyorum.)

Web'de arama yapmak , demonte olmayan bir diskteki manuel bir işlemi açıklayan HOWTO Bad bloğuna götürür . Karmaşık ve hataya açık görünüyor. Linux'ta bu süreci otomatikleştirmek için bir araç var mı? Diğer tek seçeneğim üreticinin teşhis aracıdır , ancak neyin zarar gördüğünü bildirmeden kötü bloğu engelleyeceğini tahmin ediyorum. En kötü durum, dosya sistemi meta verileri olabilir.

Söz konusu disk birincil sistem bölümüdür. Ext3fs ve LVM'yi kullanma. İşte syslog'dan hata günlüğü ve smartctl'den ilgili bit.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

Pastebin üzerine tam bir akıllı çöp dökümü var .


Disk belleniminin okuma sırasında hatalı bloğu otomatik olarak yeniden eşleyeceğini düşündüm, bu yüzden teorik olarak zaten yapıldı. Aşağıda belirtildiği gibi, üst üste binen FS'nin hala sabit olduğundan emin olmak için fsck'i (veya FS'iniz için doğru eşdeğeri) çalıştırın.
BuildTheRobots,

2
Anladığım kadarıyla disk bellenimi , okuma sırasında değil , bloğu yalnızca yazma işleminde yeniden eşler . Bu yüzden gerçekten söz konusu bloğa bir yazı zorlaman gerekiyor.
Nelson

1
Sonunda bu diski emekli ettim. Birkaç ay boyunca iyi çalıştı, ancak 5. okuma hatasından sonra bıraktım.
Nelson

Yanıtlar:


12

Deneyebilirsin hdparm --write-sector <LBA> /dev/ice.

Bunu yapmanın başka bir yolunu bilmiyorum - LBA'yı manuel olarak dosya sistemi bloklarına dönüştürmeniz gerekir (daha önce bulduğunuz gibi)


Ooh, bu yeni bir bayrak! Bu kesinlikle kötü bloğu yeniden tahsis etmeye özen gösterir. Şimdi tek ihtiyacım olan şey neyin zarar göreceğini bulmak için kolay bir yol.
Nelson

3
Bir diski düzeltmek için bu yöntemi kullandıktan sonra, bunun doğru yöntem olduğunu söyleyebilirim. Söz konusu sektöre bir yazı yazmaya zorlamak, sürücüyü sektöre dönük olmaya zorlar ve (a) başarılı bir yazı elde eder veya (b) bir remap ile birlikte kalıcı bir kötü saniye olur.
Avery Payne,


Tuhaf bir basit programı ile otomatik değil (SMART yoluyla sonraki kötü sektör arayan ve yeniden tahsis edilmesini zorlama) Bu tekrarlanan bir süreçtir ..!
IMZ - Ivan Zakharyaschev

32

WD için disk bellenimi yazıyordum ve bir keresinde hatalı blok atanmış bellenimi yazdım.

İlk olarak, çoğu kötü blok yazma üzerine değil, okumalarda algılanır. Yazma işlemi kör yapılır, yani veriler kontrol edilmeden yazılır. Bu nedenle, eğer medya kötüyse, ev sahibi bu sektöre bir okuma yapmadan bunu bilemezsiniz. Sektörün küçük bir bölümü (sektör başlığı) var ve doğru sektörü bulmak için yazıyor, böylece sektör başlığını okurken bir hata olursa, sürücü sektörü yeniden atayacak ve alınan verileri yazacaktır. Yazma komutundan. Ancak, kötü blokların büyük çoğunluğu okumalarda algılanıyor ve sadece bir yazının bir sektöre başarılı olması medyanın iyi olduğu veya sektörün yeniden atandığı anlamına gelmiyor.

Şimdi kötü blok yeniden atama (yeniden tahsisat da denir) hakkında. Evet, normalde sürücü, hata yeterince kötüyse (yani, ECC arızası yeterince kötüyse) bir sektörü yeniden atamaya çalışır, ancak sürücü ECC düzeltmesinden sonra verileri hala kurtarabilir. Genellikle bu otomatik olarak yapılır. Bunun tek istisnası, ana makinenin daha önce sürücüye otomatik yeniden tahsisat yapmamasını söyleyebilmesidir, ancak bu nadiren yapılır.

Peki, sürücü bir okuma yaparsa ve verileri kurtaramazsa ne olur? Hiçbir şey değil. Hata ana bilgisayara bildirilir, ancak yeniden atama yapılmaz. Sorun, sürücünün sektörü yeniden ataması olabilir, ancak yeni atanan sektörde hangi verileri yazacağına dair en ufak bir fikri yok. Bir kaç tane sıfır yazdıysa, diyelim ve sektör yeniden okunursa, verilerin sıfır olduğuna dair hiçbir kanıt olmadan tüm sıfırları geri getirecekti. Bu aslında veri bozulmasıyla aynı şeydir. Sürücü, çeşitli nedenlerle (örneğin, sürücü yeni bir ana bilgisayara taşınmışsa ne olur?) Hataları izleyerek ana bilgisayara güvenemez, bu nedenle en iyi eylem, veriler ne zaman yapılacağıdır. kurtarılamaz.

Ancak modern sürücüler, yeniden tahsis edilemediğinde kötü sektörün konumunu koruyacak. Yeniden tahsis edilmeyi bekleyen kötü sektörlerin sayısı SMART verilerinde bulunabilir. Yeniden tahsis edilmeyi bekleyen kötü sektörlerden birine bir yazma yapılırsa, yeniden tahsisat yapılır, çünkü sürücü şimdi yeniden tahsisattan sonra yazmak için geçerli veriye sahiptir. Böylece insanlar kötü bir sektöre yazı yazmanın yeniden tahsis edileceğini söylerken, bu gerçekten hikayenin yarısı. Öncelikle sürücü okunmalıdır, böylece sürücü otomatik olarak yeniden tahsis edilemeyen tüm kötü sektörleri keşfedebilir. Böylece bir sürücünün tamamını yazabilirsiniz ve SMART verileri yeniden tahsis edilmeyi bekleyen kötü sektörler olmadığını söyleyecektir, ancak tüm kötü sektörlerin sürücülerini mutlaka temizlemediniz. Öyleyse, tüm kötü sektörlerden birinden kurtulmak istiyorsanız,

Yeniden tahsis edilemeyecek kötü bloklarla baş etmenin başka yolları da var. Sürücü yedek bir RAID yapılandırmasının parçasıysa (yani, RAID 0 dışında herhangi bir şeyse), RAID yazılımı kötü bir sektörün verilerini diğer sürücülerden otomatik olarak kurtarmalı ve yeniden tahsis edilen sektöre yazmalıdır. SCSI diskleri, ana makinenin bloğa yazılacak geçerli bir veri olmasa bile yeniden atamayı zorlamak için kullanabileceği açık bir yeniden bloklama komutuna sahiptir, ancak kullanımı oldukça düşük düzeydedir.


1
En azından bazı Seagate HDD'lerinin hdparm -R(oldukça yakın zamanda yeni bir hdparm olduğu varsayılarak) kullanılarak açılabilen Yazma-Okuma-Doğrulama'yı desteklediğini söylemeye değer olabilir. Bu, önemli bir yazma performansı cezasıyla karşı karşıyadır (yaklaşık olarak yazma işleminin ve iOPS'nin yazmanın yarısı kadardır, çünkü her yazma artık bir sonraki okumaya neden olur), ancak donanımınız destekliyorsa ve iş yükünüz okuma ağırsa, bu çok uygulanabilir bir koruyucu önlem olabilir.
CVn

2

Bence tek yapman gereken şey:

e2fsck -c /dev/hda1

/ dev / hda1 varsayalım (unmounted) bölümdür. Veya:

e2fsck -c -c /dev/hda1

(yavaş) tahribatsız okuma-yazma testi yapmak. Hala sökülmek zorunda kalacak. Yine de bunun kaybolan verilerle ilgili detayları vereceğini sanmıyorum.


Ancak SMART'ın kötü bloklarla ilgili bilgilerini kullanmamış olması üzücü. Neden SMART'ın kötü blok bilgisini kullanan ve bunlardan kaçınmaya ya da etkilenen dosyaları smartmontools.sourceforge.net/badblockhowto.html veya serverfault.com/a/106130/68972'de açıklandığı gibi fsck aracı olmadığını merak ediyorum . ..
imz - Ivan Zakharyaschev

2

Michael bunu doğruladı ve çoğu durumda sadece ucuz sürücüyü değiştirin derdim. Ancak, yedekleriniz yoksa ve sürücüden önemli veriler alamıyorsanız veya yalnızca sürücüyü onarmayı denemek istiyorsanız, spinrite kullanarak en üst düzeyde kullanmayı deneyebilirsiniz .

Birkaç yıl önce bazı sesler çıkarmaya başlayan bir dizüstü bilgisayarım vardı. Badblocks, sürücünün son kullanıcı tarafından görülebilen 118 ya da çok kötü bloğa sahip olduğunu gösterdi. Zaten bir SpinRite kopyası bulunduğundan, yeni bir sürücü almadan önce denemeye karar verdim. Sürücü üzerindeki spinrite çalıştırdıktan sonra badblocklar 0 hatalı blok gösterdi ve sesler durdu. Sürücü o zamandan beri iki yıldan fazla bir süredir çalışıyordu.


Nelson, duymak istediğin her cevabı aşağı oylayacak mısın? Sağlıklı bir sürüş otomatik olarak kötü bir bloğu yeniden eşler. Bunu zorlamak için bir şey yapmak için kendi yolunuzdan çıkmak zorundaysanız, sürücü artık sağlıklı değildir ve değiştirilmelidir.
3dinfluence,

Hayır, sadece bir yanıtı reddettim, çünkü sorumu cevaplamadı. Spinrite önerdin, teşekkürler! Anladığım kadarıyla sağlıklı bir dürtü, yazılı olana kadar kötü bir sektörün yerini almaz . Yazmaya zorlamanın en basit yolunu bulmaya çalışıyorum. Matthew’nin önerisine gitmek ve fsck’in bunu yapmak için yeterince akıllı olup olmadığına bakın.
Nelson

Maalesef 2 cevabın hızlıca oylandığını gördükten sonra varılan sonuçlara atladım ve sen olduğunu düşündüğüm diğer cevaba da cevap verdin.
3dfluence,

2
Bir yazma bloğu başarısız olduğunda hatalı kesim remap'ın gerçekleştiği doğrudur. Dosya sistemi söz konusu olduğunda yalnızca bozuk bir bloğunuz varsa, söz konusu blok bir meta veri bloğu ise fsck sorununuzu çözebilir. fsck gerçekten sadece meta verilerdeki hataları tarar ve düzeltir. Dolayısıyla verinin kendisi üzerinde hiçbir garanti vermez. BTRFS ve ZFS gibi bir sonraki gen dosya sistemi algılayabilir ve artık fazla veri doğruluğu varsa. Spinrite, bunu okuduğu gibi zorlar, sonra ters çevrilmiş verileri yazar, yeniden okur, ardından verilerini her bloğun taranmasının bir parçası olarak geri çevirir.
3dfluence,

1

Yedekleriniz varsa ve bunun mantıklı bir hata olduğunu ve fiziksel olmayan olduğunu biliyorsanız, bunun için en iyi yol diski sıfırlamak olacaktır.

MHDD'yi kullanmak oldukça kolay olurdu ve HDD'nizi Bios'ta IDE emülasyonuna ayarlamayı hatırladığınız ve ardından işiniz bittiğinde AHCI'ye geri döneceğiniz için endişelenecek bir şeyiniz yok.

MHDD'ye önyükleme yaptıktan sonra sürücü tipinizi ERASE komutundan seçin ve seçiminizi onaylayın.

Kendinize bir miktar kahve alabilirsiniz.

Sürücü sıfırlandıktan sonra, Remap ON (açık) olarak ayarlıyken taramayı (f4) yapın (varsayılan kapalı). Sürücüde hala bir sorun varsa (tablada fiziksel bir hasar olduğu ve sürücü aşağı doğru bir eğimde olduğu anlamına gelir), bu seçenek hasarlı alanı sürücünün sağlıklı kısımlarına eşleştirerek "Onarır".

UNC hatası yoksa sizi tebrik ederiz ve sürücünüz gelecek yıllar boyunca arkadaş olabilir.


-1

Disk bozuksa, değiştirin. Daha fazla parçalara ayrılma riskine değmez.


Diskin kötü olduğunu ve riskten kaçınmak için yedeklerin bulunduğunu açıkça biliyordum.
Nelson

2
Bu sadece kumar oynamaya istekli olduğun anlamına geliyor. Bunun değiştirilmemesi gerektiği anlamına geldiğini sanmıyorum, sadece bu tavsiyeyi görmezden gelmek istiyorsunuz. Disk parçalanırken herhangi bir yedeklemenin sisteminizi kendinizden kurtarabileceğinden şüpheliyim ve işler bozuldukça işler tamamen lapa lapa olacak.
Michael Graff

3
Bu cevap bir yorum olmalı ... Bu soru özel ve alıştırıcı. Ve bu nedenle bu bir cevap değil.
Pitto
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.