Linuxカーネルに、ディスクが接続されていないかのように完全に無視するように指示するにはどうすればよいですか?


18

通知

答えを探して下にスクロールしてください(ポイントはほとんどありませんが、正しいものです)。この問題は、カーネル3.12.7以降に含まれるパッチによって解決されます。以前のバージョンにもバックポートされることを願っています。

私のラップトップはSamsung Chronosシリーズ7です。UbuntuGnome 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"

しかし、それは機能しません。

一方、Windowsを使用せずに「キャッシュ」モードのままにした場合、または同じことを行うために「ライブ」ウィンドウを起動する場合、SSDをリセットする方法を誰かが知っている場合...

ありがとう!

追加されたデータ:

http://paste.ubuntu.com/6186145/に完全udevadm info -a -n /dev/sdb貼り付け

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

http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579からのSSDデータ)。

追加の考え:

これはすべて、Intel Smart Response Technologyの副作用であり、Linuxをインストールする前に無効にされないのでしょうか?はいの場合、マシンにウィンドウを再インストールする前にどのように確認できますか?または、これは暗闇でのショットですか?(BIOSではSSDドライブは表示されず、Intel SRTについては何もありません)。

重複としてのマーキングについて:

質問のタイトルを変更しました。リンクされた質問が私の問題に答えるとは思わない。私 は、SSDが故障しいることを確信しています。Linuxカーネルにまったくプローブしないように指示することは可能かどうかを尋ねています。


2
非表示にするディスクが「sdb」の場合、「udevadm info -a -n / dev / sdb」の完全な出力を投稿してください。
ローマRaguet

1
これは、リンクされた質問の複製ではありません。重複としてマークを解除してください。質問をわかりやすく伝えるためにタイトルを変更しました。SSDチェックではなく、Linuxでのディスク管理に関する一般的な質問です。ありがとう!
Rmano

1
ディスクを抜くだけの問題は何ですか?
ブライアム


3
Braiam:SSDディスクはメインボードにはんだ付けされています。
Rmano

回答:


14

ここでの2つの解決策:1つは迅速に適用できますが、問題は部分的にしか解決しませんが、もう1つは完全なものですが、独自のカーネルをコンパイルする必要があります。

正解はカーネルパッチです。

ロビンH.ジョンソンは、SATAカーネルドライバー用のパッチ(Unix / Linuxスタック交換サイトで見つけてください)を書いて、ドライブを完全に隠しています。

Update 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

カーネルパラメーターを追加するには(一時的および永続的にボット)、次のQ&Aを確認できます:カーネルブートパラメーターを追加するにはどうすればよいですか?

回避策

少なくともsuspend-resumeを有効にする問題は、https: //unix.stackexchange.com/a/103742/52205のUnix StackExchangeユーザーEmmanuelによって解決されました。ルートとして、次のコマンドを発行します。

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 {モデル}割り当て、その後の属性を、「UDISKS」それを無視する変数を。

99-hide-ssd.rulesファイルの内容は次のとおりです。

SUBSYSTEMS == "scsi"、DRIVERS == "sd"、ATTRS {rev} == "SSD"、ATTRS {model} == "SanDisk iSSD P4"、ENV {UDISKS_IGNORE} = "1"

変更をnanoに保存するには... Ctrl+ OEnterそして最後に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

@Rmano ...カーネルキーのみを一致させようとすると?ルールはKERNEL == "sdb"、ENV {UDISKS_IGNORE} = "1" ... ...ディスクがudevで検出されたかどうかを確認します。
ロマンラゲ

かなり前のことだったと思います。しかし、この問題にはまだ答えがありません...どの提案も機能しませんでした。とにかくありがとう。
ルマーノ

2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-bootingの提案の一部:

rootとして、お気に入りのテキストエディタで/etc/udev/rules.d/60-persistent-storage.rulesを開きます。

数行下に、おそらく次のような行が表示されます。

不適切なブロックデバイスのルールをスキップする

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md "、GOTO = "persistent_storage_end" 2行目に「sdb *」を追加すると、次のようになります。

KERNEL == "ram * | loop * | 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ドライバーをブラックリストに登録するには、ahcisdに置き換えてください


2
これにより、ディスクのないシステムata1が残りata2ます。メインドライブがオンになり、障害のあるssdがオンになります。BIOSでahciモードを無効にすると、システムが起動できなくなります
...-Rmano

1

私が知っていることから、SSDを削除する以外に、メッセージを削除する方法はありません。


残念ながら、SSDは(私の知る限り)メインボードにはんだ付けされています。ただの8Gチップです。
Rmano

チップ上のLEDの1つを切断し、+ 5Vラインを見つけてX-Actoで切断しますか?
K7AAY

...どのチップがどこにあるかしかわからない場合。次に、それがさらに問題を引き起こす可能性があることを恐れています(非駆動の3状態...)。
Rmano

1

起動時に単一のディスクを無効にする機能を実装するカーネルパッチを作成しました。これにより、udevでの無効化や初期ブート中の待機を気にする必要がなくなりました。

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

多くのカーネルに非常に簡単に適用する必要があります(上の行は2013-05-21 / v3.10-rc1 *に追加されましたが、その行がなくても手動で安全に適用できます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.