Dlaczego uszkodzone dyski twarde zamrażają cały system?

128

Dlaczego dysk twardy, o którym wiadomo, że ma złe bloki (sprawdzone w HDTune i HDDScan), zawiesza cały mój system?

To nie jest dysk systemu operacyjnego; jest podłączony do innego portu SATA i próbuję skopiować z niego pliki na inny zdrowy dysk.

Wystąpił ten problem z prawie każdym uszkodzonym dyskiem twardym i każdym komputerem z systemem Windows.

Spodziewałbym się, że zawiesi się tylko w przypadku programu, którego używam do kopiowania plików (Eksplorator Windows itp.), Ale zamiast tego cały mój komputer się popada i nie mogę przeglądać stron internetowych ani oglądać filmów podczas kopiowania plików z uszkodzonego dysku.

Długa historia

Mieszkam na wsi, gdzie występują problemy z elektrycznością (przerwy w dostawie prądu itp.). Ja sam korzystam z zasilacza UPS, a moje dyski twarde są całkowicie w porządku. Ale moi sąsiedzi często proszą o pomoc w problemach z komputerem i często stwierdzam, że dyski twarde są uszkodzone, najprawdopodobniej z powodu problemów z elektrycznością. Oczywiście po wymianie uszkodzonego napędu sugeruję moim sąsiadom zakup UPS.

Zawsze zastanawiałem się, dlaczego mój komputer całkowicie zawiesza się podczas pobierania danych z uszkodzonych dysków. Czy to problem sprzętowy? Czy jest to spowodowane sposobem, w jaki system operacyjny odczytuje dane? Czy jest to coś specyficznego dla systemu Windows i nie zobaczę go na * nix?

W każdym razie, od teraz będę używać specjalnego oprogramowania (takiego jak Unstoppable Copier Roadkila) zamiast Eksploratora Windows, chociaż nie jestem pewien, czy to zadziała inaczej, bez zamrażania całego komputera.

To nie jest prośba o pomoc, ale raczej w celach edukacyjnych, więc wiem, dlaczego rzeczy działają w ten sposób.

JustAMartin
źródło
11
Korzystanie z zewnętrznej obudowy USB powinno pomóc, ponieważ nie przywiązujesz już uszkodzonego dysku do kontrolera SATA w systemie (również dodanie dodatkowej warstwy sprzętu do poświęcenia między płytą główną a uszkodzonym dyskiem jest zawsze dobrym pomysłem).
Matteo Italia,
3
Nie jest to specyficzne dla SATA, dyski IDE również to zrobiły. Również fakt, że dysk jest uszkodzony, nie oznacza, że ​​kontroler nie jest uszkodzony, zwłaszcza jeśli uszkodzenie elektryczne spowodowało uszkodzenie dysku.
Chris H
Przyjęta odpowiedź jest niesamowita i zawiera to, co chciałem powiedzieć, i wiele więcej. Zasadniczo panikujesz kontrolerem SATA, który jest bardzo ważnym urządzeniem systemowym, które z kolei wpada w panikę w systemie Windows. Zastanawiam się, czy włączenie AHCI / „hot-swap” w BIOS-ie poprawiłoby sytuację.
Arthur Kay,

Odpowiedzi:

170

Jest to jeden z tych obszarów, w których SATA jest nieoptymalny. Problem występuje na poziomie protokołu połączenia urządzenia pamięci masowej, a zatem nie jest związany z używanym oprogramowaniem. Użycie innej kopiarki plików lub innego systemu operacyjnego nie poprawi magicznie sytuacji, z wyjątkiem tego, że może próbować ustawić różne wartości limitu czasu w celu zmniejszenia wpływu problemu (co może, ale nie musi być możliwe, w zależności od sprzętu i oprogramowania układowego; patrz poniżej ).

Jest tu kilka ważnych punktów:

  1. W przypadku SATA, jeśli dysk przestaje reagować, może to wiązać się z całym systemem pamięci masowej, a nie tylko z jednym dyskiem, który ma problemy. Z pewnością ma potencjał do połączenia całego kontrolera, a ponieważ większość systemów konsumenckich ma tylko jeden kontroler dysku (ten zintegrowany z płytą główną), oznacza to całą pamięć. Gorzej, jeśli dysk ulegnie awarii w jakiś niestandardowy i / lub nieoczekiwany sposób, co z pewnością może się zdarzyć, jeśli dysk jest marginalny. Być może zainteresuje Cię, w jaki sposób pojedynczy dysk w sprzętowej macierzy SATA RAID-10 może zatrzymać całą macierz? na błąd serwera.
  2. Większość dysków SATA dla konsumentów ma długie domyślne limity czasu (rzędu minut), a wiele dysków SATA dla konsumentów nie ma konfigurowalnej kontroli odzyskiwania po błędzie . Tak zwane dyski „NAS” często mają konfigurowalny ERC, a dyski wysokiej klasy praktycznie zawsze mają; takie dyski mogą również mieć krótsze limity czasu domyślnego (7 sekund to wspólna wartość). Długie czasy oczekiwania są korzystne, jeśli dysk zawiera jedyną kopię danych, co niestety jest powszechne w systemach konsumenckich; są wadą w konfiguracji redundantnej lub gdy po prostu chcesz uzyskać jak najwięcej z dysku, zanim ulegnie on dalszemu pogorszeniu.
  3. Dysk będzie próbował odczytać uszkodzony sektor, dopóki nie osiągnie progu limitu czasu lub dopóki host nie zasygnalizuje przerwania. Ponieważ magistrala SATA może zostać związana przez oczekiwanie na zakończenie odczytu, system operacyjny może nie zasygnalizować przerwania polecenia na poziomie pamięci, aw skrajnych przypadkach dyski mogą nawet nie reagować dobrze na reset magistrali SATA w takiej sytuacji.

Punkt 1 jest jednym z głównych punktów sprzedaży SAS na serwerach; SAS ma znacznie lepszą obsługę błędów niż SATA. Punkt # 2 jest ograniczeniem oprogramowania układowego napędu, a # 3 staje się problemem tak naprawdę tylko z powodu # 2.

Tak więc dzieje się tak, że system operacyjny wydaje polecenie „odczytu sektorów” na dysk, a poszczególne sektory są w jakiś sposób uszkodzone. Tak więc dysk przechodzi w tryb ponownej próby, aby spróbować usunąć dane z talerzy, próbując odczytywać raz za razem, aż otrzyma wystarczająco dobre dane, aby własna korekcja błędów dysku ( FEC ) mogła naprawić pozostałe błędy. Jeśli masz pecha, może się to nie udać, ale dysk będzie próbował przez dość długi czas, zanim zdecyduje, że ten odczyt nie powiedzie się.

Ponieważ system operacyjny czeka na odczyt, spowoduje to przynajmniej spowolnienie procesu kopiowania do przeszukiwania, a w zależności od dokładnej architektury systemu operacyjnego może spowodować, że system operacyjny ulegnie szarpnięciu lub nawet zawiesi się na czas trwania. Dysk w tym momencie jest zajęty pierwotnym odczytem i nie będzie odpowiadał na dalsze polecenia odczytu, dopóki aktualnie wykonywane polecenie nie zakończy się (pomyślnie lub nie), a inne oprogramowanie na ogół nie poradzi sobie lepiej niż system operacyjny działa na.

Dlatego wszystko, co uruchamia odczyt w innym miejscu ( najlepiej tylko na uszkodzonym dysku), będzie musiało czekać w kolejce, aż uszkodzony dysk albo odczyta dany sektor, albo stwierdzi, że nie można go odczytać. Z powodu mniej niż optymalnej obsługi dysków nieodpowiadających przez SATA, może to oznaczać, że nie tylko dysk, z którego kopiujesz, będzie miał opóźnione operacje we / wy. Może to bardzo łatwo spowodować spowolnienie lub brak reakcji innego oprogramowania, ponieważ oprogramowanie to czeka na zakończenie innego żądania We / Wy, nawet jeśli system operacyjny jest w stanie sobie z tym poradzić.

Należy również zauważyć, że dyskowe operacje we / wy mogą się zdarzyć, nawet jeśli nie masz bezpośredniego dostępu do żadnych plików na dysku. Dwie główne przyczyny tego to kod wykonywalny typu ładuj na żądanie i zamiana. Ponieważ zamiana jest czasem używana nawet wtedy, gdy system nie jest obciążony pamięcią, a kod wykonywalny ładowania na żądanie jest powszechny w nowoczesnych systemach i przy nowoczesnych formatach plików wykonywalnych, niezamierzone działanie odczytu dysku podczas normalnego użytkowania jest bardzo realną możliwością.

Jak wskazano w komentarzu do pytania Matteo Italia , jedną ze strategii ograniczających ryzyko jest użycie innego interkonektu pamięci, co jest skomplikowanym sposobem powiedzenia „włóż dysk do obudowy USB”. Po wyodrębnieniu za pomocą protokołu pamięci masowej USB izoluje to problematyczną część SATA od reszty systemu, co oznacza, że teoretycznie tylko we / wy na tym konkretnym dysku powinny mieć wpływ problemy we / wy na tym dysku.

Nawiasem mówiąc, jest to prawie to, dlaczego SATA (szczególnie SATA bez ERC na poziomie dysku) jest często odradzana dla RAID (szczególnie poziomy RAID z redundancją, które wśród standardowych są wszystkie oprócz RAID 0 ); długie limity czasu i słaba obsługa błędów mogą z łatwością spowodować wyrzucenie całego urządzenia z macierzy dla pojedynczego uszkodzonego sektora, co kontroler RAID poradziłby sobie dobrze, jeśli istnieje nadmiarowość, a kontroler pamięci po prostu wie, że to jest problem. SAS został zaprojektowany z myślą o dużych macierzach pamięci, a zatem z oczekiwaniem, że czasami pojawią się problemy na różnych dyskach, co doprowadziło do tego, że zaprojektowano go tak, aby z wdziękiem obsługiwał przypadek pojedynczego problematycznego dysku lub żądania We / Wynawet jeśli dysk nie. Dyski problematyczne nie są bardzo powszechne w systemach konsumenckich, ponieważ zazwyczaj nie mają wielu zainstalowanych dysków, a te, które są instalowane, praktycznie nigdy nie mają redundancji; ponieważ SATA miała na celu zastąpienie PATA / IDE, a nie SCSI (ten drugi jest niszowym celem SAS), prawdopodobne jest, że jego funkcje obsługi błędów i wymagania (lub gwarancje) zostały uznane za odpowiednie do zamierzonego zastosowania.

CVn
źródło
19
Dzięki za opublikowanie rozsądnej odpowiedzi wyjaśniającej, co się dzieje. Jest to pytanie, na które zwykle widzę niejasne odpowiedzi, takie jak „ponieważ system czeka na napęd” lub „ponieważ jest tak zaprojektowany”.
Mehrdad,
4
@kasperd: Całkiem. Chociaż część tego jest również „błędem” systemu Windows, ponieważ może się to zdarzyć równie łatwo z wieloma kontrolerami. IMO ta odpowiedź jest nieco celowo niejasna , ponieważ kontrolery korporacyjnych SAS również nie są odporne na ten problem. To naprawdę sprowadza się do pewnych blokujących żądań We / Wy. Niektóre operacje na dysku twardym wymagają ukończenia operacji X przed operacją Y, a jeśli X nigdy się nie zakończy, Y nigdy się nie rozpocznie - i wszystko po tym, jak Y również utknie, bez względu na to, czy napęd, kontroler, sterownik lub system operacyjny jest na wina.
qasdfdsaq,
2
@JustAMartin Właściwie to już prawie wszystko asynchronizuje - każde urządzenie peryferyjne obsługujące DMA jest obecnie asynchroniczne; jądro planuje tylko żądania i obsługuje przerwania, które sygnalizują, że żądanie zostało wykonane. Problem polega na tym, że czasami musisz poczekać na zakończenie operacji - a podczas tego procesu mogą zablokować coś ważnego. Jak zauważył użytkownik 20574, pamięć wirtualna jest jedną z nich, ale jest wiele rzeczy, które wymagają pewnych gwarancji. Niektóre części jądra nie są asynchroniczne i oczywiście niektóre sterowniki / urządzenia są po prostu do bani.
Luaan,
2
@ MichaelKjörling „Ponieważ system operacyjny czeka na odczyt, to przynajmniej spowolni proces kopiowania do przeszukiwania, a w zależności od dokładnej architektury systemu operacyjnego może spowodować, że system operacyjny będzie się szarpał lub nawet zawiesił na czas trwania”. - Dlaczego dokładnie system operacyjny staje się gwałtowny w przypadku odczytu z dodatkowego (niesystemowego) napędu? Problem nie może być całkowicie spowodowany zachowaniem kontrolera SATA w zakresie obsługi błędów. Myślę, że ta odpowiedź mogłaby skorzystać z informacji o tym, jak system Windows obsługuje błędy w podsystemie dyskowym.
Jordan Rieger,
1
@ MichaelKjörling Wystarczająco uczciwy. Odpowiedź zawiera wiele dobrych informacji, ale myślę, że nie do końca wyjaśnia konkretny scenariusz PO. Aby spojrzeć na to z innej strony, czy możesz przytoczyć odniesienie do punktu 1: „W przypadku SATA, jeśli dysk przestaje reagować, może to wiązać się z całym systemem pamięci masowej, a nie tylko z jednym dyskiem, który ma problemy Z pewnością ma potencjał, by związać cały kontroler ”. ? To wygląda na okropny projekt. Czy to nie podsystem dyskowy systemu operacyjnego jest bardziej prawdopodobnym winowajcą? Oznacza to, że kontroler jest asynchroniczny, ale sterownik systemu operacyjnego czasami blokuje niepotrzebnie.
Jordan Rieger,
3

Jak wspomniano powyżej, problem z zawieszaniem się systemu z powodu wadliwego dysku twardego wynika przede wszystkim z długich prób odzyskania przez system nieczytelnych danych z uszkodzonych sektorów. Jedną z zalet sprzedaży dysków dla przedsiębiorstw jest bardzo krótki czas oczekiwania na awarie sektorów. Korzystanie z dysku korporacyjnego może w pewnym stopniu złagodzić problemy, ale ich nie rozwiąże.

Najlepszym rozwiązaniem, idącym naprzód, jest utrzymywanie odpowiednich kopii zapasowych, aby odzyskiwanie nie było wymagane. Zmiana oprogramowania do odzyskiwania nie ma znaczenia, ponieważ jest to problem z przekroczeniem limitu czasu oprogramowania układowego.

John Pace II
źródło
2

Dlaczego uszkodzone dyski twarde zamrażają cały system?

Nie muszą (ogólnie). To zależy od konkretnego systemu plików, w jaki sposób rozwiązywana jest awaria dysku.

Zastanów się nad ZFS, który został zaprojektowany od podstaw, aby radzić sobie z dość dużą odpornością na uszkodzenia. Oto wideo demonstracyjne (i bardziej wyjaśniające ), w którym umieszczają napędy na kowadle, huśtają się młotkiem i wiercą inny napęd. Przez cały czas ZFS działa.

Jens
źródło
2
W rzeczywistości istnieją awarie dysków, z którymi ZFS nie radzi sobie dobrze. Na przykład bardzo długie odczyty przed przekroczeniem limitu czasu żądania We / Wy w konfiguracjach redundantnych lub nie redundantnych. (Równie łatwo można skonfigurować ZFS w taki sposób, aby nie miał nadmiarowości.) Może to łatwo doprowadzić do wyrzucenia dysków z tablicy w ZFS, co jeśli spadnie poniżej progu nadmiarowości, może spowodować, że cała tablica stają się niedostępne. Jeśli ustawione z failmode = wait, może to pokazać podobne wyniki. Całkowita awaria pełnego dysku jest łatwym przypadkiem dla dowolnego podsystemu pamięci; to marginalne dyski, które stwarzają problemy.
CVn
I zanim pomyślisz inaczej, faktycznie sam uruchamiam ZFS (prawie wyłącznie). To świetny system plików i wspaniały menedżer woluminów, jeśli jesteś ostrożny i wiesz, co robisz. Jest jednak przeznaczony dla systemów klasy korporacyjnej (wysokiej klasy stacje robocze i serwery), a administratorzy płacą za to, co robią. Nie jest przeznaczony do radzenia sobie z niektórymi trybami awarii występującymi w sprzęcie towarowym, w tym z problemami z pamięcią RAM i dyskami, które zwracają zbyt dużo czasu z żądania We / Wy, i nie jest zaprojektowany z myślą o łatwości użycia dla użytkowników domowych lub w przypadki użycia przez użytkowników domowych.
CVn
Z wyjątkiem filmu wideo ZFS nie działa. Zaczyna działać ponownie po odłączeniu napędu.
Christoffer Hammarström,
-2

Myślę, że problemem, który napotykasz, jest niskopoziomowa część systemu operacyjnego, która wiele razy próbuje odczytać uszkodzone bloki przed poddaniem się. Ta procedura jest implementowana na niskim poziomie w przypadku, gdy jest potrzebna podczas rozruchu lub innej samodzielnej operacji, a zatem trudno jest ją ponownie uruchomić. System operacyjny będzie ciągle wyświetlał strony podczas normalnego działania i trudno jest nadać priorytet konkurującym żądaniom, ponieważ system niskiego poziomu nie będzie wiedział o priorytecie procesu, który jest właścicielem żądania stronicowania.

jrrk
źródło
6
„System niskiego poziomu” nie wiem priorytet procesu, który żąda strony; takie informacje są przechowywane w tabelach stron , choć implementacja zależy od systemu, w jaki sposób obsługiwany jest priorytet. To nie jest poprawna odpowiedź na to pytanie - jest to problem sprzętowy, a nie system operacyjny.
Chris Cirefice,
1
Myślę, że poprawną odpowiedzią na to pytanie jest odmowa użycia wadliwego napędu. Nie zaspokoi to jednak użytkowników, którzy - co zrozumiałe - chcą odzyskać jak najwięcej danych.
jrrk