Optimisations OS¶
DietPi sur Raspberry Pi 4 — toutes les optimisations appliquees pour la stabilite SSD, la longevite du stockage et l'economie de ressources.
Stabilite SSD (bridge USB-SATA ASMedia ASM1156)¶
Probleme
Le boitier Argon ONE M.2 utilise un bridge ASMedia ASM1156 (USB-to-SATA) qui est sujet a des deconnexions aleatoires sur RPi 4 a cause de la gestion d'energie PCIe.
Parametres kernel (cmdline.txt)¶
pcie_aspm=off # Desactive PCIe ASPM (cause principale des decos)
usbcore.autosuspend=-1 # Desactive USB autosuspend
usb-storage.quirks=174c:1156:u # Force usb-storage au lieu de UAS pour ce device
Regles udev¶
/etc/udev/rules.d/50-argon-ssd.rules :
# Desactive autosuspend pour le bridge ASMedia
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="174c", ATTR{idProduct}=="1156", \
ATTR{power/control}="on", ATTR{power/autosuspend_delay_ms}="-1"
# Desactive autosuspend sur le hub USB 2.0 VIA Labs parent
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="2109", ATTR{idProduct}=="3431", \
ATTR{power/control}="on", ATTR{power/autosuspend_delay_ms}="-1"
# Marque le SSD comme non-rotational (le bridge USB ne transmet pas cette info)
ACTION=="add|change", KERNEL=="sd[a-z]", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="1156", \
ATTR{queue/rotational}="0"
Montage et filesystem¶
fstab¶
# Tmpfs pour les logs (evite l'usure SD)
tmpfs /tmp tmpfs size=3929M,noatime,lazytime,nodev,nosuid,mode=1777
tmpfs /var/log tmpfs size=50M,noatime,lazytime,nodev,nosuid
# SD Card
PARTUUID=503f5518-02 / ext4 noatime,lazytime,rw 0 1
PARTUUID=503f5518-01 /boot/firmware vfat noatime,lazytime,rw 0 2
# SSD (nofail = boot meme si SSD absent, errors=remount-ro = protection donnees)
UUID=b32ed1bb-... /mnt/ssd ext4 noatime,lazytime,rw,nofail,errors=remount-ro
Points cles
noatime,lazytimesur toutes les partitions — reduit les ecrituresnofailsur le SSD — le systeme boot meme si le SSD n'est pas brancheerrors=remount-ro— protege le filesystem en cas d'erreur I/O- Pas de swap (swappiness=1)
Headless / economie de ressources¶
config.txt¶
max_framebuffers=0 # Pas de framebuffer (headless)
hdmi_ignore_hotplug=1 # Ignore HDMI meme si branche
hdmi_blanking=1 # Standby HDMI
disable_splash=1 # Pas de splash screen
dtparam=audio=off # Pas d'audio
gpu_mem_256=16 # GPU minimal
gpu_mem_512=16
gpu_mem_1024=16
dtoverlay=disable-wifi # WiFi desactive
dtparam=sd_poll_once # Pas de polling SD continu
enable_uart=1 # Console serie active (debug)
dtparam=i2c_arm=on # I2C pour le ventilateur Argon
Docker¶
daemon.json¶
{
"data-root": "/mnt/ssd/docker",
"log-driver": "journald",
"log-level": "warn",
"debug": false,
"icc": false,
"no-new-privileges": true
}
data-rootsur le SSD — images, volumes, et overlays sur le disque rapidelog-driver: journald— logs dans journald (en tmpfs via DietPi), pas sur disquelog-level: warn— limite le bruit dans les logsicc: false— inter-container communication OFF sur bridge par defaut (securite)no-new-privileges: true— empeche l'escalade de privileges dans les containers
Pour les mesures de hardening Docker detaillees (cap_drop, read_only, socket-proxy), voir hardening.md.
Watchdog hardware (BCM2835)¶
Le RPi 4 integre un watchdog hardware qui reboot automatiquement la machine si le kernel freeze.
Fonctionnement¶
Le daemon watchdog alimente /dev/watchdog toutes les secondes. Si le kernel gele et que le daemon ne peut plus ecrire pendant 15 secondes, le timer hardware force un reboot electrique.
Configuration¶
/boot/firmware/config.txt :
/etc/modules :
/etc/watchdog.conf (extrait) :
watchdog-device = /dev/watchdog
watchdog-timeout = 15
max-load-1 = 24
interface = eth0
realtime = yes
priority = 1
Ce que le watchdog couvre et ne couvre PAS¶
| Scenario | Couvert ? | Pourquoi |
|---|---|---|
| Kernel freeze / panic | Oui | Le daemon ne peut plus alimenter le timer |
| Load moyenne > 24 | Oui | Le daemon detecte et reboot |
| Interface eth0 down | Oui | Le daemon detecte et reboot |
| Deconnexion SSD | Non | Le kernel tourne toujours, seul Docker est impacte |
| Container crash | Non | Couvert par autoheal + homelab_monitor.sh |
| Temperature critique | Non | Couvert par homelab_monitor.sh |
Le watchdog ne remplace pas le monitoring
Le watchdog est le dernier recours (le kernel est mort). Le script homelab_monitor.sh est la premiere ligne (quelque chose va mal mais le systeme tourne encore). Les deux sont complementaires.
Verification¶
# Etat du watchdog
systemctl status watchdog
cat /sys/class/watchdog/watchdog0/state # "active" = alimente
# Test (ATTENTION : reboot immediat en ~15s)
echo c > /proc/sysrq-trigger # Provoque un kernel panic
Docker : healthchecks et autoheal¶
Healthchecks¶
Les containers avec healthcheck sont surveilles par Docker. Si un check echoue 3 fois de suite, le container passe en unhealthy.
| Container | Healthcheck | Methode |
|---|---|---|
| Traefik | wget http://localhost:8080/ping |
Endpoint /ping active dans traefik.yml |
| AdGuard | wget http://localhost:3000 |
Interface web |
| Tailscale | tailscale status |
CLI interne |
| Vaultwarden | Healthcheck integre a l'image | — |
| Homepage | Healthcheck integre a l'image | — |
| Authelia | Healthcheck integre a l'image | — |
| Watchtower | Healthcheck integre a l'image | — |
| Portainer | Aucun (image distroless) | Surveille par homelab_monitor.sh |
| Beszel | Aucun (image distroless) | Surveille par homelab_monitor.sh |
Autoheal¶
Le container willfarrell/autoheal surveille tous les containers toutes les 30 secondes. Si un container est unhealthy, il le restart automatiquement.
autoheal:
image: willfarrell/autoheal
environment:
AUTOHEAL_CONTAINER_LABEL: all
AUTOHEAL_INTERVAL: 30
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Resume¶
| Optimisation | Effet |
|---|---|
| PCIe ASPM off | Empeche les deconnexions SSD |
| USB autosuspend off | Double protection SSD |
| UAS desactive | Force usb-storage (plus stable) |
| SSD non-rotational | I/O scheduler optimise |
| Logs en tmpfs | Pas d'usure SD |
| Swap desactive | Pas d'usure SSD/SD |
| GPU 16 Mo | Plus de RAM pour les services |
| Headless | Framebuffers a 0 |
| WiFi off | Economie energie, securite |
| fstrim hebdo | Maintenance SSD |
| Watchdog BCM2835 | Reboot auto si kernel freeze (15s) |
| Healthchecks Docker | Detection containers zombie |
| Autoheal | Restart auto des containers unhealthy |
Limites connues¶
Limitations hardware du bridge ASMedia
- TRIM non supporte (
discard_max_bytes=0) — le garbage collection interne du SSD compense - USB 3.0 plafonne a ~200 MB/s — bus partage avec Ethernet Gigabit sur RPi 4
nr_requests=2— limitation du driverusb-storage, non modifiable sans UAS