Loading... > 本文转自:http://www.mkitby.com/2016/05/15/raspberry-pi-nas-manage-hdd-power/ > > 使用树莓派3b和一块旧式笔记本ide硬盘实验,发现hd-idle可行。 为了延长硬盘使用寿命,当硬盘不使用时,需要让硬盘休眠,目前有一些软件可以自动做这事,像 hdparm, hd-idle 和 sdparm,具体用哪个取决于USB to SATA控制器和硬盘本身,其实说白了就是一个一个试,哪个有用就用哪个。当然,这里说的都是机械硬盘,固态硬盘没研究过。 注意:不要让机械硬盘频繁地休眠唤醒,这样会给电机和轴承较大负荷,会加剧硬盘损耗. 一般制造商建议的最小休眠时间是 3-5 分钟。参考([http://hd-idle.sourceforge.net/)](http://hd-idle.sourceforge.net/%EF%BC%89) 首先查看硬盘设备名,一般就是/dev/sda,dev/sdb之类的 ``` sudo blkid ``` 例如输出 ``` /dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="15CD-3B79" TYPE="vfat" /dev/mmcblk0p2: UUID="13d368bf-6dbf-4751-8ba1-88bed06bef77" TYPE="ext4" /dev/sda1: UUID="7e623443-f19a-4564-8e60-e9d2170ac32a" TYPE="ext4" /dev/sdb1: LABEL="COLORSPACE" UUID="F8E6-4FDB" TYPE="vfat" /dev/sdb2: UUID="3007-F316" TYPE="exfat" ``` 硬盘设备名为/dev/sdb,硬盘有两个分区 # 安装和配置hdparm 先测试hdparm是否支持。 安装 hdparm, ``` sudo apt-get install hdparm -y ``` 确保你的硬盘支持hdparm, ``` sudo hdparm -y /dev/sdb ``` 如果输出如下结果,就表明支持, ``` /dev/sdb: issuing standby command ``` 如果看到类似如下输出,就表明不支持,可以跳到 hd-idle 或者 sdparm, ``` /dev/sda: issuing standby command SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ``` 检查硬盘是否支持写缓存功能, ``` sudo hdparm -I /dev/sdb | grep 'Write cache' ``` 如果看到 * (星号),表示支持, ``` * Write cache ``` 如果没有看到 * (星号),表示不支持, ``` Write cache ``` 编辑配置文件, ``` sudo vim /etc/hdparm.conf ``` spindown_time值乘以 5 得到总的时间(单位秒). 例如想配置成空闲10分钟就休眠,spindown_time = 10 * 60 / 5 = 120 在文件结尾加入, ``` /dev/sdb { write_cache = on spindown_time = 120 } ``` 如果不支持写缓存,去掉 write_cache = on。 重启 hdparm 服务, ``` sudo service hdparm restart ``` 更多hdparm配置可以参考这(<http://www.linux-magazine.com/Online/Features/Tune-Your-Hard-Disk-with-hdparm>) # 安装和配置 hd-idle 如果你的硬盘不支持 hdparm,或者就想试下hd-idle, 可以删除hdparm ``` sudo apt-get remove hdparm -y ``` hd-idle 使用一个特殊的系统文件来检测磁盘活动, 如果没有这个文件,那么就不能使用hd-idle。输入 ``` cat /proc/diskstats ``` 应该会看到如下的输出, 如果提示找不到文件或目录,那就不支持hd-idle。 8 16 sdb 5604 130363 146538 16780 1814 51838 429152 763380 0 18230 780150 8 17 sdb1 5075 130363 139418 15370 8 0 8 10 0 8680 15370 8 18 sdb2 512 0 6984 1290 1805 51838 429144 763360 0 9770 764650 hd-idle的自己编译, ``` sudo apt-get install build-essential fakeroot debhelper -y ``` 获取源代码, ``` wget http://sourceforge.net/projects/hd-idle/files/hd-idle-1.05.tgz ``` 解压缩进入目录 ``` tar -xvf hd-idle-1.05.tgz && cd hd-idle ``` 编译安装, ``` dpkg-buildpackage -rfakeroot sudo dpkg -i ../hd-idle_*.deb ``` 继续检查硬盘是否支持hd-idle, ``` sudo hd-idle -i 0 -a sda -i 300 -d ``` 你会看到如下输出: probing sda: reads: 13418, writes: 594344 probing sdb: reads: 146538, writes: 429152 按 Ctrl+C 停止 hd-idle 编辑配置文件, ``` sudo vim /etc/default/hd-idle ``` 修改下面来开启hd-idle ``` START_HD_IDLE=true ``` 调整空闲时间为10分钟 (60 秒 * 10) ``` HD_IDLE_OPTS="-i 0 -a sda -i 600" ``` 重启服务, ``` sudo service hd-idle restart ``` 如果hd-idle也不支持,可以试下 sdparm # 安装和配置 sdparm 首先删除 hdparm 和 hd-idle ``` sudo apt-get remove hdparm -y sudo dpkg -r hd-idle ``` 安装 sdparm ``` sudo apt-get install sdparm -y ``` 测试sdparm是否支持,停止一切硬盘操作,输入 ``` sydo sdparm --flexible --command=stop /dev/sdb ``` 应该可以看到如下输出, ``` /dev/sdb: SANHO IUSBPORT 0 ``` 如果需要每隔10分钟休眠硬盘,可以用如下crontab命令 ``` sudo crontab -l | { cat; echo "/10 * * * * sdparm --command=stop /dev/sda"; } | sudo crontab - ``` 经过以上折腾,终于可以放心了,不用担心硬盘一天24小时不要命的转。 # 参考 <http://sg.danny.cz/sg/sdparm.html> <http://www.nslu2-linux.org/wiki/FAQ/SpinDownUSBHarddisks> <http://hd-idle.sourceforge.net/> Last modification:October 24, 2019 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏
7 comments
感谢分享
service hdparm restart之后报错“Failed to restart hdparm.service: Unit hdparm.service not found”, 网上也没找到解决方案。::>_
Failed to restart hdparm.service: Unit hdparm.service not found
目前看来hd-idle是有效的,谢谢。
1、已经试过/etc/systemd/sytem 下添加hparm.service,Type=simple也不行,不太懂这方面,也没查到相关信息。
2、配置在/etc/hdparm.conf也没有起作用,有找到帖子说要设置-B=127,但是我设置后,硬盘会频繁的休眠唤醒。
目前没有别的排查方向了,只有晚上回去试试hd-idel了
非常有用,我的NAS上一块老蓝盘连续工作两个月就直接崩掉了。