Présentation du problème

Un Raspberry Pi 4B utilisé comme serveur domestique a subi une panne de carte SD après des années de fonctionnement en continu. La carte SD était utilisée comme système de fichiers racine et n'avait pas été traitée avec précaution pour minimiser les écritures.

Analyse de la panne

La panne a été diagnostiquée après que le système a refusé de démarrer et que les tentatives de dépannage ont échoué. La carte SD a été inspectée et des erreurs ont été trouvées et corrigées à l'aide de fsck.ext4. Cependant, la carte SD était probablement morte et la panne de courant qui s'est produite quelques jours plus tôt a pu aggraver la situation.

Reconfiguration du serveur

Pour éviter que le problème se reproduise, le serveur a été reconfiguré pour minimiser les écritures sur la carte SD. Le swap a été configuré pour utiliser zram, un module du noyau Linux qui permet de créer un dispositif de bloc compressé en RAM. Les journaux de journald ont également été configurés pour être stockés en mémoire au lieu d'être écrits sur le disque.

Deux anciens disques durs ont été récupérés et configurés en pool btrfs avec réplication raid1. Chaque service a été configuré pour utiliser un sous-volume btrfs dédié, ce qui permet une gestion plus flexible des données.

sudo mkfs.btrfs --data raid1 --metadata raid1 --label ponkotsu /dev/sdX /dev/sdY

La configuration de zram et de journald a été effectuée à l'aide de NixOS, ce qui permet de déclarer la configuration de manière explicite.

{
  # Activer le dispositif de swap compressé en mémoire
  zramSwap.enable = true;
  # Utiliser un disque RAM pour /tmp
  boot.tmp.useTmpfs = true;
}
{
  # Stocker les journaux de journald en mémoire
  services.journald.storage = "volatile";
}