我的笔记本电脑中有一个 SSD 驱动器,我遵循了各种建议,将 /var/log /var/spool 和 /var/cache 放在 tmpfs 上,这样持续的读/写就不会缩短 SSD 的寿命。
但是,anacron 现在无法启动,并且 /var/log/syslog 中的错误消息显示
anacron[4169]: Can't chdir to /var/spool/anacron: No such file or directory
kernel: [ 3037.851604] init: anacron main process (4169) terminated with status 1
cups-pdf 有类似的问题并抱怨 /var/spool/cups-pdf 不存在。
我已经检查过 /var/spool/,确实这两个都不存在。
如果我手动创建这些目录,两个进程都会运行。但是我重启后,目录又消失了。
我怎样才能让它们永久存在?
答案1
好的,所以重启后,您在 tmpfs 上执行的任何操作都不会保留。这是因为 tmpfs 是临时的,仅存在于 RAM 中。系统运行时需要放在 tmpfs 上的任何内容都必须在每次系统启动时创建。大多数使用 /var 的进程都会这样做,但有些进程(例如 anacron 和 cups-pdf)似乎不会这样做。
要解决此问题,您必须创建一个脚本,在系统每次启动时创建这些目录。将以下内容复制到文本文件中,保存并使其可执行。
#!/bin/bash
# Script to create required directories in tempfs /var (that are not otherwise created)
# Thanks to http://blog.philippklaus.de/2011/02/ssd-optimizations-on-linux/ for the list below :-)
for dir in apparmor apt ConsoleKit cups dist-upgrade fsck gdm installer news ntpstats samba speech-dispatcher unattended-upgrades; do
if [ ! -d /var/log/$dir ] ; then
mkdir /var/log/$dir
fi
done
for dir in cups-pdf anacron; do
if [ ! -d /var/spool/$dir ] ; then
mkdir /var/spool/$dir
fi
done
接下来,你需要通过在 /etc/rc.local 中添加一行来使此脚本在系统每次启动时运行
我的脚本名为“make_required_dirs_on_tempfs.sh”,因此我只需将以下行添加到 rc.local 文件中即可。将其放在末尾,但在“exit 0”命令上方。
/PATH_TO_SCRIPT/make_required_dirs_on_tempfs.sh
我将脚本保存在“/mnt/data/config/scripts/start-stop”中,因此我的 /etc/rc.local 文件如下所示:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#if [ -d "/var/cache/apt/archives" ]; then echo "/var/cache/apt/archives exists"; else mkdir /var/cache/apt/archives; fi || die "Command failed: mkdir /var/cache/apt/archives"
/mnt/data/config/scripts/start-stop/make_required_dirs_on_tempfs.sh
exit 0
答案2
顺便说一下,我从“Jesse the Wind Wanderer”的脚本开始,然后添加了一些额外的目录和调整。我暂时禁用了 /tmp、/var/log 和 /var/spool 的 tmpfs,然后重新启动以查看非 tmpfs 场景中存在哪些日志文件和假脱机目录。
通过这样做,我能够检测到一些额外的目录和文件,这些目录和文件可能需要创建/存在,以使某些启动/ cron 作业正常工作。
就脚本中的所有权设置而言,我只是使用了非 tmpfs 场景中出现的相同所有权设置。
/bin/bash #!/bin/bash # 在 tempfs /var 中创建所需目录的脚本(未通过其他方式创建) # 感谢 http://blog.philippklaus.de/2011/02/ssd-optimizations-on-linux/ 提供以下列表 :-) 对于 apparmor 中的 dir apt ConsoleKit cups dist-upgrade fsck gdm hp installer lightdm news ntpstats samba Speech-dispatcher unattended-upgrades upstart;执行 如果 [ !-d /var/log/$dir ] ; 那么 mkdir /var/log/$dir 菲 完毕 触摸/var/log/apport.log chown root:adm /var/log/$i 对于我在 auth.log kern.log syslog 中 做 触摸/var/log/$i chown syslog:adm /var/log/$i 完毕 对于 anacron cron cups cups-pdf libreoffice lintian plymouth rsyslog 中的 dir;执行 如果 [ !-d /var/spool/$dir ] ; 那么 mkdir /var/spool/$dir 菲 完毕 cd /var/spool rm -f 邮件 ln -s /var/邮件 # 需要 rsyslog 来获取新创建的日志文件: sudo 服务 rsyslog 重启 /usr/bin/logger“(已完成为 tmpfs 创建所需的目录)”
并且,当然要让脚本可由 root 执行,并根据 Jesse 的指示从 rc.local 调用它。