web-dev-qa-db-ja.com

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

通知

お願いします 答えをスクロールしてください (ポイントは少ないですが、正しいものです)。この問題は、カーネル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をリセットする方法を誰かが知っている場合...

ありがとう!

追加されたデータ:

フルudevadm info -a -n /dev/sdbhttp://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

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

追加の考え:

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

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

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

17
Rmano

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

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

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

Update 1パッチはアップストリームになりました(少なくとも3.12.7安定カーネル)。 gitリポジトリ を参照してください。 buntuランチパッドのバックポート を要求しました。

Update 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を確認できます。 カーネルブートパラメーターを追加するにはどうすればよいですか

Workaround

少なくともsuspend-resumeを有効にする問題は、Unix StackExchangeユーザーEmmanuelによって https://unix.stackexchange.com/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

...そして、システムは正しくサスペンド(およびレジューム)します。

13
Rmano

次の情報(udevadm info -a -n/dev/sdbの出力)を使用して、udevルールの作成を試みることができます。

情報:

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-hide-ssd.rulesファイルの内容は次のとおりです。

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

変更をナノに保存するには... 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"になります。

お役に立てれば。

5
Roman Raguet

他のディスクがahciを使用していない場合、またはSSDでない場合は、それらのカーネルドライバーを削除できます。

(次の再起動まで)そのセッションから削除するには、次を実行します:

Sudo rmmod ahci

リロードするには、次を実行します:

Sudo modprobe ahci

すべてが順調に進んでいることがわかったら、今度は完全に無効にすることができます(次回起動時に読み込まないでください)。ファイル/ etc/modprobe.d/blacklist.confを開き、次の行を追加します。

blacklist ahci 

ssdドライバーをブラックリストに登録するには、ahcisdに置き換えるだけです

2
Ohad Cohen

https://serverfault.com/questions/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 「その2行目に「sdb *」を追加すると、次のようになります。

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm-| md| sdb *"、GOTO = "persistent_storage_end"

保存して再起動すると、おそらく動作します。そうでない場合、まあ、これは保証後ですか?

2
K7AAY

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

1
Anudeep Revuri

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

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

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

1
robbat2