9

У меня есть ноутбук Samsung с 30 ГБ ExpressCache SanDisk SSD, припаянный на основной плате. SSD умер (выдает множество ошибок, когда я пытаюсь получить к нему какой-то доступ), но он все еще проверяется при загрузке ядра, я вижу его раздел, единство Ubuntu показывает значок отключенного диска в ящике приложения, и что хуже всего, я не могу приостановить работу ноутбука , потому что отправка команды приостановки на устройство ssd не удалась. Я попытался передать параметр ядра sdb = noprobe, но, похоже, он давно устарел в ядре 3.8.0 (Ubuntu 13.04). Как я могу отключить устройство sata в последних ядрах?

3 ответа3

5

Я пошел и написал для вас патч ядра, в котором реализована возможность отключения одного диска во время загрузки, чтобы вам не нужно было отключать его в udev или ждать во время начальной загрузки.

http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch

Должно очень легко применяться ко многим ядрам (строка выше была добавлена 2013-05-21/v3.10-rc1 *, но может быть безопасно применена вручную без этой строки).

1

Здесь есть два решения: одно быстро применяется, хотя и решает проблему только частично, другое - полное, но требует от вас компиляции собственного ядра.

Правильный ответ - исправление ядра.

Робин Х. Джонсон написал патч для драйвера ядра 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 тоже, для хорошей меры.

0

Я исследовал это и нашел решение, которое можно довольно легко реализовать в Ubuntu. В дистрибутиве используется kmod, поэтому на этом и любом другом дистрибутиве, использующем kmod, должно работать следующее.

В зависимости от того, какой драйвер вы используете, вам нужно будет занести его в черный список, если вы хотите отключить все устройства SATA. Попробуйте lsmod | grep sata и выясните , какой драйвер (ы) вы используете. Затем в вашем /etc/modprobe.d/ создайте новый файл с echo blacklist (module) > blacklist.conf чтобы добавить его в черный список. Восстановите ваши initramfs с помощью mkinitramfs чтобы они вступили в силу. Перезагружать.

Кроме того, просто добавьте modprobe.blacklist=(module) в параметры вашего ядра.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .