🛠 Survivre avec 512 Mo : zram, swap compressé et services légers

Banana Pi BPI-M2 Zero (Allwinner H2+ / H3) · intermediaire · Schéma : IMG-bananapi-m2-zero-intermediaire-3-zram-memoire-512mo-m2-zero.svg — BPI-M2 Zero avec jauge de RAM à moitié pleine ; diagramme en médaillon : la RAM se scinde en applications + bloc zram compressé utilisé comme swap, la microSD reste à l'écart du swap.

Objectifs

512 MB de DDR3 partagés avec le GPU Mali-400 : c'est le plafond du BPI-M2 Zero, et la revue de référence qui a fait tourner Geekbench 5 sur la carte a dû activer zram et le pousser vers 350 MB pour finir la mesure. zram crée un bloc de swap compressé dans la RAM : on gagne des octets sans user la microSD (le seul stockage de la carte, encore plus précieuse qu'ailleurs). Vous allez mettre en place zram proprement, alléger les services et vérifier que la carte tient une charge réelle.

Matériel

Code complet

# 1) État des lieux : y a-t-il déjà un swap ? (ne pas doubler les dispositifs)
free -h && swapon --show && lsmod | grep zram

# 2) Créer un zram de 384 Mo en LZ4 et l'activer comme swap
sudo modprobe zram
echo lz4 | sudo tee /sys/block/zram0/comp_algorithm
sudo zramctl /dev/zram0 --size 384M
sudo mkswap /dev/zram0 && sudo swapon /dev/zram0

# 3) Le rendre résistant au reboot via un service systemd
sudo tee /etc/systemd/system/zram-swap.service >/dev/null <<'EOF'
[Unit]
Before=swap.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'modprobe zram && echo lz4 > /sys/block/zram0/comp_algorithm && zramctl /dev/zram0 --size 384M && mkswap /dev/zram0 && swapon /dev/zram0'
ExecStop=/bin/sh -c 'swapoff /dev/zram0 && zramctl /dev/zram0 --reset'
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now zram-swap.service

# 4) Alléger : désactiver ce qui est inutile sur un rôle précis
systemctl list-unit-files --state=enabled | head -30
sudo systemctl disable --now bluetooth    # si le BT ne sert pas

# 5) Épreuve de feu
sudo apt install -y stress-ng && stress-ng --vm 2 --vm-bytes 200M --timeout 60s
free -h && dmesg | tail    # aucun OOM-killer sur sshd

Vérification attendue

swapon --show liste /dev/zram0 (priorité élevée, pas de fichier sur la SD) ; pendant stress-ng, le swap se remplit mais la session SSH reste vivante et dmesg ne clame pas l'OOM-killer ; zramctl affiche la compression réelle (souvent 3 à 4×).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels