[email protected]
generator for zram devices
This generator provides a simple and fast mechanism to configure swap on /dev/zram*
devices.
The main use case is create swap devices, but devices with a file system can be created too, see below.
A default config file may be located in /usr. This generator checks the following locations:
/run/systemd/zram-generator.conf
/etc/systemd/zram-generator.conf
/usr/local/lib/systemd/zram-generator.conf
/usr/lib/systemd/zram-generator.conf
… and the first file found in that list wins.
In addition, "drop-ins" will be loaded from .conf
files in
/etc/systemd/zram-generator.conf.d/
,
/usr/lib/systemd/zram-generator.conf.d/
, etc.
The main configuration file is read before any of the drop-ins and has the lowest precedence; entries in the drop-in files override entries in the main configuration file.
See systemd.unit(5) for a detailed description of this logic.
See zram-generator.conf.example
for a list of available settings.
Create /etc/systemd/zram-generator.conf
:
# /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram / 2
A zram device will be created for each section. No actual
configuration is necessary (the default of zram-size = min(ram / 2, 4096)
will be
used unless overriden), but the configuration file with at least one
section must exist.
# /etc/systemd/zram-generator.conf
[zram1]
mount-point = /var/tmp
This will set up a /dev/zram1 with ext2 and generate a mount unit for /var/tmp.
In case you want this path to be user-writable, you can use following
"high-quality hack" until systemd-makefs
provides a proper mechanism to
set ownership of a generated filesystem. For the above example, create an
override for [email protected]
, for example with systemctl edit
,
containing the following (note the sticky bit as required for [/var]/tmp):
[Service]
ExecStartPost=/bin/sh -c 'd=$(mktemp -d); mount "$1" "$d"; chmod 1777 "$d"; umount "$d"; rmdir "$d"' _ /dev/%i
The second purpose of this program is to serve as an example of a systemd generator in rust.
It is recommended to use an existing package:
- Fedora:
sudo dnf install zram-generator-defaults
(orsudo dnf install zram-generator
to install without the default configuration) - Debian: packages provided by nabijaczleweli, see https://debian.nabijaczleweli.xyz/README.
- Arch:
sudo pacman -S zram-generator
(or https://aur.archlinux.org/packages/zram-generator-git/ for the latest git commit)
To install directly from sources, execute make build && sudo make install
:
zram-generator
binary is installed in the systemd system generator directory (usually/usr/lib/systemd/system-generators/
)zram-generator(8)
andzram-generator.conf(5)
manpages are installed into/usr/share/man/manN/
, this requiresronn
.units/[email protected]
is copied into the systemd system unit directory (usually/usr/lib/systemd/system/
)zram-generator.conf.example
is copied into/usr/share/doc/zram-generator/
You need though create your own config file at one of the locations listed above.
- Install
zram-generator
using one of the methods listed above. - Create a
zram-generator.conf
config file. - Run
systemctl daemon-reload
to create new device units. - Run
systemctl start /dev/zram0
(adjust the name as appropriate to match the config). - Call
zramctl
orswapon
to confirm that the device has been created and is in use.
Once installed and configured, the generator will be invoked by systemd early at boot, there is no need to do anything else.
The tests require either the zram
module to be loaded, or root to run modprobe zram
.
Set the ZRAM_GENERATOR_ROOT
environment variable to use that
instead of /
as root.
The "{generator}" template in units/[email protected]/binary-location.conf
can be substituted for a non-standard location of the binary for testing.
Written by Zbigniew Jędrzejewski-Szmek <[email protected]>, Igor Raits <[email protected]>, наб <[email protected]>, and others. See https://github.com/systemd/zram-generator/graphs/contributors for the full list.