1

我已经编写了一个脚本来每天晚上备份我的服务器的 HD。在脚本结束时,我同步,等待几分钟,同步,然后我发出sg_start --stop停止设备的命令。这个想法是通过在十分钟的增量备份后关闭 HD 来延长设备的使用寿命(桌面磁盘可以承受数千个开/关循环,但只能持续运行几百小时)。

这并不总是有效。我经常发现第二天早上驱动器仍在旋转。是否有一个 shell 命令可用于检查驱动器是否已停止(因此我可以再次发出停止命令 [EDIT2] 或编写脚本以在驱动器运行时创建进程列表,以便我可以调试它[/EDIT2 ])?

[编辑] 我试过sg_inq(如 sg_start 手册页所建议的那样),但这个命令总是返回 0。

我已经尝试过hdparm,但它总是为 USB 驱动器(通过 /dev/sdX 连接)返回“驱动器状态为:未知”,并且在尝试降低驱动器时,我得到“HDIO_DRIVE_CMD(setidle1)失败:输入/输出错误” .

sdparm似乎支持在驱动器上设置空闲计时器(请参阅“电源模式条件页面”),但 IDLE 选项具有“可更改:n”,我还没有找到告诉我驱动器电源状态的选项。

sg_start --stop[EDIT2] 注意:我可以从控制台停止驱动器。这总是有效的;它并不总是一直待到午夜。服务器在地下室(那里又好又酷),我宁愿有办法从温暖的客厅检查驱动器是否启动:) 如果我有一个命令告诉我驱动器的状态,我可以编写一个脚本在它启动时提醒我(每分钟检查一次),然后我可以尝试找出可能导致这种情况的原因。

如果这很重要:我使用的是 openSUSE 11.1。

4

6 回答 6

3

当您说您尝试过 hdparm 时,您还没有说出尝试过的内容。我在一个机箱中有一些 USB 硬盘驱动器,一些命令适用于它,而另一些则没有,但我想这完全取决于传输机制的各个方面。

  hdparm  -S 120  /dev/sda  

应该告诉驱动器在大约 10 分钟不活动后自行休眠。

我猜你已经尝试过这个,但它并不明显,写这个作为答案可能会对未来的读者有所帮助。

Nothing accesses the drive but the backup script.

这在理论上很好,但我偶尔发现这还不够。有很多进程和任务,如果他们甚至查看驱动器,如果查找由于某种原因超出磁盘缓存,则可能会发生旋转。

常见的罪魁祸首是诸如updatedb扫描所有挂载文件之类的工具,fam或者gamin做一些时髦的事情来监控磁盘的变化。

如果有疑问,请通过在执行脚本之前安装设备并在完成后卸载它来增加确定性。

看到可能导致唤醒的事物

 lsof +D /mountpoint

在尝试卸载之前,您可能还应该解析它的输出,以确保没有任何东西仍在尝试使用它。

您可能还应该做一个懒惰的 umount

 umount -l /mountpoint 

所以如果在你做lsof| grep和打电话之间有任何东西访问它umount,它仍然会卸载驱动器并阻止东西能够读取它。

HAL 和朋友们

HAL 和朋友也可能正在唤醒驱动器以探测连接/移除状态。我真的希望它不是,但它在某些设备类型上会这样做。这似乎是一个不太可能的原因,但我会考虑任何可能的事情。

尝试有趣的东西,比如

lsof /dev/devicehere 

lsof /dev/devicehere1 

这似乎获得了将直接或间接访问句柄的所有事物的完整列表。

于 2008-12-23T22:42:28.120 回答
2

You also need to check the mount options and use "noatime" as a mount option, otherwise the kernel still updates the access times periodically. So this may be the cause of your problem too.

于 2010-09-10T07:42:08.687 回答
1

如果hdparm返回这个:

 drive state is:  unknown

smartctl返回:

CHECK POWER MODE: incomplete response, ATA output registers missing
CHECK POWER MODE not implemented, ignoring -n option

那么就无法获取U盘休眠状态。我尝试了多种创造性的东西,例如 USB 功耗或监视文件访问,但我没有发现可以验证驱动器的状态。

唯一的解决方案是将 USB SATA 适配器(或外壳)替换为具有不同 USB 桥接芯片的适配器。对我不起作用的那个使用了 JMicron JMS567 (152d:0578 / 0x152d 0x0578),它可能会被更新,但我无法测试它,因为更新工具需要一个 ARM CPU。现在我正在使用两个不同的适配器,它们都使用 Asmedia ASM1051E / ASM1053E / ASM1153 / ASM1153E 并且它们通过所有命令。

您可以检查您的 USB SATA 适配器/外壳的桥接芯片,如下所示:

lsusb -v | grep -E ': ID |idVendor|idProduct'

它返回如下内容:

Bus 002 Device 003: ID 174c:55aa ASMedia Technology Inc. ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge
  idVendor           0x174c ASMedia Technology Inc.
  idProduct          0x55aa ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge
于 2020-10-19T20:06:34.883 回答
0

我经常发现第二天早上驱动器仍在旋转。

这难道不是因为它在服务器时再次启动,例如。在夜间写入日志文件或其他内容?您可以尝试 sdparm,它可以返回驱动器的状态信息。但我认为最好在 BIOS 中设置一个选项,让你的 HD 在一段时间不活动后自动降速,这样更容易。

于 2008-12-23T14:41:33.580 回答
0

Have you tried stopping the drive with the following command:

eject -t /dev/yourHD

This works quite good for my USB hard drives.

于 2009-01-04T16:41:35.020 回答
0

如果hdparm -C /dev/sda说它drive state is: unknown不支持您的驱动器并且无法判断

您的其他问题(其他人已经回答)

  • 什么是使用驱动器?
    • lsof
    • 定影器
    • 触发器
  • 如何强制驱动器保持睡眠?
    • hdparm
    • 卸载
    • 您的设备在卸载时仍然可以被唤醒,但可能只能通过您执行的操作(smartctl、blkid 等)

相关:如果您的驱动器变热,您还可以自动暂停备份或其他一个小时。

于 2015-01-15T16:37:40.553 回答