我在一台配备 1 GB SSD 和 20 GB RAM 的笔记本电脑上运行 16.04。文件系统是 btrfs,我没有创建交换。一年多来它没有给我带来任何问题。但是,我想尝试使用 ZRAM 进行交换,并在此处阅读以下内容:https://seravo.fi/2016/perfect-btrfs-setup-for-a-server
“要安装 zram,只需运行:apt install zram-config。下次重启后,系统将自动使用 zram 设备进行交换。系统有多少 RAM 并不重要,因为在某个时候,内核无论如何都会将某些内容从活动内存交换到交换区,以更有效地使用活动内存。”
所以我这样做了,当我重启后执行 cat /proc/swaps 时,我得到:
Filename Type Size Used Priority
/dev/zram0 partition 2553148 0 5
/dev/zram1 partition 2553148 0 5
/dev/zram2 partition 2553148 0 5
/dev/zram3 partition 2553148 0 5
所以我现在似乎在 ZRAM 中有了交换。我想知道这是否就是我需要做的全部。我不需要在 ZRAM 中创建和启用交换文件?我之所以问这个问题,是因为我在 Ask Ubuntu 上读到过:ZRAM 与常规交换分区
引用:“然后您可以使用 mkswap /dev/zram0 对其进行格式化以进行交换,并使用 swapon /dev/zram0 启用交换。”
这有点令人困惑,因为根据我引用的第一个站点,我需要做的就是启用 ZRAM,系统就会使用它,而在 AskUbuntu 上,似乎我必须在 ZRAM 中创建并启用交换。
有人可以澄清一下吗?
答案1
您需要做的就是安装该zram-config
软件包,顾名思义,它会为您配置 zram。cat /proc/swaps
准确的说:zram 已经作为 swap 处于活动状态。
另一个问题是关于 zram,而不是zram-config
包。
答案2
ZRAM 简单来说就是一个压缩的 ramdisk 驱动,当你启用它的时候,你会得到一个块设备,/dev/zram[0-9]+
并且这个块设备中存储的所有数据都会被压缩并存储在内存中。
因为它只是一个块设备,所以你可以用它来存储任何东西,比如文件系统或交换空间——它对于存储分区并不是特别有用,因为分区后它不会像你的/dev/hd[a-z]
或/dev/sd[a-z]
ETC将要。
因此,要使用它进行交换,您必须先用 对其进行格式化mkswap
,然后使用 在其上进行 Linux 交换swapon
。zram-config
只是官方的 Ubuntu 软件包,它会在启动时自动为您执行此操作(因为它是一个 ramdisk,因此当您重新启动时,存储在其中的所有数据都会消失)。 还有其他脚本可以执行相同的操作。 我特别喜欢systemd-swap
,⁽¹⁾,我在 ArchLinux 机箱和 Raspberry Pi(运行类似 Debian 的发行版)中都使用它,它可以处理基于磁盘的交换、ZRAM 和 Zswap 的自动交换。 我很确定它也适用于 Ubuntu。
令人好奇的是,zram 在内存使用方面的行为如下:虽然您可以在此设备中存储的最大数据量是固定的,但它使用的内存量会根据数据的可压缩程度而变化。例如:
% sudo swapoff /dev/zram0
% sudo dd if=/dev/zero of=/dev/zram0 bs=1M
dd: writing to '/dev/zram0': No space left on device
243+0 records in
242+0 records out
254492672 bytes (254 MB, 243 MiB) copied, 6.10473 s, 41.7 MB/s
% free -h
total used free shared buff/cache available
Mem: 970M 47M 793M 25M 128M 848M
Swap: 0B 0B 0B
% sudo dd if=/dev/urandom of=/dev/zram0 bs=1M
dd: error writing '/dev/zram0': No space left on device
243+0 records in
242+0 records out
254492672 bytes (254 MB, 243 MiB) copied, 13.2982 s, 19.1 MB/s
% free -h
total used free shared buff/cache available
Mem: 970M 292M 549M 25M 128M 603M
Swap: 0B 0B 0B
因此,虽然我的 zram 设备有 254 MB 的空间,但当用零填充时,它几乎不占用任何内存,而当用高度不可压缩的随机数据填充时,它会占用 254M 内存。