情况
我有一个 WD Element Drive,它的行为很奇怪。驱动器需要很长时间才能停止旋转,而且我无法使用以下方法设置驱动器的待机(停止旋转)超时:不同的方法。
例如使用hdparm
会导致SG_IO
错误:
$ sudo hdparm -S 25 /dev/sdx
dev/sdx:
setting standby to 25 (2 minutes + 5 seconds)
SG_IO: bad/missing sense data, sb[]: ...
然而,奇怪的是我能够使用-y
开关将驱动器置于待机模式:
$ sudo hdparm -y /dev/sdx
出现同样的SG_IO
错误,但驱动器停止旋转。我对此很满意。
真正的问题
看起来,暂停 Ubuntu 会产生类似于拔出和插入驱动器的效果。
当我想暂停 Ubuntu 时,使用以下命令systemctl suspend
::
- 如果驱动器处于待机模式,它会旋转并且不会再次旋转。
- 如果它没有处于待机模式,那么它首先会旋转减速,一秒钟后它会再次旋转并且永不旋转减速。
唯一的解决方法是恢复 Ubuntu 并hdparm -y
在驱动器上手动运行,如果我再次暂停 Ubuntu,也会发生同样的事情。
我已经尝试过
我尝试hdparm -y
在暂停状态下运行以使驱动器处于standby
模式:
$ cat /usr/lib/systemd/system-sleep/suspend_drive
#!/bin/sh
case $1 in
pre)
hdparm -y /dev/sdc ;;
esac
它没有任何影响。正如我已经说过的,当 Ubuntu 进入睡眠状态时,驱动器首先会旋转一秒钟,然后它就会再次开始工作。
我正在寻找什么...
有没有什么办法可以解决这个问题?
我正在寻找一种解决方案,在系统进入睡眠状态时首先阻止驱动器旋转。如果驱动器已经唤醒,它应该与系统一起进入待机模式。
笔记:
- 运行 Ubuntu 20.04。
- 我对拆卸驱动器不感兴趣(或使用任何从 USB 端口断电的方法,因为它与拔下驱动器的结果相同)。
- 或使用类似的东西
udiskctl poweroff
。 - 这是另一个类似的问题:防止外部 USB 硬盘在挂起到 RAM 期间旋转
更新
如果我
udisksctl power-off /dev/sdc
安全地移除驱动器,暂停 Ubuntu 就像拔下并重新插入一样,我可以再次安装和使用该驱动器(这是不应该发生的事情)。我可以为驱动器设置一个待机计时器
sdparm
,但是这并不能解决问题,在暂停 Ubuntu 驱动器后,驱动器会旋转起来并且永远不会减速,即使将计时器设置为一分钟这样的小值。由于我遇到了不同的结果,所以我不是 100% 确定,但似乎我只在驱动器连接到 USB3 端口时遇到问题。
- 但是 USB2 也有它自己的问题,例如在恢复 Ubuntu 驱动器旋转后。
我可以确认我在 Windows 中也遇到了同样的问题。
答案1
当 Western Digital 设备返回SG_IO
错误时,通常意味着虽然hdparm
将执行一些所请求的操作,它不是该特定磁盘的正确工具。相反,实用性sdparm
是必须的。
对于我这里的一些 USB3.0 WD 磁盘,这些是使连接的笔记本电脑挂起后保持旋转所需的设置:
sudo sdparm --flexible -6 -l --save --set SCT=3000 /dev/sdX
sudo sdparm --flexible -6 -l --save --set STANDBY=1 /dev/sdX
笔记:确保/dev/sdX
使用正确的设备进行替换。
第一个命令设置设备在 5 分钟后旋转停止(假设驱动器的SCT
值为100ms
)。第二个命令允许驱动器自行进入待机模式。
您可以使用以下命令显示磁盘的所有参数和设置:
sudo sdparm --flexible -6 -l -a /dev/sdX
答案2
答案3
编辑-尝试hd-idle
有许多报告hdparm
称 WD 驱动器无法正常工作。
实用功能高清空闲是为Linux编写的。
尽管它的“名声”在于在 10 分钟不活动后使外部驱动器旋转停止,但可能有一种方法可以在挂起操作期间调用它来使其旋转停止。
hd-idle
已在 GitHub 上 fork. 提供了用于保存日志文件和按需减速的选项。
我曾多次在询问 Ubuntu。此变体来自问答:
(... 答案的第一部分被删去了...)
更简单的解决方案是关闭所有 USB 端口
我最近遇到了一个问题,未知端口阻止笔记本电脑挂起。我找到了这个解决方案(代码中注明),并进行了修改。
/lib/systemd/system-sleep/custom-xhci_hcd
使用权力创建文件sudo
并插入以下代码:
#!/bin/bash
# Original script was using /bin/sh but shellcheck reporting warnings.
# NAME: custom-xhci_hcd
# PATH: /lib/systemd/system-sleep
# CALL: Called from SystemD automatically
# DESC: Suspend broken for USB3.0 as of Oct 25/2018 various kernels all at once
# DATE: Oct 28 2018.
# NOTE: From comment #61 at: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/522998
TMPLIST=/tmp/xhci-dev-list
# Original script was: case "${1}" in hibernate|suspend)
case $1/$2 in
pre/*)
echo "$0: Going to $2..."
echo -n '' > $TMPLIST
for i in `ls /sys/bus/pci/drivers/xhci_hcd/ | egrep '[0-9a-z]+\:[0-9a-z]+\:.*$'`; do
# Unbind xhci_hcd for first device XXXX:XX:XX.X:
echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
echo "$i" >> $TMPLIST
done
;;
post/*)
echo "$0: Waking up from $2..."
for i in `cat $TMPLIST`; do
# Bind xhci_hcd for first device XXXX:XX:XX.X:
echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/bind
done
rm $TMPLIST
;;
esac