Rma*_*ano 20 boot ssd disk-management udev
注意
请向下滚动以获取答案(它有几点但它是正确的)。该问题通过将在内核 3.12.7 及更高版本中的补丁解决;我希望它也能移植到早期的版本。
我的笔记本电脑是三星 Chronos 系列 s 7。Ubuntu Gnome Remix 13.04,带有英特尔更新的驱动程序。
我的内部 SSD 驱动器(8G 容量)有问题。它因 COMRESET 和输入/输出错误而失败。我非常确信问题出在硬件上;不幸的是,我没有在笔记本电脑中安装 Windows 来检查它是否是 SSD 配置问题或其他问题。
问题是udev识别了磁盘:
KERNEL[9.515930] add /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb (block)
ACTION=add
DEVNAME=sdb
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
DEVTYPE=disk
MAJOR=8
MINOR=16
SEQNUM=1785
SUBSYSTEM=block
UDEV_LOG=3
Run Code Online (Sandbox Code Playgroud)
之后它在许多检查中失败,延迟启动,延迟关闭,并使(我认为)无法挂起。
是否可以告诉 Linux 完全忽略 ata2 链接上的任何内容?我尝试将此行添加到 /etc/udev/rules.d/10-local.rules
SUBSYSTEMS=="pci" DRIVERS=="ahci" KERNELS=="ata2" OPTIONS=="ignore_device"
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
另一方面,如果有人知道如何在不使用 Windows 的情况下将 SSD 置于“缓存”模式时如何重置 SSD……或者启动“实时”Windows 以执行相同操作……
谢谢!
数据补充:
完整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
Run Code Online (Sandbox Code Playgroud)
这显然是错误的。尽管如此:
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
Run Code Online (Sandbox Code Playgroud)
(SSD 数据来自http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579)。
其他想法:
在安装 Linux 之前,所有这一切都是英特尔智能响应技术没有被禁用的副作用吗?如果是,除了在机器上重新安装 Windows 之外,我如何检查它?或者这是在黑暗中拍摄?(在 bios 中没有显示 SSD 驱动器,也没有关于英特尔 SRT 的信息)。
关于标记为重复:
我改变了问题的标题;我认为链接的问题不能回答我的问题。我肯定 知道SSD 出现故障。我在问是否有可能告诉 linux 内核根本不探测它。
Rma*_*ano 18
这里有两种解决方案:一种是快速应用,虽然只解决了部分问题,另一种是完整的,但需要你自己编译内核。
Robin H. Johnson 为 SATA 内核驱动程序编写了一个补丁(在 Unix/Linux 堆栈交换站点中找到它),它完全隐藏了驱动器。
更新 1补丁现在在上游(至少在 3.12.7 稳定内核中),请参阅 git 存储库。我在 Ubuntu launchpad 中要求向后移植。
更新 2该补丁位于 Ubuntu Trusty Thar 14.04 的标准内核中;所以现在只需要添加以下引导参数。
安装补丁后,添加
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 中解决。以 root 身份发出以下命令:
echo 1 > /sys/block/sdb/device/delete
Run Code Online (Sandbox Code Playgroud)
暂停前。
要使其永久化,请添加以下文件/etc/pm/sleep.d/并使其可执行:
-rwxr-xr-x 1 root root 204 Dec 6 16:03 99_delete_sdb
Run Code Online (Sandbox Code Playgroud)
内容:
#!/bin/sh
# Delete the failing disk so that it will not block suspend
case "$1" in
suspend|hibernate)
if [ -d /sys/block/sdb ]; then
echo 1 > /sys/block/sdb/device/delete
fi
;;
esac
Run Code Online (Sandbox Code Playgroud)
...现在系统正确挂起(和恢复)。
您可以尝试使用以下信息创建 udev 规则(udevdm info -a -n /dev/sdb 的输出)。
信息:
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0':
KERNELS=="1:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{rev}=="SSD "
ATTRS{type}=="0"
ATTRS{scsi_level}=="6"
ATTRS{model}=="SanDisk iSSD P4 "
ATTRS{state}=="running"
ATTRS{queue_type}=="none"
ATTRS{iodone_cnt}=="0x309"
ATTRS{iorequest_cnt}=="0x30a"
ATTRS{queue_ramp_up_period}=="120000"
ATTRS{timeout}=="30"
ATTRS{evt_media_change}=="0"
ATTRS{ioerr_cnt}=="0x1d6"
ATTRS{queue_depth}=="1"
ATTRS{vendor}=="ATA "
ATTRS{device_blocked}=="0"
ATTRS{iocounterbits}=="32"
Run Code Online (Sandbox Code Playgroud)
1)创建 udev 规则。
sudo nano /etc/udev/rules.d/99-hide-ssd.rules您可以尝试匹配“SUBSYSTEMS”和“DRIVERS”键,以及“ATTRS{rev}”和ATTRS{model}属性,然后分配“UDISKS”变量以忽略它。
99-hide-ssd.rules 文件的内容是:
子系统=="scsi", 驱动程序=="sd", ATTRS{rev}=="SSD", ATTRS{model}=="SanDisk iSSD P4", ENV{UDISKS_IGNORE}="1"
要保存 nano... Ctrl+ 中的更改O,然后Enter最后Ctrl+ X。
2)最后刷新udev规则:
sudo udevadm trigger注意:使用ENV{UDISKS_IGNORE}="1"它将忽略 Ubuntu 12.10 和 13.04 的磁盘。
对于 Ubuntu 12.04,变量将是ENV{UDISKS_PRESENTATION_HIDE}="1"。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
37956 次 |
| 最近记录: |