Mam napęd, który zgłasza, że obecnie oczekującymi sektorami jest „45”. Użyłem złych bloków do identyfikacji sektorów i próbowałem zapisać do nich zera za pomocą dd .
Z tego, co rozumiem, kiedy próbuję zapisać dane bezpośrednio do uszkodzonych sektorów, powinno to spowodować realokację, zmniejszenie obecnych sektorów oczekujących o jeden i zwiększenie liczby przeniesionych sektorów.
Jednak na tym dysku zarówno nieprzetworzone wartości Reallocated_Sector_Ct, jak i Reallocated_Event_Count mają wartość 0, a dd kończy się niepowodzeniem z błędami we / wy, gdy próbuję zapisać zera w uszkodzonych sektorach. dd działa jednak dobrze, gdy piszę w dobrym sektorze.
# dd if=/dev/zero of=/dev/sdb bs=512 count=1 seek=217152
dd: error writing ‘/dev/sdb’: Input/output error
Czy to oznacza, że mój dysk w jakiś sposób nie ma wolnych sektorów, które można by wykorzystać do realokacji? Czy mój dysk jest po prostu okropną osobą? (Dysk nie jest właściwie mój, pomagam przyjacielowi. Być może właśnie dostali tani dysk lub coś takiego.)
Jeśli jest to istotne, oto wynik działania smartctl -i :
Model Family: Western Digital Caviar Green (AF)
Device Model: WDC WD15EARS-00Z5B1
Serial Number: WD-WMAVU3027748
LU WWN Device Id: 5 0014ee 25998d213
Firmware Version: 80.00A80
User Capacity: 1,500,301,910,016 bytes [1.50 TB]
Sector Size: 512 bytes logical/physical
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS (minor revision not indicated)
SATA Version is: SATA 2.6, 3.0 Gb/s
Local Time is: Fri Oct 18 17:47:29 2013 CDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
AKTUALIZACJA:
Uruchomiłem shred
na dysku, co spowodowało, że Current_Pending_Sector wyzerował się. Jednak Reallocated_Sector_Ct i Reallocated_Event_Count są nadal zerowe, a dd jest teraz w stanie zapisywać dane w sektorach, w których wcześniej nie był w stanie. To prowadzi mnie do kilku innych pytań:
Dlaczego przeniesienia nie są odtwarzane przez dysk? Zakładam, że realokacja nastąpiła, ponieważ mogę teraz zapisywać dane bezpośrednio w sektorze i wcześniej nie mogłem.
Dlaczego shred spowodował realokację, a nie dd? Czy fakt, że shred zapisuje losowe dane zamiast samych zer, ma znaczenie?
źródło
Uncorrectable Sector Count
więcej niż zero?Odpowiedzi:
Dysk WD15EARS (i większość innych ostatnio produkowanych dysków) korzysta z formatu zaawansowanego , co oznacza, że rzeczywisty rozmiar sektora fizycznego tego dysku wynosi 4 KiB, a tradycyjny rozmiar sektora 512-bajtowego jest po prostu emulowany. Z tego powodu, jeśli pojedynczy sektor fizyczny 4 KiB ulegnie awarii, wszystkie 8 odpowiadających emulowanych sektorów 512-bajtowych stanie się nieczytelnych naraz.
(Dane
Sector Size: 512 bytes logical/physical
wyjściowesmartctl
są niepoprawne, ponieważ niektóre dyski WD15EARS zgłaszają nieprawidłowy rozmiar sektora fizycznego - najwyraźniej twój dysk ma wersję oprogramowania układowego, która jest zepsuta pod tym względem.)Co więcej, gdy zapisywany jest pojedynczy emulowany sektor 512-bajtowy, napęd Advanced Format faktycznie musi odczytać cały sektor fizyczny 4 KiB, zmienić odpowiadającą mu 512-bajtową część, a następnie zapisać cały sektor fizyczny na nośniku. Jeśli nośnik jest dobry, ta operacja odczytu-modyfikacji-zapisu powoduje jedynie znaczne spowolnienie w porównaniu z dyskiem z prawdziwymi 512-bajtowymi sektorami fizycznymi. Jeśli jednak sektor fizyczny 4 KiB jest zły i nie można go odczytać, każda operacja zapisu, która nie przepisuje sektora całkowicie, zakończy się niepowodzeniem. Z tego powodu nie można wymuszać realokacji sektorów na takich dyskach korzystających
dd
zbs=512 count=1
- należy użyć co najmniejbs=512 count=8
i upewnić się, że numer sektora wseek=
opcja jest wielokrotnością liczby 8. (Zakłada się, że zworka „Windows XP” nie jest zainstalowana, w przeciwnym razie należy również wziąć pod uwagę przesunięcie wyrównania dodane przez tę zworkę.)Innym powodem, dla którego wymuszanie ponownego przydzielenia
dd
może się nie powieść, jest to, że domyślnie Linux używa pamięci podręcznej w warstwie blokowej, aby uzyskać dostęp do urządzeń blokowych, co może powodować operacje odczytu, modyfikacji i zapisu w oprogramowaniu, co również nie powiedzie się, gdy napotkany zostanie nieczytelny sektor. Możesz dodaćoflag=direct
opcję pomijania tej pamięci podręcznej dla urządzenia określonego przezof=...
(istnieje równieżiflag=direct
opcja, która dotyczy urządzenia wejściowego).źródło
Musiałem to zrobić niedawno i stwierdziłem, że uruchamianie niszczenia na całym dysku działa bardzo dobrze. Chociaż niszczenie jest bezużyteczne zgodnie z przeznaczeniem, z wyjątkiem dyskietek, robi to, co jest wymagane, aby samoleczenie przebiegało na złych blokach.
źródło