引言
手里有个WD黑盘,游戏和一些备份在这个硬盘里,有时候玩游戏在通关或者切换地图时,会进行硬盘的IO操作,而这个硬盘它所谓的长时间不操作会自动进入休眠状态(马达停转),再进行IO操作时,会重新激活硬盘造成3-5秒的时间卡顿,而WD Drive Utilties并不能检测到这个硬盘。所以只能自己动手了。
WD Drive Utilties


所以这个问题只能通过自己来解决了。
思路
思路一
找到硬盘的固件,修改固件使休眠停用或增加时间,重新写入固件。
但是这个固件不太好找,奈何能力有限,只能通过软件来实现了,所以这个思路可行性不是很高。
思路二
因为没有IO操作,所以才会休眠,那么定时进行读操作,让硬盘的固件的休眠失效。
也就是说,每隔1分钟,对硬盘进行一次读操作。
这里有个思考,也是盲区,在这里提出来一下。
百度到的结果:硬盘的0磁道在最外圈
如果磁头再扇区的中间位置,那么读磁道0的时候,磁头一定会动的,那么这个时间消耗虽然不必计算,但是也是存在时间的,如果那个位置正好在缓存中,那么磁头就不用动了,对寿命的影响也就小了。
如果按照每隔1分钟对0磁道进行读操作,当时正在最内圈进行IO操作时,对硬盘的负载是什么样的呢?
这里我很热衷于读硬盘的扇区进行读取,因为如果读写文件的话,势必会和文件系统存在关系,根据索引或者其它先去找到文件所在的磁道,进而进行读写,所以这也是一个优势。

代码
import time
import psutil
import threading
def active():
counters = psutil.disk_io_counters(perdisk=True)
for i in counters:
with open(rf"\\.\{i}", 'rb') as f:
print("[i] Active Drive: " + str(i), end='')
print(f" >> 1bit[{f.read(1)}]")
time.sleep(60)
if __name__ == '__main__':
print("=============================================\n"
"| keep physical driver active |\n"
"=============================================\n")
while True:
thread = threading.Thread(target=active)
thread.start()
thread.join()


评论 0
还没有评论,来说点什么吧。