Jak łatwo naprawić pojedynczy nieczytelny blok na dysku Linux?


22

Mój system Linux zaczął zgłaszać błędy SMART do syslog. Wyśledziłem to i wierzę, że problemem jest pojedynczy blok na dysku. Jak mogę łatwo przekonać dysk do ponownego przydzielenia tego jednego bloku? Chciałbym wiedzieć, jaki plik został zniszczony podczas procesu. (Zdaję sobie sprawę, że jeśli jeden blok ulegnie awarii na dysku, prawdopodobnie pójdą za nim inne; mam dobrą bieżącą kopię zapasową i chcę tylko spróbować utrzymać ten dysk w działaniu).

Przeszukiwanie sieci prowadzi do uszkodzonego bloku HOWTO , który opisuje ręczny proces na odmontowanym dysku. Wydaje się skomplikowane i podatne na błędy. Czy istnieje narzędzie do automatyzacji tego procesu w systemie Linux? Moją jedyną opcją jest narzędzie diagnostyczne producenta , ale zakładam, że zablokuje zły blok bez zgłaszania zniszczeń. W najgorszym przypadku mogą to być metadane systemu plików.

Dysk, o którym mowa, jest podstawową partycją systemową. Korzystanie z ext3fs i LVM. Oto dziennik błędów z syslog i odpowiedni bit z smartctl.

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

Na pastebin jest pełny zrzut smartctl .


Myślałem, że oprogramowanie dysku automatycznie mapuje zły blok podczas odczytu, więc teoretycznie zostało to już zrobione. Jak podano poniżej, uruchom fsck (lub prawidłowy equiv dla twojego FS), aby upewnić się, że FS nałożony jest nadal stabilny.
BuildTheRobots,

2
Rozumiem, że oprogramowanie dysku zmieni mapowanie bloku tylko podczas zapisu , a nie odczytu. Więc naprawdę muszę wymusić zapis w danym bloku.
Nelson

1
W końcu wycofałem ten dysk. Działało dobrze przez kilka miesięcy, ale po 5 błędzie odczytu zrezygnowałem z niego.
Nelson

Odpowiedzi:


12

Możesz spróbować hdparm --write-sector <LBA> /dev/ice.

Nie znam innego sposobu na zrobienie tego - musisz ręcznie przekonwertować LBA na bloki systemu plików (jak już znalazłeś)


Och, to nowa flaga! To na pewno zajmie się ponownym przydzieleniem złego bloku. Teraz wszystko, czego potrzebuję, to prosty sposób na znalezienie tego, co zatka.
Nelson

3
Po użyciu tej metody do naprawy dysku mogę powiedzieć, że jest to poprawna metoda. Wymuszenie zapisu w danym sektorze zmusi dysk do znalezienia się w tym sektorze i albo (a) uzyska udane zapisy, albo (b) zakończy się permanentnie złą sekundą wraz z mapowaniem.
Avery Payne

Świetny! I o wiele łatwiejsze niż smartmontools.sourceforge.net/badblockhowto.html
Janning

Dziwne, że ten iteracyjny proces (szukanie następnego złego sektora za pomocą SMART i zmuszanie go do ponownej alokacji) nie jest zautomatyzowany za pomocą prostego narzędzia! ..
imz - Ivan Zakharyaschev

32

Kiedyś pisałem oprogramowanie dysku dla WD i kiedyś napisałem oprogramowanie, które przypisało złe bloki.

Po pierwsze, większość złych bloków jest wykrywana podczas odczytu, a nie zapisu. Zapisy są wykonywane na ślepo, co oznacza, że ​​dane są zapisywane bez sprawdzania. Dlatego podczas pisania, jeśli media są złe, nie będziesz o tym wiedział, dopóki host nie przeczyta tego sektora. Istnieje niewielka część sektora (nagłówek sektora), która jest odczytywana podczas zapisów w celu zlokalizowania poprawnego sektora, więc jeśli wystąpi błąd podczas odczytu nagłówka sektora, napęd ponownie przypisze sektor i zapisze go z otrzymanymi danymi z polecenia zapisu. Ale znaczna większość złych bloków jest wykrywana podczas odczytu, a fakt, że zapis odnosi sukces w sektorze, nie oznacza, że ​​media są dobre lub że sektor został ponownie przypisany.

Teraz o złym przypisaniu bloku (zwanym także ponownym przydzieleniem). Tak, zwykle dysk będzie próbował zmienić przypisanie sektora, jeśli błąd jest wystarczająco zły (tj. Błąd ECC jest wystarczająco zły), ale dysk nadal może odzyskać dane po korekcie ECC. Zwykle odbywa się to automatycznie. Jedynym wyjątkiem jest to, że host mógł wcześniej nakazać napędowi, aby nie dokonywał automatycznych realokacji, ale rzadko tak się dzieje.

Co się stanie, jeśli dysk wykona odczyt i nie będzie mógł odzyskać danych? Nic. Błąd jest zgłaszany do hosta, ale zmiana przypisania nie jest wykonywana. Problem polega na tym, że dysk może ponownie przypisać sektor, ale nie ma najmniejszego pojęcia, jakie dane zapisać w nowo przypisanym sektorze. Gdyby napisał tylko kilka zer, powiedzmy, a następnie sektor został odczytany ponownie, zwróciłby wszystkie zera bez żadnego wskazania, że ​​dane są nieprawidłowe. Jest to zasadniczo to samo, co uszkodzenie danych. Dysk nie może liczyć na to, że host śledzi błędy z różnych powodów (na przykład, jeśli dysk został przeniesiony na nowy host?), Więc najlepszym sposobem jest nic nie robić, gdy dane mogą „ zostać odzyskanym.

Nowoczesne dyski pozwolą jednak zachować lokalizację uszkodzonego sektora, gdy nie będzie można go ponownie przydzielić. Liczbę uszkodzonych sektorów oczekujących na realokację można znaleźć w danych SMART. Dzieje się tak, jeśli zapis jest wykonywany w jednym ze złych sektorów oczekujących na realokację, realokacja jest wykonywana, ponieważ dysk ma teraz prawidłowe dane do zapisu po realokacji. Dlatego kiedy ludzie mówią, że pisanie do złego sektora spowoduje jego realokację, to tak naprawdę tylko połowa historii. Najpierw należy odczytać dysk, aby mógł wykryć wszystkie uszkodzone sektory, których nie można automatycznie przenieść ponownie. W ten sposób możesz napisać cały dysk, a dane SMART powiedzą, że nie ma żadnych uszkodzonych sektorów oczekujących na realokację, ale niekoniecznie wyczyściłeś dysk wszystkich złych sektorów. Więc jeśli naprawdę chcesz wyczyścić dysk ze wszystkich złych sektorów,

Istnieją inne sposoby radzenia sobie ze złymi blokami, których nie można ponownie przydzielić. Jeśli dysk jest częścią redundantnej konfiguracji RAID (tj. Innej niż RAID 0), oprogramowanie RAID powinno automatycznie odzyskać dane uszkodzonego sektora z innych dysków i zapisać je w ponownie przydzielonym sektorze. Dyski SCSI mają jawne polecenie zmiany przypisania bloków, którego host może użyć do wymuszenia zmiany przypisania, nawet gdy nie ma prawidłowych danych do zapisu w bloku, ale jego użycie jest dość niskie.


1
Warto też wspomnieć, że przynajmniej niektóre dyski twarde Seagate obsługują hdparm -Rfunkcję zapisu-odczytu-weryfikacji, którą można włączyć za pomocą (przy założeniu, że hdparm jest całkiem nowy). Sprowadza się to do znacznego ograniczenia wydajności zapisu (w przybliżeniu zmniejszenie o połowę przepustowości zapisu i IOPS zapisu, ponieważ każdy zapis wymaga teraz kolejnego odczytu), ale jeśli twój sprzęt to obsługuje, a twoje obciążenie jest obciążone odczytem, ​​może to być bardzo wykonalne działanie zapobiegawcze .
CVn,

2

Myślę, że wszystko co musisz zrobić to:

e2fsck -c /dev/hda1

zakładając, że / dev / hda1 jest partycją (odmontowaną). Lub:

e2fsck -c -c /dev/hda1

wykonać (wolniejszy) nieniszczący test odczytu i zapisu. Nadal będzie musiał zostać odmontowany. Nie sądzę jednak, aby dostarczyło ci szczegółowych informacji na temat utraconych danych.


Szkoda, że ​​nie wydaje się, aby wykorzystywały informacje SMART na temat złych bloków. Zastanawiam się, dlaczego nie ma narzędzia fsck, które wykorzystywałoby złe informacje o bloku z SMART i starałoby się ich uniknąć lub naprawić uszkodzone pliki, jak opisano w smartmontools.sourceforge.net/badblockhowto.html lub serverfault.com/a/106130/68972 . ..
imz - Ivan Zachharyaschev

2

Michael ma rację i w większości przypadków powiedziałbym, że wystarczy wymienić dysk, bo są tanie. Jeśli jednak nie masz kopii zapasowych i nie możesz pobrać ważnych danych z dysku lub po prostu chcesz spróbować naprawić dysk, możesz spróbować użyć spinrite na najwyższym poziomie.

Miałem napęd na laptopa, który kilka lat temu zaczął wydawać dźwięki. Badblocks pokazał, że na dysku było 118 lub więcej złych bloków widocznych dla użytkownika końcowego. Ponieważ miałem już kopię SpinRite, postanowiłem wypróbować ją przed zakupem nowego dysku. Po uruchomieniu spinrite na dysku badblocks pokazał 0 złych bloków i hałasy ustały. Od tego czasu napęd pracował od ponad dwóch lat.


Nelson, czy chcesz po prostu zagłosować na każdą odpowiedź, która nie jest tym, co chcesz usłyszeć? Zdrowy dysk automatycznie zamapuje zły blok. Jeśli musisz zrobić wszystko, aby to wymusić, dysk nie jest już zdrowy i należy go wymienić.
3dinfluence

Nie, głosowałem tylko jedną odpowiedź, ponieważ nie odpowiedziała na moje pytanie. Zasugerowałeś spinrite, dzięki! Rozumiem, że zdrowy napęd nie zmieni mapowania złego sektora, dopóki nie zostanie napisany do. Próbuję znaleźć najprostszy sposób na wymuszenie zapisu. Przejdę do sugestii Matthew i sprawdź, czy fsck jest wystarczająco mądry, aby to zrobić.
Nelson

Przepraszam, że doszedłem do wniosków po tym, jak zobaczyłem, że 2 odpowiedzi szybko przegłosowały, a ty odpowiadasz na drugą odpowiedź, którą zakładałem, że to ty.
3dinfluence

2
Masz rację, że mapowanie błędnego sektora ma miejsce, gdy zapis nie powiedzie się blokowi. Jeśli masz tylko uszkodzony blok, jeśli chodzi o system plików, fsck może rozwiązać problem, jeśli blok ten jest metadanymi. fsck tak naprawdę skanuje i koryguje błędy w metadanych. Nie daje to gwarancji na same dane. Systemy plików nowej generacji, takie jak BTRFS i ZFS, mogą wykryć, a jeśli masz nadmiarowość, poprawić błędy danych. Spinrite również wymusiłby to podczas odczytywania, a następnie zapisuje odwrócone dane, ponownie odczytuje, a następnie odwraca dane z powrotem na każdym bloku w ramach skanowania.
3dinfluence

1

Jeśli masz kopie zapasowe i wiesz, że jest to błąd logiczny, a nie fizyczny, najlepszym sposobem na zrobienie tego byłoby wyzerowanie dysku.

Chciałbym użyć MHDD, jest dość łatwy w użyciu i tak długo, jak pamiętasz, aby ustawić HDD w Bios na emulację IDE, a następnie z powrotem do AHCI po zakończeniu pracy, nie masz się czym martwić.

Po uruchomieniu na MHDD wybierz typ napędu w poleceniu KASUJ i potwierdź swój wybór.

Zdobądź kawę, może to chwilę potrwać.

Po wyzerowaniu dysku uruchom skanowanie (f4) z ustawieniem opcji Remap na ON (domyślnie jest wyłączone). Jeśli nadal występują problemy z dyskiem (oznaczałoby to uszkodzenie fizyczne talerza, a dysk znajduje się na ostrym stoku w dół), ta opcja „naprawi” je poprzez mapowanie uszkodzonego obszaru na zdrowe części dysku.

Jeśli nie ma żadnych błędów UNC, gratuluję Tobie i Twojemu napędowi jeszcze wielu przyjaciół.


-1

Jeśli dysk się psuje, wymień go. Nie warto ryzykować, że rozpadnie się bardziej.


Mówiłem wprost o tym, że dysk jest zły i że mam kopie zapasowe, aby uniknąć ryzyka.
Nelson

2
To po prostu oznacza, że ​​chcesz grać. Nie sądzę, żeby to oznaczało, że nie należy go zastępować, tylko że zignorujesz tę radę. Wątpię, czy jakakolwiek kopia zapasowa uratuje twój system przed samym sobą, gdy dysk się rozpadnie, a rzeczy ulegną pogorszeniu w miarę degradacji.
Michael Graff,

3
Ta odpowiedź powinna być komentarzem ... Pytanie jest szczegółowe i wyczerpujące. I dlatego nie jest to odpowiedź.
Pitto,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.