我的三星笔记本电脑在mainbord上焊接了30GB ExpressCache SanDisk SSD。SSD死了(当我尝试以某种方式访问它时会产生大量错误),但是它仍在内核启动中进行检测,我看到它是分区,ubuntu的统一在应用程序抽屉中显示了未安装的驱动器图标,最糟糕的是我无法暂停笔记本电脑,因为将暂挂命令发送到ssd设备失败。我试图传递sdb = noprobe内核参数,但是看起来它早已在3.8.0内核(Ubuntu 13.04)中被淘汰。如何在最近的内核中禁用sata设备?
我的三星笔记本电脑在mainbord上焊接了30GB ExpressCache SanDisk SSD。SSD死了(当我尝试以某种方式访问它时会产生大量错误),但是它仍在内核启动中进行检测,我看到它是分区,ubuntu的统一在应用程序抽屉中显示了未安装的驱动器图标,最糟糕的是我无法暂停笔记本电脑,因为将暂挂命令发送到ssd设备失败。我试图传递sdb = noprobe内核参数,但是看起来它早已在3.8.0内核(Ubuntu 13.04)中被淘汰。如何在最近的内核中禁用sata设备?
Answers:
这里有两种解决方案:一种快速应用,尽管仅部分解决了问题,另一种是完整的解决方案,但需要您编译自己的内核。
罗宾·约翰逊(Robin H. Johnson)为SATA内核驱动程序(在Unix / Linux堆栈交换站点中找到)编写了一个补丁,该补丁将驱动器完全隐藏了。
更新该修补程序现在位于上游(至少在3.12.7稳定内核中),请参阅 git存储库。我在Ubuntu启动板中要求反向移植。
安装补丁后,添加
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
Unix StackExchange用户Emmanuel在https://unix.stackexchange.com/a/103742/52205中回答
您至少可以通过发出命令来解决挂起问题
echo 1 > /sys/block/sdb/device/delete
暂停之前。
为了使其自动化,我添加了以下文件:(注意标志,它必须是可执行的)
-rwxr-xr-x 1 root root 204 Dec 6 16:03 99_delete_sdb
在目录中 /etc/pm/sleep.d/
#!/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
...现在系统正确地挂起(并恢复)。我添加了代码段
if [ -d /sys/block/sdb ]; then
echo Deleting device sdb
echo 1 > /sys/block/sdb/device/delete
fi
到/etc/rc.local
过,好措施。
我去为您编写了一个内核补丁,该内核补丁实现了在引导时禁用单个磁盘的功能,因此您无需费心在udev中禁用它或在初始引导期间等待。
http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch
应该非常容易地应用于许多内核(它的上面的行是在2013-05-21 / v3.10-rc1 *中添加的,但是可以安全地手动应用而无需该行)。
sdb=disable
作为内核参数)。
grep iSSD /var/log/syslog
应该给您一个提示)。
我对此进行了研究,发现了可以在Ubuntu上轻松实现的解决方案。该发行版使用kmod,因此以下内容在使用kmod的发行版上都可以正常工作。
如果要禁用所有SATA设备,则需要将其列入黑名单,具体取决于所使用的驱动程序。尝试lsmod | grep sata
找出正在使用的驱动程序。然后在您/etc/modprobe.d/
创建的新文件echo blacklist (module) > blacklist.conf
中将其添加到黑名单中。重建initramfs mkinitramfs
使其生效。重启。
或者,只需添加modprobe.blacklist=(module)
您的内核参数。
99_delete_sdb
可执行文件?在/etc/rc0.d/
也许?