将/var/logs挂载为tmpfs,有时借助overlayfs来保存更改

将/var/logs挂载为tmpfs,有时借助overlayfs来保存更改

/var/log我想使用overlayfs,而不是仅仅安装tmpfs 。

  1. /var/log 是可写的 tmpfs,但包含文件在 tmpfs 挂载之前就存在。这些旧文件不在 tmpfs 内存中,而是在较低层中。
  2. 仅更改存储在 tmpfs 中,而旧的和未修改的文件存储在 SSD 上
  3. 有时应该可以将更改写入 SSD,例如通过 cron。这应该释放 tmpfs 内存

因此,结果应该是:日志写入 RAM,新旧引导日志可通过同一路径访问。有时,更改会通过脚本写入磁盘。

重点是要加快一点速度,并确保 SSD 免受多次写入的影响。

我在 puppy linux 中看到了类似的事情,不是日志,而是对 root 的所有更改,但如果不安装它就不能做同样的事情,文档没有帮助)

我将根据答案对浏览器 cookie/缓存执行相同的操作。但持久写入将在浏览器关闭时完成。无法关闭浏览器缓存,至少需要小缓存才能在我的 Web 开发中出现与用户因缓存而出现的相同错误。

答案1

设法使 /var/log 覆盖,它显示 SSD 日志文件和更改。所有更改都保存在 RAM 中。稍后我将进行同步,通过将上层复制到下层,每小时更改都会变得永久。

#prepare layers
sudo mkdir -p /var/log.tmpfs
sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512m,mode=0775 tmpfs /var/log.tmpfs
sudo mkdir -p /var/log.tmpfs/upper
sudo mkdir -p /var/log.tmpfs/work
sudo chown -R root:syslog /var/log.tmpfs
sudo chmod -R u=rwX,g=rwX,o=rX /var/log.tmpfs

#prepare overlay
sudo mkdir -p /var/log.overlay
sudo chown root:syslog /var/log.overlay
sudo chmod u=rwX,g=rwX,o=rX /var/log.overlay

#start overlay
sudo mount -t overlay -o rw,lowerdir=/var/log,upperdir=/var/log.tmpfs/upper,workdir=/var/log.tmpfs/work overlay /var/log.overlay
sudo mount --bind /var/log.overlay /var/log

要使更改持久化,需要卸载绑定/var/log,复制文件,然后再次绑定。

答案2

虽然 LeonidMew 接受的答案几乎是完美的,但我想提供一种无需重新安装即可持久更改的方法。

# prepare layers
sudo mkdir -p /var/log.tmpfs
sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512m,mode=0775 tmpfs /var/log.tmpfs
sudo mkdir -p /var/log.tmpfs/upper
sudo mkdir -p /var/log.tmpfs/work
sudo chown -R root:syslog /var/log.tmpfs
sudo chmod -R u=rwX,g=rwX,o=rX /var/log.tmpfs

# create a bind mount to the parent directory of the log folder
# since mount --bind does not mount recursively when used on the
# parent, we can use this to preserve access to the real /var/log
# on the disk
sudo mkdir -p /tmp/realvar
sudo mount --bind /var /tmp/realvar

# mount overlay using this new mountpoint as lowerdir
sudo mount -t overlay -o rw,lowerdir=/tmp/realvar/log,upperdir=/var/log.tmpfs/upper,workdir=/var/log.tmpfs/work overlay /var/log

使用此方法 /tmp/realvar/log 用作较低目录,即使安装了覆盖层也仍然可以访问。我们可以使用这个挂载点来同步更改:

sudo rsync -vaz --delete /var/log/ /tmp/realvar/log

感谢 LeonidMew 的好主意。这个概念对于 Raspberry Pi 来说非常有用,可以减少 SD 卡上的写入周期,同时在意外断电的情况下仍保留大部分日志。

答案3

我可以建议任何东西同步守护进程。这是相当不错的工作。

https://wiki.archlinux.org/index.php/anything-sync-daemon

从文档来看,

everything-sync-daemon (asd) 是一个微小的伪守护进程,旨在管理从现在开始在 tmpfs 中称为同步目标的用户指定目录,并定期将它们同步回物理磁盘 (HDD/SSD)。这是通过符号链接步骤和 rsync 的创新使用来实现的,以保持 tmpfs 副本和媒体绑定备份之间的同步。此外,asd 还具有多种崩溃恢复功能。

答案4

为了最大限度地减少闪存驱动器写入,我正在使用log2ram,而且效果非常好。它按照我提供的时间表同步到闪存驱动器

相关内容