web-dev-qa-db-fra.com

Comment changer la taille du zram?

J'ai installé zram avec Sudo apt-get install zram-config. Après cela, il a démarré automatiquement et lorsque j'ai vérifié avec cat /proc/swaps il fonctionne correctement.

Mais quand j’utilisais Sudo echo 128M > /sys/block/zram0/disksize pour changer la taille du zram comme dans le document j’obtenais toujours bash: /sys/block/zram0/disksize: permission denied

Même quand je l'ai éteint avec Sudo swapoff /dev/zram0 puis changé, j'ai toujours permission denied

Alors, comment puis-je changer la taille du zram? Et disksize est-il l'espace qu'il consomme sur RAM ou juste la taille maximale du disque zram?

2
phuclv

Selon http://manpages.ubuntu.com/manpages/xenial/man8/zramctl.8.html , vous pouvez supprimer et recréer un échange zram comme ceci:

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

Pour modifier définitivement la taille, vous devez adapter le script init, où les fichiers d'échange sont créés. Sachez que ce fichier peut être remplacé par de futures mises à jour du système.

Pour augmenter la taille du fichier d'échange dans Ubunutu 16.04 de 50% à 200% de la taille totale de votre mémoire, modifiez cette ligne dans/usr/bin/init-zram-swapping

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

à

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

Il n'y a pas de fichier en /usr/bin/init-zram-swapping. Il semble que depuis Xenial, le fichier se trouve maintenant à /sbin/zram-config-start. Vous pouvez le voir vous-même en regardant $ 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

Le fichier /sbin/zram-config-start est beaucoup plus complexe qu'auparavant. Je me demande quoi faire pour augmenter la taille du bélier?

0
tristank

En tant que technocrate de la vieille école, je préfère faire les choses au niveau le plus bas possible. J'ai donc créé un petit script pour activer ou modifier la taille de mon fichier d'échange 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

Prendre plaisir! Ça marche pour moi. Et vous voudrez peut-être examiner, comprendre et modifier en fonction de votre situation. :-)

Et sachez que si vous exécutez ce script à partir de cron, tel qu'il est écrit, il génère un résultat qui vous sera (devrait) envoyé par la poste (ou par la racine).

0
dave58

Pour ce faire, vous devez passer à "root".

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