私はサムスンのラップトップ(Chronos s7)を使用しており、バス_ata:1
_に1つのSATAハードディスクがあり、これは_/dev/sda
_として検出され、8G SSDは_ata:2
_、_/dev/sdb
_、およびさまざまな残りのSATAインターフェイス上の他のデバイス。
問題はSSDディスクが
今、このディスク:
/dev/sdb
_が失敗したためにシステムがサスペンドに失敗することです。起動時の遅延に耐えられることに注意してください---心配なのは、再開/一時停止の問題です。
だから問題は:ata:2でデバイスをプローブすることさえ避けるようにカーネルに指示できますか?
古いカーネル(<3.0)では、まだソースを少し掘り下げることができたときに、_hdb=ignore
_スタイルのコマンドラインパラメーターがありました。
udev
および_libata:force
_カーネルパラメーターを使用して、以下に提案するすべてのトリックを試しましたが、役に立ちませんでした。具体的には、以下は機能しません。
次のいずれかの_/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"
_
また、多くの中間的な解決策---これにより、ブート後にディスクにアクセスできなくなりますが、ブート時にプローブされ、中断時にチェックされます---中断が失敗します。
システムファイルの編集_/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"
_
繰り返しますが、これはユーザースペースからディスクをマスクする何らかの影響がありますが、ディスクはまだカーネルから見えています。
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データ)。
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
上記の最初の行。
ハードウェアの問題には、物理的なハードウェアソリューションがあります。ドライブの電源を外すか切断することを検討しましたか?
編集: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
...そして今、システムは正しく中断(および再開)します。
このデバイスはBIOS経由でどのような方法でも表示されませんか?
多くの場合、HDDが「自動」モードで構成されているので、これらのデバイスが無効な状態であることを確認し、1つのHDDのみを明示的に有効にして、他のすべてを無効にすることさえします。
多くの場合、スイッチとして渡すことができるさまざまなブートオプションを使用して、ブートするLinuxカーネルによってさまざまなサブシステムが自動検出されるのを無効にすることができます。
すべてではないにしてもほとんどのオプションがここにリストされています。
O'Reillyの本 Linux Kernel in a Nutshell 、具体的には 第7章:カーネルのカスタマイズ をざっと読みたくなるかもしれません。
この本は、著者のグレッグ・クロア・ハートマンの個人ウェブサイトで無料で入手できます。書籍全体をダウンロードすることもできます。
Linuxでロックを確認する方法:Sudo hdparm -I /dev/sdX
(X = a..zを使用。もちろん、ドライブがどのデバイスであるかを知っている必要があります)。 (大きな)出力の最後では、最後の10行で読み取る必要があります:*not* locked
。