Як я можу сказати ядро ​​Linux повністю ігнорувати диск, як би він навіть не був підключений?


18

Зауважте

Будь ласка, прокрутіть вниз відповідь (у неї є кілька пунктів, але це правильний). Проблема вирішується патчем, який буде в ядрі 3.12.7 і вище; Я сподіваюсь, що це буде перенесено на попередні.

Мій ноутбук - це серія 7. Chronos Samsung 7. Ubuntu Gnome Remix 13.04, з оновленими драйверами Intel.

У мене проблема з внутрішнім накопичувачем SSD (ємністю 8G). Він не працює з COMRESET і помилками вводу / виводу. Я цілком переконаний, що проблема полягає в апаратному забезпеченні; на жаль, у мене на ноутбуці не встановлена ​​Windows, щоб перевірити, чи це питання конфігурації SSD чи іншого.

Проблема полягає в тому, що диск розпізнається udev:

KERNEL[9.515930] add      /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb (block)
ACTION=add
DEVNAME=sdb
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
DEVTYPE=disk
MAJOR=8
MINOR=16
SEQNUM=1785
SUBSYSTEM=block
UDEV_LOG=3

і після цього він виходить з ладу в багатьох перевірок, затримка завантаження, затримка вимкнення і робить (я думаю) призупинення неможливим.

Чи можна сказати Linux повністю ігнорувати що-небудь на посиланні ata2? Я спробував додати цей рядок до /etc/udev/rules.d/10-local.rules

SUBSYSTEMS=="pci"  DRIVERS=="ahci" KERNELS=="ata2" OPTIONS=="ignore_device"

але це не працює.

З іншого боку, якщо хтось знає, як скинути SSD, якщо він був залишений в режимі "кеш" без використання Windows ... або для завантаження "живих" Windows, щоб зробити те саме ...

Спасибі!

Дані додано:

Повне udevadm info -a -n /dev/sdbвставлено на http://paste.ubuntu.com/6186145/

smartctl -i /dev/sdb -T permissive дає:

root@samsung-romano:/home/romano# smartctl -i /dev/sdb -T permissive
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-31-generic] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net

Vendor:               /1:0:0:0
Product:              
User Capacity:        600,332,565,813,390,450 bytes [600 PB]
Logical block size:   774843950 bytes
>> Terminate command early due to bad response to IEC mode page

що явно неправильно. Тим не менш:

root@samsung-romano:/home/romano# fdisk -b 512 -C 970 -H 256 -S 63 /dev/sdb
fdisk: unable to read /dev/sdb: Input/output error

(Дані SSD з http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 ).

ДОПОМОГА

Чи все це може бути побічним ефектом від того, що технологія Intel Smart Response не буде відключена перед установкою Linux? Якщо так, то як я можу перевірити це, як не встановити вікно на машині? Або це постріл у темряві? (У біографії SSD-накопичувач не відображається, і про Intel SRT немає нічого).

ПРО МАРКУВАННЯ ЯК ДУПЛІКАТ:

Я змінив назву питання; Я не думаю, що пов'язане питання відповідає на мою проблему. Я позитивно знаю, що SSD виходить з ладу. Я запитую, чи можна сказати ядро ​​Linux, щоб він взагалі не зондував.


2
Якщо диск, який ви хочете приховати, є "sdb", можете, будь ласка, опублікувати повний вихід "udevadm info -a -n / dev / sdb" ?.
Роман Рагет

1
Це зовсім не дублікат пов'язаного питання. Не могли б ви позначити його як дублікат? Я змінив назву, щоб краще передати питання. Не про перевірку SSD, це про загальне питання управління дисками в Linux. Спасибі!
Рмано

1
У чому проблема лише з ... відключенням диска?
Браям

1
Аналогічне запитання щодо Super User: Як відключити зондування ядра для диска?
ændrük

3
Брайам: диск SSD припаяний до материнської плати.
Рмано

Відповіді:


14

Тут є два рішення: одне швидко застосовується, хоча вирішує проблему лише частково, інше - повне, але вимагає складання власного ядра.

Правильна відповідь - це патч ядра.

Робін Х. Джонсон написав патч для драйвера ядра SATA ( знайдіть його на сайті обміну стеками Unix / Linux ), який повністю приховує диск.

Оновлення 1 Патч тепер знаходиться за течією (принаймні в стабільному ядрі 3.12.7), див . Сховище git . Я попросив підтримку в запуску Ubuntu .

Оновлення 2 Патч знаходиться у стандартному ядрі для Ubuntu Trusty Thar 14.04; тому зараз потрібне лише наступне додавання до параметра завантаження.

Після встановлення патча додавання

 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 у /unix//a/103742/52205 . Як корінь, видайте команду:

echo 1 > /sys/block/sdb/device/delete

перед тим як призупинити.

Щоб зробити його постійним, додайте такий файл у /etc/pm/sleep.d/та зробіть його виконуваним:

-rwxr-xr-x 1 root root 204 Dec  6 16:03 99_delete_sdb

зі змістом:

#!/bin/sh

# Delete the failing disk so that it will not block suspend

case "$1" in
    suspend|hibernate)
        if [ -d /sys/block/sdb ]; then
            echo 1 > /sys/block/sdb/device/delete       
        fi
        ;;
esac

... і тепер система призупинить (і відновить) правильно.


1
Дякую за нагадування /sys/block/*/device/delete.
Майкл Шигорін

@kikuto --- запропоноване редагування здалося трохи поза темою, але я додав посилання на те, як додати параметр завантаження ядра. Дякую.
Рмано

5

Ви можете спробувати створити правило udev за допомогою наступної інформації (вихід udevadm info -a -n / dev / sdb).

ІНФОРМАЦІЯ:

looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0':
    KERNELS=="1:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{rev}=="SSD "
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{model}=="SanDisk iSSD P4 "
    ATTRS{state}=="running"
    ATTRS{queue_type}=="none"
    ATTRS{iodone_cnt}=="0x309"
    ATTRS{iorequest_cnt}=="0x30a"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{timeout}=="30"
    ATTRS{evt_media_change}=="0"
    ATTRS{ioerr_cnt}=="0x1d6"
    ATTRS{queue_depth}=="1"
    ATTRS{vendor}=="ATA     "
    ATTRS{device_blocked}=="0"
    ATTRS{iocounterbits}=="32"

1) Створіть правило udev.

  • sudo nano /etc/udev/rules.d/99-hide-ssd.rules

Ви можете спробувати співставити клавіші "SUBSYSTEMS " & "DRIVERS" та атрибути "ATTRS {rev}" & ATTRS {model} , а потім призначити змінну "UDISKS", щоб ігнорувати її.

Вміст файлу 99-hid-ssd.rules буде таким:

SUBSYSTEMS == "scsi", DRIVERS == "sd", ATTRS {rev} == "SSD", ATTRS {модель} == "SanDisk iSSD P4", ENV {UDISKS_IGNORE} = "1"

Щоб зберегти зміни в nano ... Ctrl+ O, потім Enterі, нарешті, Ctrl+ X.

2) Нарешті оновіть правила udev:

  • sudo udevadm trigger

ПРИМІТКА: За допомогою ENV {UDISKS_IGNORE} = "1" він ігнорує диск для Ubuntu 12.10 та 13.04.
Для Ubuntu 12.04 змінною буде ENV {UDISKS_PRESENTATION_HIDE} = "1" .

Сподіваюся, це допомагає.


Спробувавши, все-таки sdb виявляється при завантаженні (і затримує його). Я думаю, має бути якийсь параметр рядка ядра, але я нічого не зміг знайти ... зітхнути. Все одно, дякую.
Рмано

@Rmano ... Якщо ви намагаєтеся відповідати лише ключу ядра ?. правило було б KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ..., щоб побачити, чи виявлено диск у udev.
Роман Рагеет

Я знаю, що це було дуже багато часу тому. але ця проблема все ще без відповіді ... жодна з пропозицій не спрацювала. Дякую всім у будь-якому випадку
Рмано

2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting пропонує частково:

Як корінь, відкрийте /etc/udev/rules.d/60-persistent-storage.rules улюбленим текстовим редактором.

Через кілька рядків вниз, ймовірно, ви побачите такий рядок:

пропустити правила щодо невідповідних блокових пристроїв

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end" Додати "sdb *" у цей другий рядок, так це виглядає приблизно так:

KERNEL == "ram * | петля * | fd * | nbd * | gnbd * | dm- | md | sdb *", GOTO = "persistent_storage_end"

Збережіть, перезавантажте і, можливо, це спрацює. Якщо ні, ну це післягарантійне обслуговування?


Спробував це, не пощастило. Все ще є привід sdb, все ще блокуючи призупинення. Колись існував параметр командного рядка ядра sdb = ignore ядро ​​... І, на жаль, так, це гарантія.
Rmano

До речі, у мене цього файлу не було, тому я додав його ...
Rmano

2

Якщо ваші інші диски не використовують ahci або не мають SSD, ви можете видалити драйвер ядра для них.

щоб видалити цей сеанс (до наступної перезавантаження), запустіть:

sudo rmmod ahci

щоб перезавантажити його, запустіть:

sudo modprobe ahci

якщо ви бачите, що все йде нормально, тепер ви можете повністю відключити його (не завантажуйте його в наступні черевики). відкрийте файл /etc/modprobe.d/blacklist.conf та додайте наступний рядок:

blacklist ahci 

на чорний список драйверів ssd , просто замініть ahci на sd


2
Це залишить мені систему без будь-якого диска ... увімкнено основний диск ata1, несправний ssd ata2. Якщо вимкнути режим AHCI в bios, система зробить
незавантаженим

1

З того, що мені відомо, немає іншого способу видалити повідомлення, крім видалення SSD.


На жаль, SSD (наскільки я знаю) припаяний до материнської плати. Це просто 8G чіп.
Рмано

Виріжте одну із світлодіодів на мікросхемі, бажано знайти лінію + 5 В та виріжте її за допомогою X-Acto?
K7AAY

... якби я тільки знав, що таке мікросхема і де він. Тоді я побоююся, що це може створити ще більше проблем (нерівномірний тридержавний ...).
Рмано

1

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.