Tmpfs 挂载另一个分区上的目录

Tmpfs 挂载另一个分区上的目录

我有/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 条目,则存在文件夹ldconfigyumfontconfig和。man当使用 tmpfs fstab 条目时,仅出现后两个。

我对此很好奇,因为:

  1. 我不明白何时使用绑定安装标志。
  2. 我有/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 操作,但这会更复杂。)

相关内容