tmpfs
tmpfs 是一种临时文件系统,它驻留在内存和/或交换分区中。将目录挂载为 tmpfs 可以有效地加快对这些文件的访问速度,或者确保其内容在重启后被自动清除。
用法
一些常用于 tmpfs(5) 的目录是 /tmp、/var/lock 和 /var/run。**不要** 在 /var/tmp 上使用它,因为该目录用于在重启后保留的临时文件。
Arch 使用 tmpfs /run 目录,而 /var/run 和 /var/lock 仅仅作为符号链接以保持兼容性。它也由默认的 systemd 设置用于 /tmp,并且除非需要特定配置,否则不需要在 fstab 中进行配置。
glibc 2.2 及以上版本期望 tmpfs 挂载在 /dev/shm 以支持 POSIX 共享内存。tmpfs 挂载在 /dev/shm 由 systemd 自动处理,不需要在 fstab 中手动配置。
通常,频繁执行读写操作的任务和程序可以使用 tmpfs 目录。某些应用程序甚至可以通过将部分(或全部)数据卸载到共享内存来获得显著的性能提升。例如,将 Firefox 配置文件迁移到 RAM 可以显著提高性能。
示例
默认情况下,tmpfs 分区的最大大小设置为可用 RAM 的一半,但可以覆盖此值。要显式设置最大大小,在此示例中覆盖默认的 /tmp 挂载,请使用 size 挂载选项。
/etc/fstab
tmpfs /tmp tmpfs rw,nodev,nosuid,size=2G 0 0
要指定更安全的挂载,请指定以下挂载选项。
/etc/fstab
tmpfs /www/cache tmpfs rw,size=1G,nr_inodes=5k,noexec,nodev,nosuid,uid=user,gid=group,mode=1700 0 0
有关更多信息,请参阅 tmpfs(5) man 手册页和 Security#File systems。
重启以使更改生效。请注意,虽然尝试运行 mount -a 可以立即使更改生效,但这将导致这些目录中当前存在的所有文件无法访问(这对于运行带有锁文件的程序尤其成问题)。但是,如果所有目录都为空,则运行 mount -a 而不是重启(或单独挂载它们)应该是安全的。
应用更改后,通过查看 /proc/mounts 并使用 findmnt 来验证更改是否生效。
$ findmnt /tmp
TARGET SOURCE FSTYPE OPTIONS /tmp tmpfs tmpfs rw,nosuid,nodev,relatime
tmpfs 也可以在无需重启的情况下临时调整大小,例如在需要运行大型编译作业时。在这种情况下,运行。
# mount -o remount,size=4G /tmp
或者根据 RAM 调整大小。
# mount -o remount,size=80% /tmp
禁用自动挂载
在 systemd 下,如果 /tmp 在 /etc/fstab 中尚未是专用挂载点(tmpfs 或磁盘),它会被自动挂载为 tmpfs。要禁用自动挂载,请 mask tmp.mount systemd 单元。
文件将不再存储在 tmpfs 中,而是存储在块设备上。/tmp 的内容现在将在重启之间保留(尽管仍然会在 10 天后清除),这可能不是期望的行为。要恢复之前的行为并在重启时自动清除 /tmp 目录,请考虑使用 tmpfiles.d(5)。
/etc/tmpfiles.d/tmp.conf
# see tmpfiles.d(5) # always enable /tmp directory cleaning D! /tmp 1777 root root 0 # remove files in /var/tmp older than 10 days D /var/tmp 1777 root root 10d # namespace mountpoints (PrivateTmp=yes) are excluded from removal x /tmp/systemd-private-* x /var/tmp/systemd-private-* X /tmp/systemd-private-*/tmp X /var/tmp/systemd-private-*/tmp
故障排除
以 root 用户身份打开 tmpfs 中的符号链接失败
考虑到 /tmp 使用 tmpfs,请将当前目录更改为 /tmp,然后创建一个文件,并在同一 /tmp 目录中创建该文件的符号链接。由于 /tmp 设置了 sticky bit,尝试读取符号链接时会遇到“权限被拒绝”错误。
此行为可以通过 /proc/sys/fs/protected_symlinks 控制,或通过 sysctl:sysctl -w fs.protected_symlinks=0。要使其永久生效,请参阅 Sysctl#Configuration。
技巧与提示
分配更多内存以适应 /run/user/xxxx 中的配置文件
控制 /run/user/ 中 tmpfs 大小的标准方法是使用 /etc/systemd/logind.conf 中的 RuntimeDirectorySize 指令(更多信息请参阅 logind.conf(5))。默认情况下,使用物理内存的 10%,但可以安全地增加它。请记住,tmpfs 只消耗实际使用的部分;此处指定的数字仅为允许的最大值。