如何在Linux(RHEL/CentOS 7)中更改tmpfs分区大小

时间:2020-01-09 10:37:36  来源:igfitidea点击:

在本文中,我将分享在Linux中更改(增加/减少)tmpfs分区大小的步骤。借助RHEL 7,Linux内核为用户空间提供了多种不同的通信方式。

对于许多设施而言,存在系统调用,其他设施则隐藏在netlink接口的后面,甚至其他设施也通过虚拟文件系统(如/proc或者/sys)公开。这些文件系统是编程接口,实际上并没有真正的持久存储支持。他们仅使用内核的文件系统接口作为各种不相关机制的接口。

现在,默认情况下,systemd将物理内存的特定部分分配给这些分区作为阈值。 "但是如果要求要求我们更改tmpfs分区大小怎么办?"

对于某些tmpfs分区,可以使用fstab更改阈值大小。对于在运行时创建的其他分区(例如(//run/user /)),我们不能使用fstab更改此类运行时目录的tmpfs分区大小。

以下是RHEL 7中可用的tmpfs分区列表。

Filesystem Size Used Avail Use% Mounted on
tmpfs      187G    0  187G   0% /dev/shm
tmpfs      187G  41M  187G   1%  /run
tmpfs      187G    0  187G   0% /sys/fs/cgroup
tmpfs       38G    0   38G   0% /run/user/1710
tmpfs       38G    0   38G   0% /run/user/0

说明:

我们可能会注意到/etc/fstab不包含这些tmpfs分区的条目,但是df -h仍会显示这些分区。

更改/dev/shm的tmpfs分区大小

如果应用程序符合POSIX或者在Red Hat Enterprise Linux系统上使用GLIBC(2.2及更高版本),则通常将使用/dev/shm作为共享内存(shm_open,shm_unlink)。/dev/shm是从/etc/fstab挂载的临时文件系统(tmpfs)。因此,tmpfs支持的标准选项(例如" size")可用于增加或者减少/dev/shm上tmpfs的大小(默认情况下,它是可用系统RAM的一半)。

例如,要将/dev/shm的大小设置为2GiB,请在/etc/fstab中更改以下行:

默认:

none     /dev/shm       tmpfs   defaults                0 0

到:

none     /dev/shm       tmpfs   defaults,size=2G        0 0

为了使更改生效,请立即重新挂载/dev/shm

# mount -o remount /dev/shm

说明:

如果在较小的tmpfs大小的新限制内未分配任何块或者索引节点,则挂载-o重新挂载以缩小tmpfs的操作将成功。无法预测或者控制它,但是如果无法重新安装,将无法正常工作。在这种情况下,请使用tmpfs停止所有进程,将其卸载,然后使用新的大小重新安装。

最后验证新尺寸

# df -h /dev/shm
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.0G     0  2.0G   0% /dev/shm

更改/run的tmpfs分区大小

/run是一个文件系统,应用程序使用的文件系统与以前版本的RHEL中使用/var/run的方式相同。现在/var/run是指向/run文件系统的符号链接。以前的早期启动程序曾经将运行时数据放置在/dev中的众多隐藏点目录下。他们之所以在/dev目录中使用目录,是因为它在机器启动过程中很早就可以使用了。由于/var/run在启动过程中很晚才可用,因为/var可能驻留在单独的文件系统上,所以实现了目录/run。

默认情况下,我们可能找不到/run的任何/etc/fstab条目,因此我们可以在下面的行中添加

none     /run          tmpfs       defaults,size=600M        0 0

为了使更改生效,请立即重新安装/run

# mount -o remount /run

最后验证新尺寸

# df -h /run
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           600M  9.6M  591M   2% /run

更改/run/user/$UID的tmpfs分区大小

/run/user/$UID是pam_systemd使用的文件系统,用于存储该用户正在运行的进程使用的文件。在以前的版本中,这些文件通常存储在/tmp中,因为它是FHS指定的唯一本地位置,并且所有用户均可写入。但是使用/tmp可能会引起问题,因为任何人都可以写它,因此访问控制很有挑战性。使用/run/user/$UID解决了这个问题,因为它只能由目标用户访问。

重要的提示:

我们不能使用/etc/fstab来更改/run/user/$UID的tmpfs分区大小。

/run/user/$UID的tmps分区大小基于/etc/systemd/logind.conf中的RuntimeDirectorySize值得出。

# grep -i runtime /etc/systemd/logind.conf
RuntimeDirectorySize=10%

默认情况下,这些运行时目录的默认阈值为总物理内存的" 10%"。

从logind.conf的man页面中

RuntimeDirectorySize=
      Sets the size limit on the $XDG_RUNTIME_DIR runtime directory for each user who logs in. Takes a size in bytes, optionally suffixed with the usual K, G, M, and T suffixes, to the base 1024 (IEC). Alternatively, a numerical percentage suffixed by "%" Jan be specified, which sets the size limit relative to the amount of physical RAM. Defaults to 10%. Note that this size is a safety limit only. As each runtime directory is a tmpfs file system, it will only consume as much memory as is needed.

将此变量修改为我们所需的值,例如,我提供了" 100M"的阈值

# grep -i runtime /etc/systemd/logind.conf
RuntimeDirectorySize=100M

接下来重新启动systemd-logind服务

重要的提示:

需要重新启动节点才能激活更改。

更改/sys/fs/cgroup的tmpfs分区大小

/sys/fs/cgroup是一个接口,通过它可以访问控制组。缺省情况下,/sys/fs/cgroup中可能有/etc/fstab内容,因此请添加一个新条目

/sys/fs/cgroup的当前值

# df -h /sys/fs/cgroup
Filesystem      Size  Used Avail Use% Mounted on
tmpfs            63G     0   63G   0% /sys/fs/cgroup

在"/etc/fstab"中添加以下行,以将阈值更改为" 2GB"

none          /sys/fs/cgroup          tmpfs       defaults,size=2G         0 0

重新挂载分区"/sys/fs/cgroup"

# mount -o remount /sys/fs/cgroup

最后验证更新的更改

# df -h /sys/fs/cgroup
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup