Linux 挂载点:把 /tmp 放在 / 中

[root@anolis-23-1 kubernetes]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/ao_anolis-root   95G  7.3G   88G   8% /
devtmpfs                    4.0M     0  4.0M   0% /dev
tmpfs                       2.0G     0  2.0G   0% /dev/shm
tmpfs                       784M  484K  783M   1% /run
tmpfs                       2.0G  2.0G     0 100% /tmp
/dev/sda2                   960M  182M  779M  19% /boot
tmpfs                       392M  4.0K  392M   1% /run/user/0
[root@anolis-23-1 kubernetes]# 

要把 /tmp 从独立的 tmpfs 改为放在根文件系统 / 中(即作为 / 下的一个普通目录),你需要做两件事:

  1. 停止使用内存中的 /tmp(卸载当前的 tmpfs
  2. 让系统不再自动挂载 tmpfs/tmp(修改 /etc/fstab 或相关 systemd 单元)

具体操作步骤(推荐在单用户模式或救援模式下操作,以避免进程占用问题)

1. 清理当前 /tmp 内容并卸载

由于 /tmp 已满(使用率 100%),你需要先删除其中的文件才能正常卸载。

# 删除 /tmp 下所有内容(如果确认没有重要数据)
rm -rf /tmp/*

# 卸载 /tmp
umount /tmp

如果提示 target is busy,说明有进程正在使用 /tmp。可以通过以下命令找出占用进程并停止它们:

lsof /tmp 2>/dev/null
# 或者
fuser -vm /tmp

然后 kill 相关进程,或者最简单的方法是重启进入单用户模式(在 GRUB 启动时添加 singleinit=/bin/bash)。

2. 确保根文件系统下有 /tmp 目录

卸载后,原来的 /tmp 目录应该还在(只是作为普通空目录存在)。如果不存在,重新创建:

mkdir -p /tmp
chmod 1777 /tmp   # 设置粘滞位,保证普通用户可以创建文件但不能删除别人的文件

3. 修改 /etc/fstab,禁止自动挂载 tmpfs 到 /tmp

打开 /etc/fstab,找到类似下面这行:

tmpfs /tmp tmpfs defaults,size=2G 0 0

将它注释掉(行首加 #),或者直接删除。

如果系统使用 systemd 的 tmp.mount 单元(例如某些发行版默认启用),还需要禁用它:

systemctl mask tmp.mount

这样可以防止 systemd 在启动时再次挂载 tmpfs。

4. 重启系统

reboot

重启后,/tmp 就会成为根文件系统下的普通目录,空间与 / 共享(你的根分区有 95G,使用率 8%,可用空间充足)。

验证

df -h /tmp

输出应该显示 /tmp 挂载在 /dev/mapper/ao_anolis-root 上,使用根分区的空间。

注意事项

  • 安全风险:如果 /tmp 不再使用内存文件系统,而是放在磁盘上,可能会增加磁盘 I/O,并且需要定期清理(可以配置 tmpfiles.dcron 任务)。
  • 性能影响tmpfs 基于内存,速度快;放在磁盘上会变慢。如果你的系统对 /tmp 的读写很频繁(例如编译、容器临时文件),可能会影响性能。建议评估后再做修改。
  • 已有进程的临时文件:某些软件假定 /tmp 是临时且重启清空的,改成磁盘后需要手动清理。你可以继续使用 systemd-tmpfiles 来定期清理 /tmp,默认配置通常已经包含 /tmp 的清理规则(例如 /usr/lib/tmpfiles.d/tmp.conf 中会清理 10 天未访问的文件)。

如果你想在不重启的情况下立刻生效(不修改 fstab 永久配置):

rm -rf /tmp/*
umount /tmp
mount --bind / /tmp   # 这不是好方法,会混乱,不推荐

所以最好还是修改 fstab + 重启。

[root@anolis-23-1 ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/ao_anolis-root   95G  7.8G   88G   9% /
devtmpfs                    4.0M     0  4.0M   0% /dev
tmpfs                       2.0G     0  2.0G   0% /dev/shm
tmpfs                       784M  492K  783M   1% /run
/dev/sda2                   960M  182M  779M  19% /boot
tmpfs                       392M  4.0K  392M   1% /run/user/0
[root@anolis-23-1 ~]#