web-dev-qa-db-ja.com

zramサイズを変更するには?

Sudo apt-get install zram-configでzramをインストールしました。その後、自動的に起動し、cat /proc/swapsで検証したときに正常に実行されています

しかし、Sudo echo 128M > /sys/block/zram0/disksizeを使用して document のようにzramサイズを変更すると、常にbash: /sys/block/zram0/disksize: permission denied

Sudo swapoff /dev/zram0で無効にしてから変更しても、permission denied

それでは、どのようにzramサイズを変更できますか? disksizeは、RAMで消費するスペースですか、それともちょうど最大のzramディスクサイズですか?

2
phuclv

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))
3

/usr/bin/init-zram-swappingにファイルがありません。 Xenial以降、ファイルは/sbin/zram-config-startにあるようです。これは、$ cat /etc/init/zram-config.confを見て自分で見ることができます。

description "Initializes zram swaping and /tmp"
author      "Adam Conrad <[email protected]>"

start on runlevel [2345]

pre-start exec /sbin/zram-config-start

pre-stop exec /sbin/zram-config-stop

ファイル/sbin/zram-config-startは以前よりもはるかに複雑です。ラムのサイズを大きくするにはどうすればよいのでしょうか?

0
tristank

昔ながらのテクノクラートとして、できる限り低いレベルで物事を行うことを好みます。そのため、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から実行すると、出力が生成されることに注意してください。

0
dave58

これを行うには、「ルート」に変更する必要があります。

Sudo -i
# echo 128M > /sys/block/zram0/disksize
0
Rinzwind