我当时正在同时编译 2 个内核,但编译过程停止了。原因:/tmp 目录已满。我用 df 检查了一下……/tmp 的大小固定为 2GB!(我的 PC 有 4GB 的 RAM)为什么?我甚至没有 /tmp 分区……我该如何改变这种情况?
File system 1K-blocks Usati Disponib. Uso% Montato su
/dev/sda5 35431432 13651652 19973276 41% /
dev 1989592 0 1989592 0% /dev
run 1992432 976 1991456 1% /run
tmpfs 1992432 280 1992152 1% /dev/shm
tmpfs 1992432 0 1992432 0% /sys/fs/cgroup
tmpfs 1992432 1436412 556020 73% /tmp
答案1
/tmp
如果按原样安装,则对大小进行限制tmpfs
,以防止 DOS 攻击。如果某个服务受到威胁或某个用户恶意,他们只需写入即可,/tmp
直到所有交换和内存都被占用。
由于 OOM 条件不适用于文件,因此进程将被终止,直到恶意用户 shell 被终止(由于内存不足,他将无法登录)或受感染的服务被终止。在这个阶段,系统会变得太慢,管理员除了重新启动之外无法做任何事情,这会抹去证据,从而使其成为有效的 DOS 技术。
如果没有/tmp
单独挂载,则会发生稍微不同的问题。/
分区满了可能会导致系统无法启动,在非常糟糕的情况下(例如 glibc 更新),可能需要更多修复。
虽然这些问题对于多系统来说可能很严重,但对于桌面用户来说,也有理由阻止它。例如,我曾经使用过一个程序,它试图在 512 MiB 是大量 RAM 的情况下写入几 GB 的文件,如果 RAM 是tmpfs
无限的,这将导致系统无法使用。这样,它只会给程序本身和其他试图写入的人带来问题/tmp
。
tmpfs 的 50% RAM 允许将 50% 的 RAM 用于其他操作(例如运行程序),从而避免大量交换。由于通常假设保存在那里的信息量最少(我的系统上是 41M),但需要快速访问,这是使用 tmpfs 的首要原因(启用它后无需在重启后保留它)。因此,50% 是“合理的”,既可以在高峰/tmp
使用情况下留出大量空闲空间,又可以同时防止系统变慢。
正如 abdelsaid 所述,您可以更改设置/etc/fstab
:
none /tmp tmpfs size=2G 0 0 # Change the size= parameter to whatever you want
PS. 您要在哪里编译内核(在 中/tmp
)?通常,您会使用用户权限编译它们并保存结果,以防您需要第三方模块等。gcc 应保留最少的文件,/tmp
从而避免整个问题。
一旦在 4GB 系统上使用 4 GB,/tmp
您的系统速度就可能会显著下降(尤其是当您使用重量级桌面环境时)。
答案2
默认情况下,RHEL 和大多数 Linux 发行版会将 tmpfs(基于 RAM 的临时文件系统)挂载到 /dev/shm 目录,并且此临时文件系统的大小始终为设置为安装内存的一半。
来源:http://www.walkernews.net/2010/05/04/how-to-resize-devshm-filesystem-in-linux/
您可以通过在 /etc/fstab 中指定 size=... 来更改这种情况:
例如2GB:
tmpfs /dev/shm tmpfs defaults,size=2g 0 0
例如4GB:
tmpfs /dev/shm tmpfs defaults,size=4g 0 0
答案3
如果你不想将 /tmp 挂载在 tmpfs 中,请在 /etc/fstab 中查找类似如下的一行:
tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0
如果存在则删除。
根据发行版的不同,它也可能在 /etc/default/tmpfs 或 /etc/default/rcS 中进行配置。编辑该文件,如果存在以下行,请对其进行注释(前面加上 #):
RAMTMP=yes