ドライブのカーネルプローブを無効にする方法


9

30GB ExpressCache SanDisk SSDをメインボードにはんだ付けしたサムスンラップトップを持っています。SSDが停止しました(何らかの方法でアクセスしようとすると、大量のエラーが発生します)が、カーネルブートでまだプローブされています。パーティションが表示され、ubuntuの単一性により、アプリドロワーにマウントされていないドライブアイコンが表示され、最悪の場合、ラップトップを一時停止できません、ssdデバイスへのサスペンドコマンドの送信が失敗したため。sdb = noprobeカーネルパラメータを渡そうとしましたが、3.8.0カーネル(Ubuntu 13.04)で廃止されたようです。最近のカーネルでSATAデバイスを無効にするにはどうすればよいですか?

回答:


1

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

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

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

更新パッチがアップストリームになりました(少なくとも3.12.7安定したカーネル)。gitリポジトリを参照してください 。Ubuntu Launchpadバックポートを要求しました

パッチがインストールされたら、追加

 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/多分?
Sergey Melekhin 2013

すみません---関連情報を追加しました。
Rmano

5

私は行って、ブート時に1つのディスクを無効にする機能を実装するカーネルパッチを書いたので、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:disableでそれを使用する必要があります。IDは、問題のドライブを識別する番号またはnumber.numberタプルです。
robbat2 2013

この手順はわかりません:wiki.ubuntu.com/Kernel/BuildYourOwnKernelが最新です。今週はできる限りやってみます...
2013

ちなみに、Samsungラップトップの場合、コマンドはおそらく「libata.force = 2.00:disable」になるgrep iSSD /var/log/syslogはずです(ヒントが表示されるはずです)。
Rmano 2013

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サポートはカーネルとして(モジュールとしてではなく)コンパイルされるため、ブラックリストに載せることはできません。
Sergey Melekhin 2013

わかりましたので、その後、ちょうどあなたのラップトップを開いて、ドライブを削除...
ヘクター

残念ながら私はそれを行うのに十分な能力がありません-それはメインボードにはんだ付けされ、SATAケーブル経由で接続されていません。私はそれを削除するだけでラップトップが機能することを確信していません。
Sergey Melekhin 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.