我有/var
一个 10Gb EXT4 分区,与/
.我想/var/cache
使用 tmpfs 保存在 RAM 中。该/etc/fstab
条目非常简单:
tmpgs /var/cache tmpfs size=500M,rw,nodev,nosuid,noexec,noatime 0,0
但是,我注意到如果没有此条目,du -sh
磁盘大小将显示为:
# du -sh /var/cache
215M /var/cache
然而,如果我应用上面的fstab
条目,重新启动并du -sh
再次运行,我会得到:
# du -sh /var/cache
160K /var/cache
如果没有 tmpfs 条目,则存在文件夹ldconfig
、yum
、fontconfig
和。man
当使用 tmpfs fstab 条目时,仅出现后两个。
我对此很好奇,因为:
- 我不明白何时使用绑定安装标志。
- 我有
/run
一个 tmpfs 挂载,现在我不太确定该挂载的内容是否与没有挂载时出现的内容相同。
为什么是这样?
答案1
由于您/var/cache
在 中列出,tmpfs 文件系统在引导序列期间/etc/fstab
被挂载。/var/cache
的任何内容/var/cache
都会被安装点遮蔽。挂载另一个文件系统的目录下的文件仍然存在,但无法访问它们,因为类似的路径/var/cache/foo
会进入另一个文件系统。
有关df
和之间差异的更多信息du
,请参阅为什么有这么多不同的方法来测量磁盘使用情况?
在 Linux 上,您可以/var/cache
通过创建一个绑定挂载的/var
。您可以使用它来删除不再使用的旧缓存文件:
mount --bind /var /mnt
rm -r /mnt/cache/*
umount /mnt
我不确定你的意思/run
,但请注意,每次安装 tmpfs 文件系统时,你都会得到一个不同的文件系统。因此/run
和/var/cache
是不相关的,一个文件不可能出现在另一个文件中。它们是两个文件系统,恰好由同一驱动程序提供。
答案2
挂载隐藏或遮蔽给定目录中已存在的任何内容(如果遮蔽目录的权限错误,这可能会导致有趣的问题)。所以当tmpfs挂载被移除时,原来的东西还会在那里。 (如果缓存需要持久化,您可以 mv /var/cache /var/cache.save,然后在 tmpfs 首次安装之后和卸载之前执行 rsync 操作,但这会更复杂。)