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 .
Odpowiedzi:
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ś)
źródło
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.
źródło
hdparm -R
funkcję 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 .Myślę, że wszystko co musisz zrobić to:
zakładając, że / dev / hda1 jest partycją (odmontowaną). Lub:
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.
źródło
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.
źródło
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ół.
źródło
Jeśli dysk się psuje, wymień go. Nie warto ryzykować, że rozpadnie się bardziej.
źródło