web-dev-qa-db-ja.com

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

私はサムスンのラップトップ(Chronos s7)を使用しており、バス_ata:1_に1つのSATAハードディスクがあり、これは_/dev/sda_として検出され、8G SSDは_ata:2_、_/dev/sdb_、およびさまざまな残りのSATAインターフェイス上の他のデバイス。

問題はSSDディスクが

  • メインボードにはんだ付け(移動不可)
  • バスト(任意の操作に対してI/Oエラーが発生するだけです)
  • bIOSに表示されない(おそらく壊れているため)

今、このディスク:

  • 障害のあるディスクをプローブしようとしてブートを3〜5分遅らせます。これは厄介です。
  • しかし、最も厄介なのは、_/dev/sdb_が失敗したためにシステムがサスペンドに失敗することです。

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


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

古いカーネル(<3.0)では、まだソースを少し掘り下げることができたときに、_hdb=ignore_スタイルのコマンドラインパラメーターがありました。

udevおよび_libata:force_カーネルパラメーターを使用して、以下に提案するすべてのトリックを試しましたが、役に立ちませんでした。具体的には、以下は機能しません。

  1. 次のいずれかの_/etc/udev/rules.d/_ファイルへの追加(_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_(およびudisks、_udisks2_)の変更

    _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. DMAを無効にするために、_libata:force_パラメータ(たとえば こちら にあります)のすべての可能な組み合わせ(そう、それらの多く)で起動して、DMA、低速などを無効にします障害のあるディスクについて---動作しません。パラメータは使用されますが、ディスクは引き続きプローブされ、失敗します。

    完全な_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
    _

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

23
Rmano

libataにはnoprobeオプションがありません。これは従来のIDEオプション...

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

Updateパッチは現在 pstream です(少なくとも3.12.7安定したカーネルでは)。これは、Ubuntu 14.04(3.13-stableに基づく)で配布される標準カーネルに含まれています。

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

 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上記の最初の行。

26
robbat2

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

編集: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

...そして今、システムは正しく中断(および再開)します。

16
Emmanuel

BIOS

このデバイスはBIOS経由でどのような方法でも表示されませんか?

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

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

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

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

Linux in a Nutshell book

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

この本は、著者のグレッグ・クロア・ハートマンの個人ウェブサイトで無料で入手できます。書籍全体をダウンロードすることもできます。

3
slm

Linuxでロックを確認する方法:Sudo hdparm -I /dev/sdX(X = a..zを使用。もちろん、ドライブがどのデバイスであるかを知っている必要があります)。 (大きな)出力の最後では、最後の10行で読み取る必要があります:*not* locked

0
syntaxerror