如何改变 zram 大小?

如何改变 zram 大小?

我使用 安装了 zram sudo apt-get install zram-config。之后它自动启动,当我使用 验证cat /proc/swaps它运行正常时

但是当我sudo echo 128M > /sys/block/zram0/disksize像在文档我总是得到bash: /sys/block/zram0/disksize: permission denied

即使我关闭它sudo swapoff /dev/zram0然后改变我仍然permission denied

那么我该如何更改 zram 大小?disksize它占用的是 RAM 空间还是最大 zram 磁盘大小?

答案1

根据http://manpages.ubuntu.com/manpages/xenial/man8/zramctl.8.html,您可以像这样删除并重新创建 zram 交换:

# swapoff /dev/zram0
# zramctl --reset /dev/zram0
# zramctl --find --size 1024M
/dev/zram0
# mkswap /dev/zram0
# swapon /dev/zram0

要永久更改大小,您必须调整创建交换文件的 init 脚本。请注意,此文件可能会被未来的系统更新覆盖。

要将 Ubunutu 16.04 中的交换文件大小从总内存大小的 50% 增加到 200%,请更改 /usr/bin/init-zram-swapping 中的此行

mem=$(((totalmem / 2 / ${NRDEVICES}) * 1024))

mem=$(((totalmem * 2 / ${NRDEVICES}) * 1024))

答案2

我是 Fedora 33 用户,但在寻找如何配置 zram 时偶然发现了这个答案。这是我的/usr/lib/systemd/zram-generator.conf

# This config file enables a /dev/zram0 device with the default settings:
# — size — half of available RAM or 4GB, whichever is less
# — compression — most likely lzo-rle
#
# To disable, uninstall zram-generator-defaults or create empty
# /etc/systemd/zram-generator.conf file.
[zram0]
zram-fraction = 2
max-zram-size=none

这在重启后仍然有效,似乎是控制 zram 的推荐方式。

https://fedoraproject.org/wiki/Changes/SwapOnZRAM,尤其是man 5 zram-generator.conf

答案3

您需要更改为“root”才能执行此操作。

sudo -i
# echo 128M > /sys/block/zram0/disksize

答案4

作为一名老派技术专家,我更喜欢尽可能低调地做事。因此,我创建了一个小脚本来启用或更改 zram 交换文件的大小。

#!/bin/bash
# Based on https://github.com/ric96/zram
# ver: 30 dec 2018
# Installed in /usr/local/bin/my-zram.bash
#  And made executable " chmod a+x /usr/local/bin/my-zram.bash "
# I use an /etc/crontab entry of:
#  " @reboot root /usr/local/bin/my-zram.bash 256M ; # [ optionally use w/ "'size'M" for Mega ]
# Or for command-line: " sudo /usr/local/bin/my-zram.bash 256M "
# Note that you may want to change the '256M' parameter I am using.

logger -- $0 $$ zram $1 Start

## If $1 exists
test -n $1 && \
 {
  ZRAMSIZE=$1
  DOLONE=$1
 }
## And yes, invalid option input will create interesting, but apparently not hazardous results.

## If no $1, fallback and calculate a reasonable (to me) size.
test -z $1 && \
 {
  totalmem=`free | grep -e "^Mem:" | awk '{print $2}'`
  mem=$(( ($totalmem) * 1024 / 2 ))
  #echo $mem > /sys/block/zram0/disksize
  ZRAMSIZE=$mem
  DOLONE=NULL
  logger -- $0 $$ Using totalmem $totalmem \* 1024 /2 = $mem ZRAMSIZE=$ZRAMSIZE
 }

## Do we already have a /dev/zram0 ?? if so, swapoff and reset it.
test -b /dev/zram0 && swapoff -v /dev/zram0
test -b /dev/zram0 && echo 1 > /sys/block/zram0/reset

## If /dev/zram0 does NOT exist, but the 'zram' kernel module IS loaded, then remove it.
test -b /dev/zram0 || ( lsmod|grep -q zram && rmmod -v zram )

## (Re)Install the 'zram' kernel module. FYI: It doesn't hurt to 'reinstall'...
modprobe -v zram num_devices=1

## Build the zram swapfile.
echo $ZRAMSIZE > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon -v -p 5 /dev/zram0

logger -- $0 $$ zram Done.  ZRAMSIZE=$ZRAMSIZE  \$1=$DOLONE

# The_End

尽情享受吧!它对我有用。你可能想查看、理解并根据你的情况进行编辑。:-)

并且请注意,如果您从 cron 运行此脚本,按照编写的方式,它会产生输出,该输出将(应该)邮寄给您(或 root )。

相关内容