移动硬盘保持硬盘激活避免休眠的方案

引言

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

WD Drive Utilties

黑盘
MyPassport

所以这个问题只能通过自己来解决了。

思路

思路一

找到硬盘的固件,修改固件使休眠停用或增加时间,重新写入固件。

但是这个固件不太好找,奈何能力有限,只能通过软件来实现了,所以这个思路可行性不是很高。

思路二

因为没有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

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

提交后需要审核才会公开。