如何告诉Linux Kernel> 3.0完全忽略发生故障的磁盘?
我有一台三星笔记本电脑(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 给出: …