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 --showliefert 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
| Parameter | Wert | Beschreibung |
|---|---|---|
enabled | Y | zswap aktivieren |
compressor | lz4 | Schnelle Komprimierung. Alternativ zstd für bessere Kompressionsrate. |
max_pool_percent | 20 | Maximaler 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