- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我写了一个脚本来每晚备份我服务器的硬盘。在脚本结束时,我同步,等待几分钟,同步,然后我发出 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
扫描所有安装文件的工具,以及 fam
或 gamin
做一些时髦的事情来监视磁盘变化。
如有疑问,请在执行脚本之前安装设备并在完成后卸载它,以增加确定性。
看到可能会醒来的东西
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/
我是一名优秀的程序员,十分优秀!