我有一台三星笔记本电脑(Chronos s7),在总线上有一个SATA硬盘ata:1
,被检测为/dev/sda
,上有8G SSD ata:2
,/dev/sdb
其余SATA接口上还有其他各种设备。
问题是SSD磁盘是
- 焊接到主板(不可移动)
- 崩溃(它仅给出任何操作的I / O错误)
- 它没有出现在BIOS中(可能是因为它已损坏)
现在该磁盘:
- 将尝试检测故障磁盘的启动延迟三到五分钟,这很烦人;
- 但是最烦人的是,系统由于
/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"
再次,这会产生一定的效果,将磁盘从用户空间中屏蔽出来,但是内核仍然可以看到该磁盘。
使用所有可能的参数组合(很好,其中很多)引导
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数据)。
/etc/fstab
?因为启动延迟可能是由内核或udev引起的,这似乎是这种情况,但在读取时也可能由fsck引起fstab
。