我正在安装一个非常小的服务器,其中有 512mb CF 汽车作为高清。我不仅没有足够的空间,而且我想尽量减少对磁盘的写入。
我想完全清除 /var/log 目录并使其只读(写保护)。
如果我这样做,系统会挂起吗?
答案1
我不会将其设置为只读,而是将其创建/var/log
为 tempfs。并定期修剪。当然,只有当您有足够的备用 RAM 时,这才有效。
您可以对其他可能的非必要目录执行相同的操作,例如/var/tmp
我的条目/etc/fstab
(现已注释掉):
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777,size=128M 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=0755,size=128M 0 0
答案2
根据Debian FHS(文件系统层次结构标准),/var/log 必须可写。启动时,系统本身必须能够写入该目录中的日志。您可以将 /usr 设置为只读,但 /var 应该安装为可写。
要回答您在文章中提出的问题,是的,系统将在启动时挂起。内核将尝试写入 dmesg,如果无法写入,则会挂起。
答案3
如果您打算将其设置为只读,那么它就毫无价值。您应该控制记录的方式和内容。
如果空间不足,您可能需要一个单独的、大小合理的 /var 分区,并选择一个可以处理大量小文件的文件系统,例如 ReiserFS 等。
答案4
正如我在评论中所述,可写性/var/log
很重要,但您可以采取一些措施来确保保存尽可能少的内容。例如,您可以配置logrotate
为根据日志文件的大小轮换日志文件,压缩旧文件。您还可以配置syslog
为仅将CRIT
和 以上写入日志(其余的将被丢弃)
logrotate
例子:
compress
/var/log/messages {
rotate 5
size 100k
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
(您还需要配置logrotate /etc/logrotate.conf
为在 cronjob 中运行)。
rsyslog.conf
例子:
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.crit /var/log/messages
*.emerg *
这可能是最好的中间立场,因为几乎没有记录任何内容,但您仍然会收到重要事件的通知。如果日志保留很重要,您还可以考虑将远程系统日志配置到具有更大存储空间的服务器。