/var/log
我想使用overlayfs,而不是仅仅安装tmpfs 。
- /var/log 是可写的 tmpfs,但包含文件在 tmpfs 挂载之前就存在。这些旧文件不在 tmpfs 内存中,而是在较低层中。
- 仅更改存储在 tmpfs 中,而旧的和未修改的文件存储在 SSD 上
- 有时应该可以将更改写入 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,而且效果非常好。它按照我提供的时间表同步到闪存驱动器