Oznacz uszkodzone sektory na dysku twardym bez formatowania

22

Zauważyłem, że na moim domowym serwerze Ubuntu jeden dysk jest odczytywany tylko z jakiegoś powodu. Podczas kopania odkryłem, że może się to zdarzyć, gdy na dyskach twardych wystąpią błędy. Użyłem złych bloków, aby sprawdzić błędy, i rzeczywiście mam kilka uszkodzonych sektorów.

W większości przypadków jedynym racjonalnym działaniem jest próba wykonania kopii zapasowej danych, usunięcia dysku twardego i zakupu nowego. Jednak na tym serwerze nie ma niczego, czego jeszcze nie utworzyłem kopii zapasowej w wielu miejscach i chciałbym go używać, dopóki nie umrze. Używam go do strumieniowego przesyłania muzyki i uruchamiania prostych skryptów. W każdym razie ponowna instalacja wszystkiego byłaby dużym problemem.

Czy istnieje sposób na oznaczenie tych złych bloków bez formatowania dysku twardego?

enedene
źródło

Odpowiedzi:

29

Zakładam, że mówisz o fizycznych uszkodzonych blokach na dysku, a nie o uszkodzonych systemach plików.

Aby sprawdzić stan fizyczny dysku, najlepiej go zainstalować smartmontools

sudo apt-get install smartmontools

Działa to, ponieważ wszystkie nowoczesne dyski rejestrują swój stan zdrowia za pomocą systemu o nazwie SMART

Użyj smartctrlpolecenia, aby odczytać ten status. Na przykład, aby odczytać wszystkie atrybuty z pierwszego wywołania dysku

sudo smartctl --all /dev/sda

Uważaj na linię mówiącą o ogólnym stanie zdrowia. Gdy to wskaże błąd, bardzo prawdopodobne jest, że dysk wkrótce ulegnie awarii.

SMART overall-health self-assessment test result: PASSED

Inne wiersze, które chcesz sprawdzić, to liczba oczekujących sektorów i ponownie przydzielone sektory.

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       48
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       2

Realokacja list zwykle w polu surowym liczba uszkodzonych sektorów wymienianych przez dysk na działające zapasowe. Oczekujące to sektory, które mogą zostać ponownie przydzielone w przypadku niepowodzenia następnego zapisu.

Możesz nawet uruchamiać autotesty dysku, jeśli jest to obsługiwane przez Twój model

sudo smartctl -t long /dev/sda

Aby wymusić sprawdzenie wszystkich sektorów, użyj badblocksw trybie, w którym zapisywane są dane. Uważaj, że chociaż ogólnie można go bezpiecznie uruchamiać, spowoduje to dodatkowe obciążenie dysków, co może spowodować ich awarię. Zawsze miej kopię zapasową swoich danych.

sudo badblocks -svvn -c 262144 /dev/sda

Jeśli dysk został w pełni przetworzony w ten sposób, kontroler dysku powinien wymienić wszystkie uszkodzone bloki na działające, a ponownie przydzielona liczba zostanie zwiększona w dzienniku SMART.

użytkownik228505
źródło
2
jaki jest wpływ -club liczba bloków, które są testowane jednocześnie, lub innymi słowy, dlaczego masz tak dużą wartość w porównaniu do domyślnej wartości 64?
greole
4
domyślny rozmiar bloku wynoszący 1024 bajty, pomnożony przez domyślny rozmiar 64 bloków na raz, prowadzi do przetworzenia tylko 64k na każde żądanie. W przypadku nowoczesnych dysków o przepustowości do 150 MiB / s wprowadza to więcej kosztów ogólnych, niż mi się wydaje. Chcę, aby napęd miał szansę na przetwarzanie danych w najbardziej efektywny sposób bez czekania na dane w magistrali.
user228505
Mówi: / dev / sda jest najwyraźniej używany przez system; uruchamianie złych bloków nie jest bezpieczne!
Dims
1
@Dims Mówi ci, abyś nie uruchamiał tego na aktywnie zamontowanym dysku. Najpierw odmontuj dysk. W twoim przypadku może to być dysk systemowy. Najpierw uruchom system ratunkowy.
user228505
2
@Dims Istnieje opcja -force, jeśli i tak chcesz ją uruchomić. tj. sudo badblocks -svvn -c 262144 / dev / sda -force
ADR