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?
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))
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?
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).
Pour ce faire, vous devez passer à "root".
Sudo -i
# echo 128M > /sys/block/zram0/disksize