[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 改为放在根文件系统 / 中(即作为 / 下的一个普通目录),你需要做两件事:
- 停止使用内存中的
/tmp(卸载当前的tmpfs) - 让系统不再自动挂载
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 启动时添加 single 或 init=/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.d或cron任务)。 - 性能影响:
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 ~]#