Как отключить проверку ядра на диске?


9

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

Ответы:


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тоже для хорошей меры.


Спасибо @Rmano, эхо работает. Но неясно, куда мне поместить 99_delete_sdbисполняемый файл? В /etc/rc0.d/может быть?
Сергей Мелехин

Извините --- добавил соответствующую информацию.
Rmano

5

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

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

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


1
Спасибо за ваши старания. Возможно, вы можете прокомментировать (для тех, кто не очень знаком с патчами ядра), как применить патч и как его использовать (возможно, в sdb=disableкачестве параметра ядра).
mpy

1
kernel.org/doc/Documentation/applying-patches.txt описывает применение исправлений ядра в целом, но во многих дистрибутивах есть специальные методы применения исправлений. Этот патч более конкретно реализует флаг принудительного отключения для libata. Пользователю нужно будет использовать его с libata.force = ID: отключить, где ID - это кортеж число или число.номер, идентифицирующий рассматриваемый диск.
robbat2

Я не знаю, актуальны ли эти инструкции: wiki.ubuntu.com/Kernel/BuildYourOwnKernel . Я постараюсь, если смогу на этой неделе ...
Rmano

Кстати, в случае с ноутбуком Samsung команда, вероятно, должна быть «libata.force = 2.00: disable» ( grep iSSD /var/log/syslogдолжна дать вам подсказку).
Rmano

1
К вашему сведению, это объединено с ядром для 3.13, а также со стабильным деревом ядра. Однако вариант Nodisable НЕ был принят.
robbat2

0

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

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

Поочередно, просто добавьте modprobe.blacklist=(module)в ваше ядро ​​параметры.


1
Он отключит все устройства sata, включая жесткий диск, поэтому мой ноутбук больше не будет загружаться. И поддержка sata скомпилирована в ядро ​​(не как модуль), поэтому я не могу внести его в черный список.
Сергей Мелехин

Хорошо, тогда просто откройте свой ноутбук и извлеките диск ...
Гектор

К сожалению, я не достаточно компетентен, чтобы сделать это - он припаян на мэйнборде, а не подключен через кабель sata. Я даже не уверен, что ноутбук будет функционировать, если я просто уберу его.
Сергей Мелехин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.