为了避免无用地写入我的 SSD,我已通过以下方式移动/var/log
(和/tmp
)到 RAM /etc/fstab
:
cat >> /etc/fstab <<'EOT'
tmpfs /tmp tmpfs defaults,size=1g 0 0
tmpfs /var/log tmpfs defaults,nosuid,nodev,noatime,mode=0755,size=5% 0 0
EOT
但从那以后我就没有任何/var/log/syslog
档案了。
我认为这是因为启动/var/log
时尚未安装rsyslogd
,但手动重新启动服务时仍然不起作用(当我确定/var/log
已安装时)。
我在用着:
- Ubuntu 14.04.2
- 内核 3.13.0-45
- rsyslog 7.4.4-1ubuntu2.5
答案1
此时将任何东西移入/var
tmpfs 都不是好主意,因为目前 Ubuntu 和任何其他主流 Linux 发行版都不支持它。它还有一个缺点,就是占用主内存并丢失所有以前的日志文件,这会妨碍问题诊断。SSD 驱动器在写入周期方面确实不那么敏感,一些日志文件不会产生足够的数据和写入操作,从而显著缩短 SSD 的使用寿命。很少有 SSD 会因为写入周期耗尽而出现故障。
我怀疑/var/log/syslog
仍然存在,但只存在于根文件系统上,因为rsyslog
在 之前启动/var/log
。当您在 处挂载另一个文件系统时/var/log
,其先前的内容隐藏在下面。
作为一种解决方法,您可以将根文件系统绑定到其他位置,这样您就可以检查未被其他挂载点遮蔽的内容:
sudo mkdir -p /mnt/root
sudo mount --bind / /mnt/root
您现在应该可以看到 中的其他内容/mnt/root/var/log
。
PS:如果您的机器除了 SSD 之外还有内置硬盘驱动器,则可以/var
从那里安装。我和许多其他人都是这么做的,主要原因并不是担心写入周期。主要原因始终是,错误的程序可能会意外地写入大量(日志)数据,/var
而没有人会注意到,直到文件系统已满,此时很难缓解这种情况,如果/var
是其中的一部分/
。
答案2
您应该在/etc/rc.local
文件中创建如下文件:
# Restore tmpfs directories for logs.
# Extend the following directories to your needs according to installed packages
for dir in apparmor apt cups dist-upgrade fsck gdm installer samba unattended-upgrades upstart ;
do
if [ ! -e /var/log/$dir ] ; then
mkdir /var/log/$dir
fi
done
# Restore syslog files
for file in debug mail.err mail.log mail.warn syslog ;
if [ ! -f /var/log/$file ] ; then
touch /var/log/$file
chown syslog:adm /var/log/#file
fi
done
# Set owners for the newly created log directories
chown root:adm /var/log/samba
以上脚本位于以下行之前:
exit 0
rsync
此脚本在系统启动时创建必要的目录和文件。如果您需要在系统重启后保留这些目录,您也可以选择在关机时同步这些目录。