/var/log 作为 tmpfs 挂载,无法在 FreeBSD 上卸载

/var/log 作为 tmpfs 挂载,无法在 FreeBSD 上卸载

我已/var/log挂载为 tmpfs,其中日志文件由 FreeBSD 上的 cron 定期同步到磁盘。该过程由脚本完成rc

我将其安装为:

mount -t tmpfs -o nosuid,noexec,mode=0755,size=100M log /var/log

现在的问题是 - 卸载它。它无法卸载,因为(r)syslog写入文件。 lsof 显示了这一点:

 lsof /var/log/
lsof: WARNING: compiled for FreeBSD release 11.1-RELEASE-p6; this is 11.1-RELEASE.
COMMAND    PID USER   FD   TYPE         DEVICE SIZE/OFF NODE NAME
rsyslogd 85515 root    2w  VREG 255,2264924190      210   13 /var/log/security
rsyslogd 85515 root    4w  VREG 255,2264924190      210    3 /var/log/auth.log
rsyslogd 85515 root    5w  VREG 255,2264924190     2292    7 /var/log/kern.notice
rsyslogd 85515 root    6w  VREG 255,2264924190     2292   11 /var/log/messages
rsyslogd 85515 root    7w  VREG 255,2264924190     2292    5 /var/log/debug.log

因此,为了卸载它,首先我必须停止 syslog 守护进程。但是,我正在寻找一些更好的解决方案,因为此操作是由 sh rc 脚本本身管理的。

在 Linux/GNU Os 上umount有一个非常方便的论点: --lazy detach the filesystem now, clean up things later

,据我所知,等待活动进程停止对文件系统的读写,并且然后卸载它的过程,这将导致成功并且不会破坏脚本。

因此,作为解决此问题的方法,如何停止 syslog 临时写入 /var/log ?我尝试过发出STOP、尝试卸载并CONT发出信号,但没有效果。

Lsof 仍然报告有 FD 可供写入。请注意,我需要可以从脚本应用的解决方案sh

谢谢!

编辑

umount 有--force参数,在正常情况下我会不惜一切代价避免这种情况。但由于这是一个tmpfs并且从内存而不是块设备运行,我相信它不会造成任何损害。

几次测试表明没有问题。我通过在 tmpfs 上创建虚拟文件dd,检查它们的总和,将它们同步到硬盘,然后强制卸载来做到这一点。哈希值匹配,这意味着文件没有损坏。

嗯,这有点肮脏的解决方法,但我不知道其他解决方案。如果有人对 ram fs 上的此方法有一些缺点,请告诉我。

ps:感谢@layer8problem 的建议:-)

相关内容