编辑-尝试hd-idle

编辑-尝试hd-idle

情况

我有一个 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

由于我发现将系统置于睡眠模式就像拔下并重新插入驱动器一样,因此我怀疑 USB 端口及其电源可能存在一些问题。

我浏览了 BIOS 并将“Always On USB”设置为“Enable”;看来将此参数设置为 Enable 已经解决了该问题。

在此处输入图片描述

答案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

相关内容