Linux RAM/TMP、FS 上的剩余空间

Linux RAM/TMP、FS 上的剩余空间

最近,我开始相信运行 Parted Magic Live CD 时发生的许多不寻常的情况是由于基于 RAM 的文件系统空间不足造成的,即:

  • 文件夹内容消失,稍后又重新出现
  • Mount-gtk不显示单个安装的驱动器/不允许卸载(当 bashmount命令正常运行时)
  • Firefox 冻结了,然后似乎冻结了 GUI。
  • 我的 Firefox 会话正在恢复,就好像浏览器在每次完全关闭时崩溃一样
  • 丢失最后 x 分钟的 Firefox 会话历史记录
  • 声音/剪贴板重定向间歇性地不起作用rdesktop
  • Conky周期性崩溃

...尽管 SpaceFM 警告没有空间存储状态数据,但仍然没有其中一些问题只有在将某些文件从文件系统中移出后才会消失。

问题是,我不确定如何(至少)关注文件系统左侧的“空间”(注意: , 或 的输出中没有分区的条目),/更不用说(假设我是对的)文件系统空间与系统内存无关,我一直在监视)如何在启动时增加大小?dffdisk -lmountconky

帮助?

PS 认为这个问题最适合标记为,(或者...不知道如何识别正在使用哪一个)和就像标签一样,但可惜似乎没有任何标签。如果社区不想创建一个/全部,请随意建议其他人认为合适的其他标签。

答案1

默认情况下,tmpfs ramdisk 将设置为使用最大限度系统中可用 RAM 的一半(请注意,标准的非 PAE 32 位内核最多可以寻址 4GB,减去 VGA 卡等设备使用的任何地址空间)。

我刚刚在虚拟机中启动了 Parted Magic 2013 08 01,为其分配了 4GB RAM。 rootfs 总共有 2GB,使用了大约 444KB,因此 PM 使用 tmpfs 的默认值。如果我重新启动仅使用 1GB RAM 的虚拟机,则根 tmpfs 只有 504MB 可用 - 内核使用了一些,因此略小于总 RAM 的一半。

它还将 /tmp 和 /run 安装为相同大小的 tmpfs。请注意,这些文件系统不是额外的空间,它们使用与 rootfs 和任何正在运行的程序相同的 RAM 池(即,在具有 1GB RAM 的系统上略小于 1GB)。

(顺便说一句,df在我删除 /etc/mtab 并将其替换为 /proc/mounts 的符号链接之前,甚至不会运行)。

要记住的重要一点是 tmpfs 和任何正在运行的程序共享相同的系统内存 - 因此,如果您填满 tmpfs,它将减少可用于运行程序的 RAM 量,并且如果您运行使用大量 RAM 的程序,它将减少 tmpfs 可用的 RAM 量。

你似乎两者都在做。您正在用日志文件填满磁盘,您正在运行 Firefox、X 和 rdesktop - 所有这些都倾向于使用大量 RAM。当 rootfs 已满时,Unix 系统反应不佳,当 RAM 开始紧张时,Linux 内核的内存不足 (OOM) 任务将开始随机终止进程以释放一些 RAM。

单独这些因素中的任何一个都会导致奇怪的、不可预测的问题。两者结合起来只会让问题变得不可避免。

正如其他人所建议的,我强烈建议您不要以这种方式使用 Live CD(Parted Magic 或任何其他)。它们不是为此而设计的,而且您所做的事情几乎肯定会导致问题。简而言之,Don't Do That, Then!

相反,要么重新分区硬盘并在其上安装一个小型发行版,在虚拟机中运行 Linux 发行版,要么找到一个在 USB 记忆棒上安装和运行的发行版,而不使用 tmpfs 作为 /root - 即使用 USB 记忆棒作为它的根文件系统(这比从 tmpfs 运行要慢得多。不,我不知道有任何这样的工作)。或者使用 USB 硬盘而不是 USB 闪存盘。

顺便说一句,您的系统有多少 RAM,您运行的是哪个版本的 Parted Magic?

答案2

conkyParted在右上角的小“抬头”显示屏(显然称为 )上显示可用内存。因此,您甚至不必考虑如何获取此信息,它已经显示了。 (由于可用内存您剩余的可用磁盘空间)。

Parted Live CD 带来了一些东西

或者您可能用完块或索引节点,您可以通过以下方式推断此信息stat

# stat -f /
   File: "/"
   ID: 0        Namelen: 242    Type: aufs
Block Size: 4096     Fundamental block size: 4096
Blocks: Total: 129061   Free: 127337    Available: 127337
Inodes: Total: 129061   Free: 128101

答案3

正如我和其他人在评论中所说,您不应该将 Parted Magic 用作正态分布,它不是为此设计的,并且必然会出现问题。

无论如何,要检查可用空间,您可以运行df.我不想购买 Parted Magic OS 的副本来测试这一点,但以下是df运行 Ubuntu Live CD 的虚拟机上的输出:

在此输入图像描述

其中大多数是存在于 RAM 中的 tmpfs 风格的东西(无论如何它们都不是实际安装的分区)。df仍然可以准确地报告使用情况。如果您在 Parted magic 下没有看到/条目,我猜他们正在使用某种深奥的命名。另一个提示表明您使用了错误的工具来完成这项工作。

答案4

多年来,我在 Debian、Ubuntu、Mint 等 live CD/DVD/USB 发行版上遇到这个问题,如果我记得的话,甚至可能是 Fedora。 Overlayfs(Live Mint/Ubuntu当前使用的fstype)和tmpfs使用的内存隐藏在free缓存内存(和/proc/meminfo的Inactive条目)中,以及临时磁盘读取缓存,因此不清楚到底有多少内存“自由的”。

我用来df将 overlayfs 和 tmpfs 使用的所有空间相加,然后从free.我会让 conky 在误导性的“免费内存”旁边突出显示该数字。所有尺寸均以 K 为单位。

如果您的发行版的实时版本不支持,df那么我不知道在哪里查找有关overlayfs/tmpfs 的信息。 mount、/proc/mounts 和 /etc/mtab 似乎只显示最大大小或不显示大小,而不是像当前大小那样df

首先是overlayfs & tmpfs使用的空间,

overlayfsused=$( df -t overlayfs --total |tail -n 1|tr -s [:space:]|cut -d " " -f 3 )
tmpfsused=$( df -t tmpfs --total|tail -n 1|tr -s [:space:]|cut -d " " -f 3 )
diskused=$(( overlayfsused + tmpfsused ))

仅供参考,df 的 -t 仅显示 fs 的类型(可以将两者放入一个 df 中),tail 仅给出最后一个总行,tr 将空格压缩为单个空格,以便 cut 更容易剪切出右侧字段。

对于免费的内存,您可以解析free的输出(可能更容易)或从 /proc/meminfo 读取(我已经尝试过并以这种方式输入):

free=$(grep MemFree < /proc/meminfo |tr -s [:space:]|cut -d " " -f 2)
buffers=$(grep Buffers < /proc/meminfo |tr -s [:space:]|cut -d " " -f 2)
cached=$(grep "^Cached" < /proc/meminfo |tr -s [:space:]|cut -d " " -f 2)

然后将它们放在一起,比如说一个很好的脚本输出,conky 可以每隔一两分钟执行或执行一次:

realfree=$(( free + buffers + cached - diskused ))
echo "$(( realfree / 1024 )) MiB"

我什至会考虑 if realfree < 100M 然后显示警告消息、删除临时文件、声音红色警报等...

至于使用实时发行版进行日常使用,Ubuntu(以及许多其他)实时版本的重点是尝试一个定期“日常”使用的发行版几个小时,看看您是否喜欢它。许多在线银行和安全意识文章特别建议使用实时发行版来实现安全的在线银行等。事实上,实时发行版没有意识到它们何时真正耗尽了内存,这在我看来是一个错误。我只需将大文件复制到 $HOME 和 /tmp 就可以使实时 Mint 崩溃,因为它们都使用 ram,并且最大大小均为 1/2 ram。仅供参考,目前 Mint 可能有一半的内存被 / (overlayfs)、/dev (devtmpfs?只使用了 4k,所以我假设它通常很小)、/tmp、/run/shm 使用

相关内容