Як відключити зондування ядра для диска?


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 . Я попросив підтримку в запуску 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 Emmanuel у 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/може бути?
Сергій Мелехін

Вибачте --- додано відповідну інформацію.
Рмано

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.force = ID: відключити, де ідентифікатор - це число або number.number кортеж, що ідентифікує відповідний диск.
robbat2

Не знаю, чи актуальні ці інструкції: wiki.ubuntu.com/Kernel/BuildYourOwnKernel . Я спробую, якщо зможу цього тижня ...
Рмано

До речі, у випадку з ноутбуком Samsung команда, ймовірно, повинна бути "libata.force = 2,00: відключити" ( grep iSSD /var/log/syslogмає дати вам підказку).
Рмано

1
FYI, вона об'єднана з ядром на 3,13, а також з стабільним деревом ядра. Варіант, який можна відключити, проте НЕ прийнятий.
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.