我在主板上焊接了 30GB ExpressCache SanDisk SSD 的三星笔记本电脑。SSD 死了(当我尝试以某种方式访问它时会出现大量错误),但它仍然在内核启动时被探测,我看到它的分区,ubuntu 的 unity 在应用程序抽屉中显示未安装的驱动器图标,最糟糕的是我无法挂起笔记本电脑, 因为向 ssd 设备发送挂起命令失败。我试图传递 sdb=noprobe 内核参数,但它看起来很久以前在 3.8.0 内核(Ubuntu 13.04)中已经过时了。如何在最近的内核中禁用 sata 设备?
我去为你写了一个内核补丁,它实现了在启动时禁用单个磁盘的能力,这样你就不需要在 udev 中禁用它,或者在初始启动期间等待。
http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch
应该很容易地应用于许多内核(上面的行是在 2013-05-21/v3.10-rc1* 中添加的,但可以在没有该行的情况下安全地手动应用)。
小智 1
这里有两种解决方案:一种是应用速度快,虽然只解决了部分问题,另一种是完整的,但需要你编译自己的内核。
Robin H. Johnson 为 SATA 内核驱动程序编写了一个补丁(可以在 Unix/Linux 堆栈交换站点中找到它),该补丁完全隐藏了驱动器。
更新该补丁现在位于上游(至少在 3.12.7 稳定内核中),请参阅 git 存储库。我要求在 Ubuntu 启动板中向后移植。
安装补丁后,添加
libata.force=2.00:disable
Run Code Online (Sandbox Code Playgroud)
添加到内核启动参数将会对 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
Run Code Online (Sandbox Code Playgroud)
Unix StackExchange 用户 Emmanuel 在https://unix.stackexchange.com/a/103742/52205中回答
您至少可以通过发出命令来解决挂起问题
echo 1 > /sys/block/sdb/device/delete
Run Code Online (Sandbox Code Playgroud)
暂停之前。
为了自动化它,我添加了以下文件:(注意标志,它必须是可执行的)
-rwxr-xr-x 1 root root 204 Dec 6 16:03 99_delete_sdb
Run Code Online (Sandbox Code Playgroud)
在目录中/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
Run Code Online (Sandbox Code Playgroud)
...现在系统正确挂起(并恢复)。我添加了片段
if [ -d /sys/block/sdb ]; then
echo Deleting device sdb
echo 1 > /sys/block/sdb/device/delete
fi
Run Code Online (Sandbox Code Playgroud)
/etc/rc.local
为了更好的衡量,也是如此。
归档时间: |
|
查看次数: |
7223 次 |
最近记录: |