Aller au contenu

Swap Units (.swap)

Les unités .swap gèrent les espaces de swap (mémoire virtuelle) dans systemd. Elles permettent d'activer et de contrôler les partitions ou fichiers de swap de manière intégrée.

Qu'est-ce que le swap ?

Le swap est un espace disque utilisé comme extension de la RAM lorsque la mémoire physique est saturée. Le noyau Linux peut déplacer des pages mémoire rarement utilisées vers le swap pour libérer de la RAM.

Types de swap

  • Partition swap : Partition dédiée (type 82)
  • Fichier swap : Fichier ordinaire utilisé comme swap
  • Swap sur zram : Swap compressé en RAM

Nommage des swap units

Le nom du fichier .swap correspond au chemin d'activation, avec / remplacés par - :

Device/Fichier Nom de l'unité
/dev/sda2 dev-sda2.swap
/swapfile swapfile.swap
/var/swap/file var-swap-file.swap

Structure d'un swap unit

[Unit]
Description=Swap Partition

[Swap]
What=/dev/disk/by-uuid/swap-uuid-here
Priority=100

[Install]
WantedBy=swap.target

Section [Swap]

Options

What

Périphérique ou fichier de swap

# Partition
What=/dev/sda2

# Par UUID (recommandé)
What=/dev/disk/by-uuid/12345678-1234-1234-1234-123456789012

# Par label
What=/dev/disk/by-label/swap

# Fichier
What=/swapfile
Priority

Priorité du swap (plus élevé = utilisé en premier)

Priority=100   # Priorité haute
Priority=10    # Priorité basse
Priority=-1    # Priorité par défaut du noyau

Valeurs typiques : -1 à 32767 (plus haut = prioritaire)

Options

Options de montage swap (rarement utilisé)

Options=discard  # Activer TRIM sur SSD
TimeoutSec

Timeout pour l'activation

TimeoutSec=30s

Création et configuration

Partition swap

1. Créer la partition

# Avec fdisk/gdisk/parted
fdisk /dev/sda
# Créer partition de type 82 (Linux swap)

# Formater
mkswap /dev/sda2

# Obtenir l'UUID
blkid /dev/sda2

2. Créer le swap unit

# /etc/systemd/system/dev-sda2.swap
[Unit]
Description=Swap Partition on SDA2

[Swap]
What=/dev/disk/by-uuid/abc-123-def-456
Priority=100

[Install]
WantedBy=swap.target

3. Activer

systemctl enable dev-sda2.swap
systemctl start dev-sda2.swap

# Vérifier
swapon --show
free -h

Fichier swap

1. Créer le fichier

# Créer un fichier de 4 Go
dd if=/dev/zero of=/swapfile bs=1M count=4096

# Ou avec fallocate (plus rapide)
fallocate -l 4G /swapfile

# Permissions
chmod 600 /swapfile

# Formater
mkswap /swapfile

2. Créer le swap unit

# /etc/systemd/system/swapfile.swap
[Unit]
Description=Swap File

[Swap]
What=/swapfile
Priority=50

[Install]
WantedBy=swap.target

3. Activer

systemctl enable swapfile.swap
systemctl start swapfile.swap

# Vérifier
swapon --show

Swap multiple avec priorités

# Partition rapide (SSD) - priorité haute
# /etc/systemd/system/dev-nvme0n1p2.swap
[Unit]
Description=Fast Swap on NVMe

[Swap]
What=/dev/disk/by-uuid/nvme-swap-uuid
Priority=200
Options=discard

[Install]
WantedBy=swap.target
# Partition lente (HDD) - priorité basse
# /etc/systemd/system/dev-sda2.swap
[Unit]
Description=Slow Swap on HDD

[Swap]
What=/dev/disk/by-uuid/hdd-swap-uuid
Priority=10

[Install]
WantedBy=swap.target

Le noyau utilisera le swap NVMe en priorité.

Swap sur zram

zram crée un swap compressé en RAM (utile pour les machines avec peu de mémoire).

# Installer zram-generator (Fedora/CentOS)
dnf install zram-generator

# Ou systemd-zram (Debian/Ubuntu)
apt install systemd-zram-generator

Configuration /etc/systemd/zram-generator.conf :

[zram0]
zram-size = ram / 2
compression-algorithm = zstd

Activation automatique au boot.

Gestion du swap

Commandes de base

# Lister les swap units
systemctl list-units --type=swap
systemctl list-units --type=swap --all

# Activer un swap
systemctl start dev-sda2.swap

# Désactiver un swap
systemctl stop dev-sda2.swap

# Activer au boot
systemctl enable dev-sda2.swap

# Désactiver au boot
systemctl disable dev-sda2.swap

# Voir l'état
systemctl status dev-sda2.swap

Commandes swapon/swapoff

# Voir le swap actif
swapon --show
free -h
cat /proc/swaps

# Activer manuellement
swapon /dev/sda2
swapon /swapfile

# Désactiver
swapoff /dev/sda2
swapoff /swapfile

# Désactiver tout le swap
swapoff -a

# Activer tout le swap
swapon -a

Informations détaillées

# Statistiques du swap
vmstat 1
cat /proc/meminfo | grep -i swap

# Priorités
swapon --show=NAME,SIZE,USED,PRIO

# Processus utilisant le swap
for pid in /proc/[0-9]*; do
  swap=$(grep VmSwap $pid/status 2>/dev/null | awk '{print $2}')
  if [ "$swap" != "" ] && [ "$swap" != "0" ]; then
    echo "$pid: $swap kB"
  fi
done

Configuration système

Swappiness

Contrôle la tendance du noyau à utiliser le swap (0-100).

# Voir la valeur actuelle
cat /proc/sys/vm/swappiness

# Modifier temporairement
echo 10 | sudo tee /proc/sys/vm/swappiness

# Permanent (/etc/sysctl.conf)
vm.swappiness=10

# Appliquer
sysctl -p

Valeurs typiques :

  • 60 : Défaut (utilise le swap modérément)
  • 10 : Serveurs (minimise l'utilisation du swap)
  • 100 : Swap agressif
  • 0 : Swap uniquement si nécessaire

Vfs*cache*pressure

Contrôle la réclamation de mémoire cache.

# Permanent
vm.vfs_cache_pressure=50

Valeurs :

  • 100 : Défaut
  • 50 : Conserve le cache plus longtemps
  • 200 : Libère le cache agressivement

Conversion depuis fstab

fstab traditionnel

# /etc/fstab
UUID=abc-123  none  swap  sw,pri=100  0 0
/swapfile     none  swap  sw,pri=50   0 0

Équivalent systemd

# /etc/systemd/system/dev-disk-by\x2duuid-abc\x2d123.swap
[Unit]
Description=Swap Partition

[Swap]
What=/dev/disk/by-uuid/abc-123
Priority=100

[Install]
WantedBy=swap.target
# /etc/systemd/system/swapfile.swap
[Unit]
Description=Swap File

[Swap]
What=/swapfile
Priority=50

[Install]
WantedBy=swap.target

Note : systemd peut générer automatiquement des swap units depuis fstab.

Dimensionnement du swap

Règles générales

RAM Swap recommandé Swap avec hibernation
< 2 Go 2x RAM 3x RAM
2-8 Go = RAM 2x RAM
> 8 Go 4-8 Go 1.5x RAM
> 64 Go 4 Go minimum = RAM

Serveurs

# Serveurs avec beaucoup de RAM
# Swap minimal pour éviter l'OOM killer
Swap = 2-4 Go

# Workstations
# Swap pour hibernation
Swap = RAM + quelques Go

Monitoring et tuning

Surveiller l'utilisation

# En temps réel
watch -n 1 free -h

# Historique
sar -S 1 10  # 10 mesures par seconde

# Voir si le swap est actif
vmstat 1 | awk '{print $7, $8}'
# si = swap in, so = swap out

Logs

# Logs swap
journalctl -u '*.swap'

# Événements OOM
journalctl -k | grep -i "out of memory"

Vider le swap

# Désactiver le swap (force le retour en RAM)
sudo swapoff -a

# Réactiver
sudo swapon -a

⚠️ Attention : Nécessite suffisamment de RAM libre.

Dépannage

Swap ne s'active pas

# Vérifier l'unité
systemctl status dev-sda2.swap

# Le périphérique existe ?
lsblk
blkid /dev/sda2

# Est-ce bien formaté en swap ?
file -s /dev/sda2

# Logs
journalctl -u dev-sda2.swap

# Tester manuellement
sudo swapon /dev/sda2

Permissions fichier swap

# Vérifier
ls -l /swapfile

# Doit être 600
chmod 600 /swapfile

Performances dégradées

# Vérifier si swap sur SSD
lsblk -o NAME,ROTA
# ROTA=0 : SSD, ROTA=1 : HDD

# Activer TRIM si SSD
[Swap]
Options=discard

# Vérifier swappiness
cat /proc/sys/vm/swappiness

Sécurité

Swap chiffré

Le swap peut contenir des données sensibles.

Avec LUKS

# Chiffrer la partition
cryptsetup luksFormat /dev/sda2
cryptsetup luksOpen /dev/sda2 swap_crypt

# Formater
mkswap /dev/mapper/swap_crypt
# /etc/systemd/system/dev-mapper-swap_crypt.swap
[Unit]
Description=Encrypted Swap
After=systemd-cryptsetup@swap_crypt.service
Requires=systemd-cryptsetup@swap_crypt.service

[Swap]
What=/dev/mapper/swap_crypt

[Install]
WantedBy=swap.target

Swap éphémère

Chiffrement avec clé aléatoire (perdue au reboot) :

# /etc/crypttab
swap /dev/sda2 /dev/urandom swap,cipher=aes-xts-plain64,size=256

Bonnes pratiques

  1. Toujours utiliser UUID
What=/dev/disk/by-uuid/...
  1. Définir des priorités
Priority=100  # SSD
Priority=10   # HDD
  1. TRIM sur SSD
Options=discard
  1. Ajuster swappiness
# Serveur
vm.swappiness=10

# Desktop
vm.swappiness=60
  1. Monitorer l'utilisation
watch -n 1 'free -h && swapon --show'
  1. Dimensionnement approprié

  2. Serveur : 2-4 Go minimum

  3. Desktop : RAM pour hibernation

  4. Fichier swap sur Btrfs

# Désactiver COW
chattr +C /swapfile
  1. Sécuriser le swap
# Permissions strictes
chmod 600 /swapfile

Le swap reste important même sur des systèmes avec beaucoup de RAM, agissant comme filet de sécurité contre l'OOM killer et permettant l'hibernation.