gpt4 book ai didi

linux - 有没有办法检查 USB 驱动器是否已停止?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:28 26 4
gpt4 key购买 nike

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

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

[编辑] 我试过 sg_inq (如 sg_start 手册页所建议)但此命令始终返回 0。

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

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

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

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

最佳答案

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

  hdparm  -S 120  /dev/sda  

应该告诉驱动器在闲置约 10 分钟后自行休眠。

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

Nothing accesses the drive but the backup script.

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

常见的罪魁祸首是诸如 updatedb 扫描所有安装文件的工具,以及 famgamin 做一些时髦的事情来监视磁盘变化。

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

看到可能会醒来的东西

 lsof +D /mountpoint

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

您可能还应该进行惰性卸载

 umount -l /mountpoint 

因此,如果在执行 lsof| 期间有任何访问它的情况| grep 并调用 umount,它仍然会卸载驱动器并阻止能够读取它的东西。

HAL 和 friend 们

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

尝试一些有趣的东西,比如

lsof /dev/devicehere 

lsof /dev/devicehere1 

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

关于linux - 有没有办法检查 USB 驱动器是否已停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/388928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com