Swap-Datei und zswap einrichten

Übersicht

Dieses Runbook richtet eine festplattengestützte Swap-Datei mit zswap als komprimiertem In-Memory-Cache davor ein. zswap komprimiert ausgelagerte Seiten im RAM, bevor sie auf den Datenträger treffen — der Großteil des Swap-Traffics verbleibt dadurch im Arbeitsspeicher.

Geltungsbereich: Frisches Debian 13 (Trixie) auf Hetzner Cloud VPS.

Ergebnis: Eine persistente Swap-Datei mit zswap, die Neustarts übersteht.


Vorbedingungen

  • Root-Zugriff auf den Server
  • Kein aktiver Swap (swapon --show liefert keine Ausgabe)

Schritte

1. Swap-Datei anlegen

4 GB ist ein sinnvoller Standardwert für einen VPS mit 4–8 GB RAM.

fallocate -l 4G /swapfile

2. Berechtigungen setzen und formatieren

chmod 600 /swapfile
mkswap /swapfile

3. Swap aktivieren

swapon /swapfile

Einsatzbereitschaft prüfen:

swapon --show
free -h

Die Ausgabe muss /swapfile mit Typ file und der gewählten Größe zeigen.

4. Swap persistent machen

echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab

5. zswap zur Laufzeit aktivieren

echo Y   | tee /sys/module/zswap/parameters/enabled
echo lz4 | tee /sys/module/zswap/parameters/compressor
echo 20  | tee /sys/module/zswap/parameters/max_pool_percent
ParameterWertBeschreibung
enabledYzswap aktivieren
compressorlz4Schnelle Komprimierung. Alternativ zstd für bessere Kompressionsrate.
max_pool_percent20Maximaler RAM-Anteil für den komprimierten Pool (Standard: 20).

Aktivierung prüfen:

cat /sys/module/zswap/parameters/enabled       # Y
cat /sys/module/zswap/parameters/compressor    # lz4

6. zswap persistent machen

Kernel-Boot-Parameter über GRUB setzen:

sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20"/' /etc/default/grub
update-grub

7. Swappiness anpassen

Mit zswap ist der Standardwert von 60 korrekt. Auslagern ist günstig, da die meisten Seiten komprimiert im RAM verbleiben.

echo 'vm.swappiness=60' | tee /etc/sysctl.d/99-swap.conf
sysctl --system

8. Neustart und Abnahme

reboot

Nach dem Neustart — alle Parameter abnehmen:

swapon --show
cat /sys/module/zswap/parameters/enabled
cat /sys/module/zswap/parameters/compressor
cat /sys/module/zswap/parameters/max_pool_percent

Optional: zswap-Statistiken einsehen:

grep -r . /sys/kernel/debug/zswap/ 2>/dev/null

Funktionsweise

Arbeitsspeicherdruck
        │
        ▼
   ┌─────────┐
   │   RAM   │  Normaler Arbeitsspeicher
   └────┬────┘
        │ Kernel lagert Seite aus
        ▼
   ┌─────────┐
   │  zswap  │  Komprimiert im RAM (bis max_pool_percent)
   └────┬────┘
        │ Pool voll → kälteste Seiten werden verdrängt
        ▼
   ┌──────────┐
   │ /swapfile│  Festplatten-Swap (nur wenn zswap-Pool voll)
   └──────────┘

Der Großteil des Swap-Traffics erreicht den Datenträger nie. Die Swap-Datei ist das letzte Auffangnetz.


Rücknahme

# Swap deaktivieren
swapoff /swapfile
rm /swapfile

# fstab-Eintrag entfernen
sed -i '\|^/swapfile|d' /etc/fstab

# zswap-Boot-Parameter entfernen
sed -i 's/ zswap\.enabled=1 zswap\.compressor=lz4 zswap\.max_pool_percent=20//' /etc/default/grub
update-grub

# Swappiness-Override entfernen
rm -f /etc/sysctl.d/99-swap.conf
sysctl --system

Referenzen