У меня есть ноутбук Samsung с 30 ГБ ExpressCache SanDisk SSD, припаянный на основной плате. SSD умер (выдает множество ошибок, когда я пытаюсь получить к нему какой-то доступ), но он все еще проверяется при загрузке ядра, я вижу его раздел, единство Ubuntu показывает значок отключенного диска в ящике приложения, и что хуже всего, я не могу приостановить работу ноутбука , потому что отправка команды приостановки на устройство ssd не удалась. Я попытался передать параметр ядра sdb = noprobe, но, похоже, он давно устарел в ядре 3.8.0 (Ubuntu 13.04). Как я могу отключить устройство sata в последних ядрах?
3 ответа
Я пошел и написал для вас патч ядра, в котором реализована возможность отключения одного диска во время загрузки, чтобы вам не нужно было отключать его в udev или ждать во время начальной загрузки.
http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch
Должно очень легко применяться ко многим ядрам (строка выше была добавлена 2013-05-21/v3.10-rc1 *, но может быть безопасно применена вручную без этой строки).
Здесь есть два решения: одно быстро применяется, хотя и решает проблему только частично, другое - полное, но требует от вас компиляции собственного ядра.
Правильный ответ - исправление ядра.
Робин Х. Джонсон написал патч для драйвера ядра SATA (его можно найти на сайте обмена стеками Unix/Linux), который полностью скрывает диск.
Обновление Патч теперь в апстриме (по крайней мере, в стабильном ядре 3.12.7), см. Репозиторий git. Я попросил backport в панели запуска Ubuntu.
После установки патча добавим
libata.force=2.00:disable
к параметрам загрузки ядра будет спрятан диск от ядра Linux. Дважды проверьте правильность номера; поиск имени устройства может помочь:
(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
Временное решение
Ответ от пользователя Unix StackExchange Эммануэля в https://unix.stackexchange.com/a/103742/52205
Вы можете по крайней мере решить проблему приостановки, выполнив команду
echo 1 > /sys/block/sdb/device/delete
до приостановки.
Для автоматизации я добавил следующий файл: (обратите внимание на флаги, он должен быть исполняемым)
-rwxr-xr-x 1 root root 204 Dec 6 16:03 99_delete_sdb
в каталоге /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
... и теперь система приостанавливает (и возобновляет) правильно. Я добавил фрагмент
if [ -d /sys/block/sdb ]; then
echo Deleting device sdb
echo 1 > /sys/block/sdb/device/delete
fi
для /etc/rc.local
тоже, для хорошей меры.
Я исследовал это и нашел решение, которое можно довольно легко реализовать в Ubuntu. В дистрибутиве используется kmod, поэтому на этом и любом другом дистрибутиве, использующем kmod, должно работать следующее.
В зависимости от того, какой драйвер вы используете, вам нужно будет занести его в черный список, если вы хотите отключить все устройства SATA. Попробуйте lsmod | grep sata
и выясните , какой драйвер (ы) вы используете. Затем в вашем /etc/modprobe.d/
создайте новый файл с echo blacklist (module) > blacklist.conf
чтобы добавить его в черный список. Восстановите ваши initramfs с помощью mkinitramfs
чтобы они вступили в силу. Перезагружать.
Кроме того, просто добавьте modprobe.blacklist=(module)
в параметры вашего ядра.