myfreax

如何在 Ubuntu 20.04 开启 zRAM

zram 也称为 zRAM,先前称为 compcache。是 Linux 内核的核心功能

5 min read
By myfreax
如何在 Ubuntu 20.04 开启 zRAM
如何在 Ubuntu 20.04 配置 zRAM

zram 也称为 zRAM,先前称为 compcache。是 Linux 内核的核心功能,可提供虚拟内存压缩。

zram 通过在 RAM 内压缩块设备的分页,直到必须使用硬盘的交换空间,避免在磁盘进行分页,从而提高性能。

在本教程中,我们将详细说明如何在 Ubuntu 20.04 配置或者启用 zRAM,设置 zRAM的大小以及如何持久化 zRAM的配置参数。

开启/加载 zRAM 模块

zRAM 是 Linux 内核的模块,要启用 zRAM 请使用 modprobe 命令加载 zRAM 模块。运行命令 modprobe zram num_devices=1 。

num_devices 是 zRAM模块的参数,zram num_devices=1 表示仅创建一个设备文件,该文件将会保存在设备目录,文件名称是 /dev/zram0。

如果 num_devices 的数值不等于 1,内核将会创建多个 zram 文件 /dev/zram{0,1,2,3...}。

然后运行 lsmod 命令 lsmod  | grep zram 确认是否成功加载。命令将会打印消息 zram   32768  0 。

sudo modprobe zram num_devices=1
lsmod  | grep zram
zram                   32768  0

持久化开启/加载 zRAM 模块

modprobe 加载的模块仅在当前运行时可用,要在重新启动计算机后,加载 zram 模块,则需要创建内核模块载入文件和模块的配置文件。

要载入 zRAM 模块在/etc/modules-load.d/目录创建文件zram.conf,运行命令 echo "zram" | sudo tee -a /etc/modules-load.d/zram.conf。

然后创建模块的配置文件 zram.conf 在目录 /etc/modules-load.d/,运行命令 echo "options zram num_devices=1" | sudo tee -a /etc/modprobe.d/zram.conf 。

echo "zram" | sudo tee -a /etc/modules-load.d/zram.conf

echo "options zram num_devices=1" | sudo tee -a /etc/modprobe.d/zram.conf

配置 zRAM

通常 zRAM 最常用的设置选项是 zRAM 的大小 disksize 和 zRAM 的压缩算法 comp_algorithm。

控制 zRAM 的大小的文件是 /sys/block/zram0/disksize ,压缩算法文件是 /sys/block/zram0/comp_algorithm 。

可以运行 cat 命令查看两个文件来确定 zRAM 文件的大小和压缩算法,例如命令cat /sys/block/zram0/disksize 查看 zRAM 大小。

同样也可以通过两个文件设置 zRAM 文件的大小和压缩算法,例如命令 echo "512M" | sudo tee /sys/block/zram0/disksize 修改 zRAM 的大小。

echo "512M" | sudo tee /sys/block/zram0/disksize
echo "lzo" | sudo tee /sys/block/zram0/comp_algorithm

持久化 zRAM 配置

由于 /sys 目录是基于内存的文件系统,因此重启系统后,你设置的 zRAM 参数将不再存在。要持久化 zRAM 的参数,请使用 udev 进行设置。

udev 是一个用户空间系统,简单来说就是 Linux 设备管理器。它使操作系统管理员能够为设备事件运行用户指定的程序或者脚本,也可以在添加设备时指定设备参数。

要设置 zRAM 的大小,可以在 udev 规则文件的 ATTR 指定 zRAM 大小 disksize,ATTR{disksize}="512M" 表示设置 zRAM 的大小是 512M。

要设置 zRAM 的其它属性,可以在 udev 规则文件指定多个 ATTR 属性设置设备参数。例如设置 zRAM 压缩算法 ,可以添加属性 ATTR{comp_algorithm}="lzo"。

# Persistent

echo 'KERNEL=="zram0", ATTR{disksize}="512M",TAG+="systemd"' | sudo tee  /etc/udev/rules.d/99-zram.rules

echo 'KERNEL=="zram0", ATTR{disksize}="512M", ATTR{comp_algorithm}="lzo", TAG+="systemd"' | sudo tee  /etc/udev/rules.d/99-zram.rules

激活 zRAM

要在当前运行时启用 zRAM 可以将 zRAM 当作交换空间一样的方式启用。首先需要将 zRAM 文件进行格式化,运行命令 sudo mkswap /dev/zram0 。

当格式化完成后,为了让系统识别 zRAM 文件,因此还需要启用 zRAM 文件。可以运行命令 sudo swapon /dev/zram0 启用 zRAM 文件。

如果你系统已经存在交换空间,那么总的交换空间的大小是zRAM的大小加交换空间的大小。

sudo mkswap /dev/zram0
sudo swapon /dev/zram0

自动挂载 zRAM

现在已经在内核启用 zRAM 模块,接下来创建 SystemD 单元文件,在系统启动时自动激活 zRAM 文件并作为交换空间挂载。

使用你喜欢的文本编辑器创建文件 /etc/systemd/system/zram.service 。在本教程中,我们使用vim 创建并编辑文件 SystemD 单元文件

编辑完成后,保存文件并退出 vim 编辑器,然后运行命令 sudo systemctl enable zram 启用 zram 服务,最后重启计算机。

sudo vim /etc/systemd/system/zram.service
sudo systemctl enable zram
[Unit]
Description=Swap with zram
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon /dev/zram0
ExecStop=/sbin/swapoff /dev/zram0

[Install]
WantedBy=multi-user.target
/etc/systemd/system/zram.service
如何自定义Linux systemd单元文件 | myfreax
在本教程中,我们将讨论systemctl命令,它是用于控制初始化系统的中央管理工具。我们将介绍如何查看服务依赖,单元文件的定义,使用配置文件,检查单元属性
如何自定义Linux systemd单元文件

Related Articles