Dwa rozwiązania tutaj: jedno jest szybkie do zastosowania, chociaż rozwiązuje problem tylko częściowo, drugie jest kompletne, ale wymaga skompilowania własnego jądra.
Prawidłowa odpowiedź to łatka na jądro.
Robin H. Johnson napisał łatkę do sterownika jądra SATA ( znajdź go na stronie wymiany stosów Unix / Linux ), która całkowicie ukrywa dysk.
Aktualizacja Łata jest teraz w górę (przynajmniej w stabilnym jądrze 3.12.7), zobacz repozytorium git . Poprosiłem o backport w starterze Ubuntu .
Po zainstalowaniu poprawki dodawanie
libata.force=2.00:disable
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:
(0)samsung-romano:~% dmesg | grep iSSD
[ 1.493279] ata2.00: ATA-8: SanDisk iSSD P4 8GB, SSD 9.14, max UDMA/133
[ 1.494236] scsi 1:0:0:0: Direct-Access ATA SanDisk iSSD P4 SSD PQ: 0 ANSI: 5
Obejście
Odpowiedzi udzielił użytkownik Unix StackExchange Emmanuel w https://unix.stackexchange.com/a/103742/52205
Możesz przynajmniej rozwiązać problem z zawieszeniem, wydając polecenie
echo 1 > /sys/block/sdb/device/delete
przed zawieszeniem.
Aby go zautomatyzować, dodałem następujący plik: (zwróć uwagę na flagi, musi być wykonywalny)
-rwxr-xr-x 1 root root 204 Dec 6 16:03 99_delete_sdb
w katalogu /etc/pm/sleep.d/
#!/bin/sh
# Tell grub that resume was successful
case "$1" in
suspend|hibernate)
if [ -d /sys/block/sdb ]; then
echo Deleting device sdb
echo 1 > /sys/block/sdb/device/delete
fi
;;
esac
... a teraz system poprawnie zawiesza (i wznawia). Dodałem fragment kodu
if [ -d /sys/block/sdb ]; then
echo Deleting device sdb
echo 1 > /sys/block/sdb/device/delete
fi
do /etc/rc.local
zbyt, na dokładkę.
99_delete_sdb
plik wykonywalny? W/etc/rc0.d/
może być?Poszedłem i napisałem dla ciebie łatkę do jądra, która implementuje możliwość wyłączenia pojedynczego dysku w czasie uruchamiania, abyś nie musiał zawracać sobie głowy wyłączaniem go w udev lub czekaniem podczas pierwszego uruchomienia.
http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch
Powinien być zastosowany do wielu jąder bardzo łatwo (linia powyżej została dodana 2013-05-21 / v3.10-rc1 *, ale można go bezpiecznie zastosować ręcznie bez tej linii).
źródło
sdb=disable
jako parametr jądra).grep iSSD /var/log/syslog
powinno dać podpowiedź).Zbadałem to i znalazłem rozwiązanie, które można dość łatwo wdrożyć na Ubuntu. Dystrybucja używa kmod, więc poniższe powinny działać dobrze na tej i każdej dystrybucji korzystającej z kmod.
W zależności od używanego sterownika musisz go umieścić na czarnej liście , jeśli chcesz wyłączyć wszystkie urządzenia SATA. Spróbuj
lsmod | grep sata
dowiedzieć się, jakich sterowników używasz. Następnie/etc/modprobe.d/
utwórz nowy plik,echo blacklist (module) > blacklist.conf
aby dodać go do czarnej listy. Odbuduj swoje initramfs, aby zadziałałomkinitramfs
. Restart.Alternatywnie, po prostu dodaj
modprobe.blacklist=(module)
do parametrów jądra.źródło