将 /var/log 移至 tmpfs 后没有 /var/log/syslog 文件

将 /var/log 移至 tmpfs 后没有 /var/log/syslog 文件

为了避免无用地写入我的 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

此时将任何东西移入/vartmpfs 都不是好主意,因为目前 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此脚本在系统启动时创建必要的目录和文件。如果您需要在系统重启后保留这些目录,您也可以选择在关机时同步这些目录。

相关内容