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.