为什么我的机械硬盘总会自动起转
现状
几百块买了个J1900主板,搭配上家里最早电脑的最早的DDR3内存条,本来初中时加了根内存条干到4G内存了,但是新的二十多块的淘宝内存条坏了导致不开机,尽管在老电脑上工作正常😮💨。这个电脑自买来刷上UbuntuServer就基本没关过,里面系统装在我买的一个二手固态硬盘上,那个固态硬盘金手指上是开有两个槽的,好像不是m.2接口,转接成SATA接口的盒子金手指上塑料也断了,反之接上还能用。机械硬盘是淘宝上买的50块钱500g那种,这种小机械硬盘投入小,不行了就拆来当摆件。每次我用hdparm -Y让硬盘停转之后过一阵子又会自启,可能和种子下载、jellyfin、smb有关,我每次发现时硬盘都自动转了数十天了。今天有空就让AI(讯飞星火)帮忙写了个脚本。
失败的其中一次尝试
问题
sudo hdparm -C /dev/sdb的输出是:
/dev/sdb:
drive state is: active/idle
或者:
/dev/sdb:
drive state is: standby
请注意这个输出前有一个空行
我需要一个在ubuntu系统下每两分钟自动执行的脚本,你可以分为一个脚本和我需要添加的sudo crontab中的一行
我希望在检测到 drive state is: standby转化为 drive state is: active/idle时在/home/zhaosn/disk.csv文件中添加一行,其由:
echo TZ=UTC-8 date +"%Y/%m/%d %H:%M:%S, %s, %z, "
的输出结果和sudo lsof /mnt/hdd的输出结果组合而来
回复
首先,我们需要创建一个脚本来检测硬盘状态并执行相应的操作。以下是脚本的内容:
1 |
|
将以上内容保存为一个名为check_disk_state.sh
的文件。接下来,我们需要为这个脚本添加可执行权限:
1 |
|
最后,我们需要将这个脚本添加到crontab中以便每两分钟自动执行一次。请运行以下命令以编辑crontab:
1 |
|
在打开的编辑器中,添加以下一行:
1 |
|
请将/path/to/
替换为check_disk_state.sh
文件的实际路径。保存并退出编辑器。现在,脚本将在每两分钟自动执行一次,并在检测到硬盘状态从standby变为active/idle时将相关信息追加到/home/zhaosn/disk.csv
文件中。
其实这个表现不好,如果我用ls访问硬盘,lsof是看不到的
换种思路
问题
我想在sudo lsof /mnt/hdd执行结果不为空时在/home/zhaosn/disk.csv文件中添加一行,其由:
echo TZ=UTC-8 date +"%Y/%m/%d %H:%M:%S, %s, %z, "
的输出结果和sudo lsof /mnt/hdd的输出结果组合而来。设置脚本需要root用户身份运行
回复
你可以使用以下脚本来实现你的需求:
- 创建一个名为
check_disk_state.sh
的文件,并将以下内容复制到该文件中:
1 |
|
保存并关闭文件。
为脚本添加可执行权限:
1 |
|
- 以root用户身份运行脚本:
1 |
|
这个脚本会持续监控/mnt/hdd
目录的lsof
结果,如果结果不为空,则在/home/zhaosn/disk.csv
文件中添加一行,该行由echo TZ=UTC-8 date +"%Y/%m/%d %H:%M:%S, %s, %z, "
的输出结果和sudo lsof /mnt/hdd
的输出结果组合而成。同时,脚本会每隔60秒检查一次。