Linux Kernel> 3.0に障害のあるディスクを完全に無視するように指示する方法は?


23

私は、バス上の一台のSATAハードディスクと三星ラップトップ(クロノスS7)を有するata:1として検出され、/dev/sda上に8G SSDをata:2/dev/sdbSATAインターフェースの残りの部分に、および様々な他のデバイス。

問題は、SSDディスクが

  • メインボードにはんだ付け(移動不可)
  • 破壊された(すべての操作でI / Oエラーが発生する)
  • BIOSには表示されません(おそらく壊れているため)

今、このディスク:

  • 障害のあるディスクの調査を試みるブートを3〜5分遅らせますが、これは迷惑です。
  • しかし、最も厄介なのは、システムが失敗したために中断/dev/sdbできないことです。

起動時の遅延に耐えることができることに注意してください---私が心配しているのは、再開/一時停止のことです。


質問は次のとおりです: ata:2でデバイスをプローブすることさえ避けるようにカーネルに指示できますか?

古いカーネル(<3.0)では、まだソースを少し掘り下げることができたが、hdb=ignoreそのトリックを実行するスタイルのコマンドラインパラメーターがありました。

私はすべてして以下に提案トリックしようとしているudevlibata:force無駄に、カーネルパラメータを。具体的には、以下は機能しません。

  1. /etc/udev/rules.d/のファイルの1つに追加する(初期実行のように、00-ignoredisk.rulesまたは後期99-ignoredisk.rulesまたはその両方で)

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

    また

    KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
    

    また、多くの中間ソリューション---これにより、ブート後にディスクにアクセスできなくなりますが、ブート時にプローブされ、サスペンド時にチェックされます---サスペンドが失敗します。

  2. システムファイルを編集する/lib/udev/rules.d/60-persistent-storage.rules(そしてudisksudisks2)変更

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

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

    繰り返しになりますが、これはユーザー空間からディスクをマスクする何らかの効果がありますが、ディスクはまだカーネルに見えます。

  3. すべての可能な組み合わせでのブート(だけでなく、それらの多く)のlibata:force(例えば見つけパラメータここ無効DMA、低速または任意の障害が発生したディスクについて---動作しないために)。パラメーターは使用されますが、ディスクは引き続きプローブされ、失敗します。

    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データ)。


これがあまりにも明白な場合は申し訳ありませんが、質問に含まれていないため、デバイス名またはUUIDがリストにないことを確認しました/etc/fstabか?ブート時の遅延は、カーネルまたはudevによって早めに発生する可能性があるためfstabです。
テレサeジュニア

はい、システムファイルに/ dev / sdb(またはそのパーティション)の記述はありません。遅延はinitが開始するですら... kthread内にあります(ブートが並行して継続するため)が、より基本的なレベルです。しかし、実際にはブート遅延は問題の方が小さいです---サスペンド/レジューム中にディスクを無視してサスペンドが機能するようにできれば幸いです。(とにかくありがとう)。
-Rmano

initrdで使用していますか?もしそうなら誰?
-19:

@hildred:Ubuntu 13.04のストックカーネルとinitramfsを使用しています。そこでAHCIまたはすべてのSATAを無効にできますが、システムが停止します-ディスクがまったくありません。
-Rmano

Debian(およびUmbutu)は、ataサブシステムをモジュールとしてコンパイルします。モジュールがinitrdによってロードされるときに、モジュールにパラメーターを設定しようとしましたか?
hildred

回答:


26

libatanoprobeオプションはまったくありません。それはレガシーIDEオプションでした...

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

更新パッチはアップストリームになりました(少なくとも3.12.7安定版カーネル)。これは、Ubuntu 14.04(3.13安定版に基づいています)で配布される標準カーネルに含まれています。

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

 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

重要な数は、ata2.00上記の最初の行にあります。


どうもありがとう。Ubuntuでカーネルをコンパイルしてインストールする方法を思い出したら、すぐにチェックしようとします。残念ながら、私は...前方に非常に複雑な週を持っています
Rmano

1
+1それは明らかに私が投稿したトリックよりも優れています。それが公式になることを願っています。
エマニュエル

1
OK、パッチをテストしました。できます。上流にプッシュする必要がある場合は、パッチにTested-by:を追加できます。プロファイルに本当のメールがあります。wiki.ubuntu.com/Kernel/BuildYourOwnKernelの指示に従って(奇妙に)インストールしました
Rmano

1
@illuminÉ---その意味で答えを編集しました---承認されるのを待ちます。
Rmano 14年

1
GENTOOを愛するもう1つの理由!!
eyoung100 14年

15

ハードウェアの問題には、物理​​的なハードウェアソリューションがあります。ドライブの電源を切るか電源を切ることを検討しましたか?

編集:それはハードドライブをホットプラグする前に人々がこれを使用しているオプションではない場合はOK。これを使用して、ドライブを無効にすることができます。

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

他のプロセスは、SATAバスのスキャンを強制し、その後、それを元に戻すことができることに注意してください。ラップトップを休止状態にする直前にそれを試してください。

OPによる編集:動作しました。次のファイルを追加しました:

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

コンテンツ付き:

#!/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

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


1
それだけが本当だったら。どのチップがSSDドライブであるかを言うことすらできません-ほとんどはマークされていません。そして、チップの電源を切ることは安全ではありません---駆動されていないスリーステートピンはどうですか SSDドライブが何らかのドーターボードに接続されていることを期待して、ラップトップを開きました。運がありません。(さらに、カーネルドライバーを記述する際の困難のほとんどは、設計の悪いハードウェアを回避することです)。
Rmano

@Rmano「削除」トリックの実行方法
エマニュエル

IT WORKS ---「削除」トリックの後に中断できます。どうもありがとう。(それでもブートを遅らせますが、問題はありません-)。
Rmano

について思い出させてくれてありがとうdelete
マイケルシゴリン

3

BIOS

このデバイスは、BIOSを介してどのような方法でも表示されませんか?

多くの場合、HDDが「自動」モードで構成されているので、これらのデバイスが無効状態になっていることを確認し、1台のHDDのみを明示的に有効にし、他のすべてを無効にします。

カーネルブートオプション

多くの場合、スイッチとして渡すことができるさまざまなブートオプションを使用することにより、ブート中のLinuxカーネルによるさまざまなサブシステムの自動検出を無効にすることができます。

すべてではないにしても、ほとんどのオプションがここにリストされています。

Linux in a Nutshell book

O'Reillyの本であるLinux Kernel in a Nutshell、特に第7章:カーネルのカスタマイズをざっと読みたくなるかもしれません。

この本は、著者のグレッグ・クローア・ハートマンが個人のウェブサイトで無料で提供しています。書籍全体もダウンロードできます。


いいえ、BIOSにはこのディスクのトレースはありません。HDDとDVDを見ることができます。失敗する前に、Windows(システムにはもうウィンドウがありません)で、メインディスクの高速化キャッシュとして使用されていました。AHCIモードをレガシー、オフ、はい、または自動(すべてのディスク)に設定しようとしましたが、何も変更されず、単に(オフ)システムが起動しませんでした。
Rmano

私が過去に使用した他の方法は、カーネルがGrub(カーネルブートオプション)を介してそれを伝えるために起動しているときnoide=....です。ハードウェアの自動検出を無効にするために、ブートカーネルに提供できる他のオプションが多数あります。
slm

ディスクはSATA(scsi)で、IDEはありません。そして、hdb=noprobeオプションはマスターをscsiに渡していないので(2.6.x前後で削除されたと思います)、オプションsdb=noprobeまたはata:2=noprobeオプションは(すぐにわかりますが)存在しません。kernel-parameters.txtカーネルソース内の(ほぼ)すべてのファイルを読みましたが、正しいパラメーターが見つかりません。誰か知っているなら、答えで教えてください---本当にありがたいです。
-Rmano

@Rmano-それを見つけるにはもっと掘り下げなければなりません。HDDとバスの検出に関連するいくつかのオプションを覚えていますが、頭の外ではありません。
slm

@Rmano-オプションはどうですか:libata.dma=
slm

0

ロックのsudo hdparm -I /dev/sdX有無を確認するLinuxの方法:(X = a..zの場合、もちろん、ドライブがどのデバイスであるかを知る必要があります)。(大きな)出力の最後で、最後の10行を読み取ることができなければなりません:*not* locked

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