当我的系统上没有用户时,我希望硬盘可以进入低功耗状态。我意识到这可能无法连续 24 小时 100% 实现,但系统在不使用时可以保持空闲几个小时似乎是合理的。
我的系统是无头的,并且运行有限数量的服务。主要服务是:exim4、mythtv-backend、nfs、samba、cups、apt-cacher-ng
假设驱动器已启用进入待机模式。另外,增加写回超时时间也是不可接受的,因为我的系统没有 UPS。
答案1
hdparm让您设置驱动器的旋转时间(磁盘进入待机模式之前不活动的时间)或将其置于待机或睡眠状态。
# set spindown time for sda drive to 1 min
sudo hdparm -S 12 /dev/sda
# set sdb drive to standby mode
sudo hdparm -y /dev/sdb
# put sdc drive to sleep
sudo hdparm -Y /dev/sdc
# check drive state (active/standby/sleeping)
sudo hdpam -C /dev/sdc
/etc/hdparm.conf包含在启动时自动运行的 hdparm 命令。以下是我的一个代码片段:
/dev/sda {
# apm 127: Highest performance that allows spindown
apm = 127
# spindown 120 = 10 min
spindown_time = 120
}
并非所有命令都适用于所有硬盘型号,您需要进行试验。
笔记本模式也适用于非笔记本电脑,其目的是让磁盘尽可能处于睡眠状态。
电源TOP是一个用于追踪不必要的后台活动的实用程序。
lesswatts.org有许多关于硬盘减速的提示。
写回超时:据我所知,如果不 a) 增加写回超时和 b) 禁用系统日志同步,主磁盘就不可能空闲。
一种解决方法可能是使用 SSD 作为根磁盘,因为它们的电量本来就比较低?
追踪活动:可以根据以下信息调试磁盘访问来自哪里:laptop-mode 常见问题- 参见 5 Spinup 调试。
引用:
我的磁盘一直在旋转,但我不知道是什么原因造成的。我可以调试它吗?
是的,你可以。但首先,请检查你是否已将 syslog.conf 修改为不同步,如上一节的最后一个问题所述。要调试磁盘活动,你可以执行以下操作:
echo 1 > /proc/sys/vm/block_dump
(警告:你执行此操作之前必须禁用 syslogd或者您必须确保内核输出未被记录。如果您忘记了这一点,您的系统可能会陷入反馈循环,其中 syslogd 导致磁盘活动,这导致内核输出,这导致 syslogd 进行更多磁盘活动,等等!)
这将在内核中启用文件/磁盘活动调试。您可以使用 dmesg 读取输出。完成后,使用以下命令禁用块转储
echo 0 > /proc/sys/vm/block_dump
禁用 syslogd 同步:请参阅笔记本电脑模式常见问题解答和 lesswatts.org /etc/syslog.conf
。
在最近的 Ubuntu 中这个文件不存在,请改为查找/etc/rsyslog.d/*.conf
。
语法是相同的 - 在每个日志文件前面加上破折号,如下所示:
kern.* -/var/log/kern.log
dirty_writeback_centisecs
这将关闭 syslog 守护进程的同步,这意味着日志将以间隔(默认每 5 秒)写入磁盘,而不是每次有新的日志条目时写入。
答案2
如果您有足够的 RAM,您可以使用 tmpfs 将临时文件系统移动到内存。编辑 /etc/fstab 并添加:
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
答案3
在我的笔记本电脑上,我将 /var/log 安装到 tmpfs ram 驱动器。这样可以大大减少磁盘写入,但当然,重新启动时所有日志消息都会被丢弃。当您运行 exim 等服务时,您可能不希望出现这种情况。
tmpfs /var/log tmpfs defaults,noatime,mode=1777 0 0
并在 /etc/rc.local
mkdir /var/log/apt
答案4
将其安装到noatime
更多 RAM 也有帮助(更大的缓冲区和缓存)