Mam laptopa Samsung (Chronos S7) z jednego dysku twardego SATA na autobus ata:1
, który jest wykrywany jako /dev/sda
, na 8G na SSD ata:2
, /dev/sdb
i różnych innych urządzeń w pozostałej części interfejsu SATA.
Problem polega na tym, że jest dysk SSD
- wlutowany do płyty głównej (niewymienny)
- odpadł (po prostu podaje błędy we / wy dla dowolnej operacji)
- nie pojawia się w biosie (prawdopodobnie dlatego, że jest zepsuty)
Teraz ten dysk:
- opóźnia rozruch o trzy do pięciu minut, próbując sondować uszkodzony dysk, co jest denerwujące;
- ale najbardziej denerwujące jest to, że system nie zawiesza się z powodu
/dev/sdb
awarii.
Zauważ, że mogę żyć z opóźnieniem przy starcie --- martwi mnie to wznawianie / zawieszanie.
Pytanie więc brzmi: czy mogę powiedzieć kernelowi, aby unikał nawet sondowania urządzenia na ata: 2?
W starszym jądrze (<3.0), kiedy nadal byłem w stanie trochę zagłębić się w źródło, istniał parametr wiersza polecenia stylu hdb=ignore
, który zrobiłby tę sztuczkę.
Wypróbowałem wszystkie sztuczki zaproponowane poniżej z parametrami jądra udev
i libata:force
bezskutecznie. W szczególności następujące funkcje nie działają:
Dodanie do jednego z poniższych
/etc/udev/rules.d/
plików (we wczesnym wykonaniu, jak00-ignoredisk.rules
lub późno, jak99-ignoredisk.rules
w obu miejscach)SUBSYSTEMS=="scsi", DRIVERS=="sd", ATTRS{rev}=="SSD ", ATTRS{model}=="SanDisk iSSD P4 ", ENV{UDISKS_IGNORE}="1"
ani
KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
ani wiele rozwiązań pośrednich --- powoduje to, że dysk nie jest dostępny po rozruchu, ale jest sprawdzany podczas rozruchu i nadal sprawdzany podczas zawieszania --- powodując awarię zawieszenia.
Edycja plików systemowych
/lib/udev/rules.d/60-persistent-storage.rules
(iudisks
,udisks2
) zmianaKERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md", GOTO="persistent_storage_end"
do
KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md|sdb*", GOTO="persistent_storage_end"
znowu ma to pewien efekt, maskując dysk z przestrzeni użytkownika, ale dysk jest nadal widoczny dla jądra.
Uruchamianie ze wszystkimi możliwymi kombinacjami (cóż, wiele z nich)
libata:force
parametrów (znalezionych na przykład tutaj ) w celu wyłączenia DMA, niższej prędkości lub cokolwiek innego o uszkodzonym dysku --- nie działa. Ten parametr jest używany, ale dysk jest nadal sondowany i nie działa.Pełna
udevadm info -a -n /dev/sdb
wklejona na http://paste.ubuntu.com/6186145/smartctl -i /dev/sdb -T permissive
daje:root@samsung-romano:/home/romano# smartctl -i /dev/sdb -T permissive smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-31-generic] (local build) Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net Vendor: /1:0:0:0 Product: User Capacity: 600,332,565,813,390,450 bytes [600 PB] Logical block size: 774843950 bytes >> Terminate command early due to bad response to IEC mode page
co jest wyraźnie błędne. Niemniej jednak:
root@samsung-romano:/home/romano# fdisk -b 512 -C 970 -H 256 -S 63 /dev/sdb fdisk: unable to read /dev/sdb: Input/output error
(Dane SSD z http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 ).
źródło
/etc/fstab
? Ponieważ opóźnienie przy rozruchu może być spowodowane wcześniej przez jądro lub udev, co wydaje się, że tak jest, ale także później przez fsck podczas czytaniafstab
.Odpowiedzi:
libata
w ogóle nie ma opcji noprobe; to była starsza opcja IDE ...Ale poszedłem i napisałem dla ciebie łatkę na jądro , która ją implementuje. Powinien bardzo łatwo stosować się do wielu jąder (linia powyżej została dodana 2013-05-21 / v3.10-rc1 *, ale może być bezpiecznie stosowana ręcznie bez tej linii).
Aktualizacja Łata jest teraz w górę (przynajmniej w stabilnym jądrze 3.12.7). Znajduje się w standardowym jądrze rozpowszechnianym z Ubuntu 14.04 (opartym na wersji 3.13-stabilnej).
Po zainstalowaniu poprawki dodawanie
do parametrów rozruchowych jądra ukryje dysk przed jądrem Linux. Sprawdź dokładnie, czy numer jest poprawny; wyszukiwanie nazwy urządzenia może pomóc (oczywiście przed dodaniem parametrów rozruchowych należy sprawdzić komunikaty jądra ):
Ważna liczba to
ata2.00
pierwsza linia powyżej.źródło
Problemy sprzętowe mają fizyczne rozwiązanie sprzętowe. Czy zastanawiałeś się nad odlutowaniem lub odcięciem zasilania napędu?
EDYCJA: Ok, jeśli nie jest to opcja, ludzie używają tego do podłączania dysku twardego na gorąco. Możesz go użyć do wyłączenia dysku.
Zauważ, że jakikolwiek inny proces może wymusić skanowanie szyny SATA, a następnie sprawi, że wróci. Spróbuj to zrobić tuż przed hibernacją laptopa.
Edytowane przez OP: działało . Dodałem następujący plik:
z treścią:
... a teraz system poprawnie zawiesza (i wznawia).
źródło
delete
.BIOS
Czy to urządzenie nie wyświetla się w żaden sposób przez BIOS?
Często HDD są konfigurowane w trybie „automatycznym”, przechodzę przez i upewniam się, że urządzenia te są w stanie wyłączonym, a nawet przechodzę do zakresu jawnego włączania tylko jednego HDD i wyłączania wszystkiego innego.
Opcje uruchamiania jądra
Często można wyłączyć automatyczne wykrywanie różnych podsystemów przez uruchamianie jądra systemu Linux za pomocą różnych opcji uruchamiania, które można mu przekazać jako przełączniki.
Większość, jeśli nie wszystkie opcje są wymienione tutaj:
Linux w książce Nutshell
Możesz przejrzeć książkę O'Reilly, Linux Kernel in a Nutshell , a konkretnie rozdział 7: Dostosowywanie jądra .
Ta książka jest dostępna bezpłatnie przez jej autora, Grega Kroah-Hartmana, na jego osobistej stronie internetowej. Całą książkę można również pobrać.
źródło
noide=....
. Istnieje wiele innych opcji, które można podać w jądrze rozruchowym, aby wyłączyć automatyczne wykrywanie sprzętu.hdb=noprobe
opcje nie przeszły do scsi (myślę, że zostało wyeliminowane około 2.6.x), więc nie istnieje (jak tylko się dowiem) asdb=noprobe
lubata:2=noprobe
opcję. Przeczytałem (prawie) całykernel-parameters.txt
plik w źródle jądra i nie mogę znaleźć poprawnego parametru. Jeśli kogoś znasz, powiedz to w odpowiedzi --- Będę naprawdę wdzięczny.libata.dma=
Sposób sprawdzania blokady przez Linux:
sudo hdparm -I /dev/sdX
(przy X = a..z; oczywiście musisz wiedzieć, jakie urządzenie jest twoim dyskiem). Na koniec (big) wyjścia, trzeba być w stanie odczytać na w ciągu ostatnich 10 linii:*not* locked
.źródło