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

CDu*_*Duv 5 ssd tmpfs rsyslog

为了避免对我的 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
Run Code Online (Sandbox Code Playgroud)

但从那以后我没有/var/log/syslog文件。

我认为这是因为/var/logrsyslogd启动时尚未安装,但是在手动重新启动服务时(当我确定/var/log已安装时)它仍然不起作用。

我正在使用:

  • Ubuntu 14.04.2
  • 内核 3.13.0-45
  • rsyslog 7.4.4-1ubuntu2.5

Dav*_*ter 3

/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
Run Code Online (Sandbox Code Playgroud)

您现在应该可以看到 中的其他内容/mnt/root/var/log

PS:如果您的机器除了 SSD 之外还有内置硬盘驱动器,则可以/var从那里安装。这就是我和许多其他人所做的,主要不是因为担心写周期。主要原因始终是,错误的程序可能会意外写入大量(日志)数据,/var并且在文件系统已满之前没有人会注意到,此时如果/var/.


Ели*_* Й. 1

您应该在文件中创建这些文件,/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
Run Code Online (Sandbox Code Playgroud)

上面的脚本位于该行之前:

exit 0
Run Code Online (Sandbox Code Playgroud)

该脚本在系统启动时创建那些必要的目录和文件。rsync如果您需要在系统重新启动之间保留这些目录,您还可以选择在关闭时使用这些目录进行同步。