Incident (3ᵉ récidive) — MinIO en CrashLoopBackOff ~22 h sur pi3 (« drive is faulty ») : envois de vidéos bloqués ; réparé par remontage le 24/09 09:02 UTC
#58
Error: unable to rename (/export/.minio.sys/tmp -> /export/.minio.sys/tmp-old/<uuid>) drive is faulty
FATAL Unable to initialize backend: drive is faulty
Côté kadans-api : Head "http://minio.tools.svc.cluster.local:9000/…": dial tcp 10.43.120.205:9000: connect: connection refused (Endpoints minio vides). Aucun envoi ne pouvait aboutir.
Longhorn : volume pvc-ebb2605f-…attached / healthy, 3 répliques running — il dit sain, comme les deux fois précédentes.
Chronologie (mesurée)
2026-09-23 10:28:18 UTC — kadans-jobs : store redis : lecture en masse impossible : … i/o timeout (à-coup réseau).
2026-09-23 11:01:09 et 11:04:47 UTC — instance-manager de pi3, moteur du volume : R/W Timeout. No response received in 8s → Setting replica tcp://10.42.0.11:… to ERR (deux fois en 4 min).
⇒ écritures en échec → ext4 abandonne son journal → lecture seule jusqu'au démontage. Un redémarrage du conteneur ne démonte pas le volume : le CrashLoop ne peut pas guérir seul.
09:01:56 UTC kubectl --context default -n tools scale deploy/minio --replicas=0 ; ArgoCD (selfHeal) a remis replicas=1 → pod neuf minio-646d87c9bc-46wmk sur pi3, montage neuf.
Vérifié : /minio/health/live200, /minio/health/cluster200, fichier écrit/relu/effacé dans /export/.minio.sys/tmp → écriture OK. Dernier connection refused côté API : 09:02:17. Aucune donnée supprimée.
Ce qui reste ouvert (cause première non traitée, 3ᵉ fois)
Sortir MinIO de pi2 n'a pas suffi : l'à-coup a frappé le moteur sur pi3 (la réplique perdue est 10.42.0.11). La cause est le délai de 8 s entre moteur et répliques sous charge/réseau, pas un nœud.
Rien n'alerte : 22 h de panne découvertes par le fondateur au téléphone. Une sonde de liveness ne suffit pas (elle redémarre le conteneur, pas le montage). Pistes : alerte sur kube_pod_container_status_restarts_total / CrashLoopBackOff du namespace tools ; ou un garde qui supprime le pod (pas le conteneur) quand le journal dit drive is faulty.
Migration SeaweedFS (#48) : même volume Longhorn → même exposition ; à peser.
## Constat (2026-09-24, signalé par le fondateur : « l'upload de vidéos depuis mon téléphone semble bloqué »)
- Pod `tools/minio-646d87c9bc-hscwt` sur **pi3** : `0/1 CrashLoopBackOff`, **260 redémarrages** (≈ 22 h à 5 min de backoff).
- Même journal que #31 et #49 :
```
Error: unable to rename (/export/.minio.sys/tmp -> /export/.minio.sys/tmp-old/<uuid>) drive is faulty
FATAL Unable to initialize backend: drive is faulty
```
- Côté kadans-api : `Head "http://minio.tools.svc.cluster.local:9000/…": dial tcp 10.43.120.205:9000: connect: connection refused` (Endpoints `minio` vides). Aucun envoi ne pouvait aboutir.
- Longhorn : volume `pvc-ebb2605f-…` `attached / healthy`, 3 répliques `running` — **il dit sain, comme les deux fois précédentes**.
## Chronologie (mesurée)
- 2026-09-23 **10:28:18 UTC** — kadans-jobs : `store redis : lecture en masse impossible : … i/o timeout` (à-coup réseau).
- 2026-09-23 **11:01:09 et 11:04:47 UTC** — instance-manager de pi3, moteur du volume : `R/W Timeout. No response received in 8s` → `Setting replica tcp://10.42.0.11:… to ERR` (deux fois en 4 min).
- ⇒ écritures en échec → ext4 abandonne son journal → lecture seule jusqu'au démontage. Un redémarrage du **conteneur** ne démonte pas le volume : le CrashLoop ne peut pas guérir seul.
## Réparation (sans perte, remède de #31)
- 09:01:56 UTC `kubectl --context default -n tools scale deploy/minio --replicas=0` ; ArgoCD (selfHeal) a remis `replicas=1` → pod neuf `minio-646d87c9bc-46wmk` sur pi3, montage neuf.
- Vérifié : `/minio/health/live` **200**, `/minio/health/cluster` **200**, fichier écrit/relu/effacé dans `/export/.minio.sys/tmp` → **écriture OK**. Dernier `connection refused` côté API : 09:02:17. Aucune donnée supprimée.
## Ce qui reste ouvert (cause première non traitée, 3ᵉ fois)
1. **Sortir MinIO de pi2 n'a pas suffi** : l'à-coup a frappé le moteur sur pi3 (la réplique perdue est `10.42.0.11`). La cause est le délai de 8 s entre moteur et répliques sous charge/réseau, pas un nœud.
2. **Rien n'alerte** : 22 h de panne découvertes par le fondateur au téléphone. Une sonde de liveness ne suffit pas (elle redémarre le conteneur, pas le montage). Pistes : alerte sur `kube_pod_container_status_restarts_total` / CrashLoopBackOff du namespace `tools` ; ou un garde qui **supprime le pod** (pas le conteneur) quand le journal dit `drive is faulty`.
3. Migration SeaweedFS (#48) : même volume Longhorn → même exposition ; à peser.
Précédents : #31 (29/08, pi2), #49 (14/09, pi2).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Nouvelle récidive le 2026-09-25, réparée à 18 h 22 (accord du fondateur)
Symptôme
tools/minio en CrashLoopBackOff : unable to rename .minio.sys/tmp … drive is faulty.
s3.arcodange.fr rendait 503 depuis environ 04 h 26.
Le noyau de pi3 signalait critical medium error, dev sdd (le volume Longhorn pvc-ebb2605f…), alors que Longhorn affichait healthy avec ses 3 répliques running.
Ce qui n'a PAS suffi
scale --replicas=0 seul. ArgoCD (selfHeal, sur minio comme sur l'app parente tools) a remis 1 réplique en quelques secondes : le volume n'a jamais été détaché, et le nouveau pod a replanté pareil.
Ce qui a marché
Un instantané Longhorn d'abord : minio-avant-detachement-2026-09-25, prêt en 5 s.
L'auto-synchronisation d'ArgoCD retirée sur tools puis sur minio, et scale --replicas=0.
Le volume est passé en detaching, puis a été rattaché avec un montage neuf. Le passage de fsck au montage est la voie que décrit le diagnostic de la session voisine ; je ne l'ai pas vu dans un journal.
Relevé : pod 1/1 Running, /minio/health/live et /minio/health/ready à 200, aucune ligne faulty ni error dans le journal.
La politique de synchronisation des deux apps est revenue à {prune: true, selfHeal: true}, comme avant.
Ce qui reste ouvert (cette issue)
Aucune alerte n'a prévenu : la panne a duré environ 14 h.
La cause première est une erreur d'E/S du moteur Longhorn pendant un incident réseau du homelab.
Le fondateur a répondu à la session voisine : « No need for replicas for homelab ». Un agent évalue une autre classe de stockage pour MinIO (local-path, ou Longhorn à 1 réplique).
## Nouvelle récidive le 2026-09-25, réparée à 18 h 22 (accord du fondateur)
**Symptôme**
- `tools/minio` en CrashLoopBackOff : `unable to rename .minio.sys/tmp … drive is faulty`.
- `s3.arcodange.fr` rendait 503 depuis environ 04 h 26.
- Le noyau de pi3 signalait `critical medium error, dev sdd` (le volume Longhorn `pvc-ebb2605f…`), alors que Longhorn affichait `healthy` avec ses 3 répliques `running`.
**Ce qui n'a PAS suffi**
- `scale --replicas=0` seul. ArgoCD (selfHeal, sur `minio` comme sur l'app parente `tools`) a remis 1 réplique en quelques secondes : le volume n'a jamais été détaché, et le nouveau pod a replanté pareil.
**Ce qui a marché**
1. Un instantané Longhorn d'abord : `minio-avant-detachement-2026-09-25`, prêt en 5 s.
2. L'auto-synchronisation d'ArgoCD retirée sur `tools` puis sur `minio`, et `scale --replicas=0`.
3. Le volume est passé en `detaching`, puis a été rattaché avec un montage neuf. Le passage de `fsck` au montage est la voie que décrit le diagnostic de la session voisine ; je ne l'ai pas vu dans un journal.
4. Relevé : pod `1/1 Running`, `/minio/health/live` et `/minio/health/ready` à 200, aucune ligne `faulty` ni `error` dans le journal.
5. La politique de synchronisation des deux apps est revenue à `{prune: true, selfHeal: true}`, comme avant.
**Ce qui reste ouvert (cette issue)**
- Aucune alerte n'a prévenu : la panne a duré environ 14 h.
- La cause première est une erreur d'E/S du moteur Longhorn pendant un incident réseau du homelab.
- Le fondateur a répondu à la session voisine : « No need for replicas for homelab ». Un agent évalue une autre classe de stockage pour MinIO (local-path, ou Longhorn à 1 réplique).
Bascule de MinIO sur le disque externe de pi1 — bilan du 2026-09-26
Fait : tools#60 (→ 865b8254), fusionné à 11 h 05 ; MinIO prêt à 11 h 12 sur le PV local minio-disque-externe (pi1:/mnt/arcodange/minio, Retain, Prune=false). .lab, kadans.arcodange.fr et s3.arcodange.fr/minio/health/live rendent 200 (relevé 17 h 56).
⚠ Ce qui n'a PAS marché
Copie 1 (Job minio-vers-disque-externe-1) : set -eu, rsync sans tuyau → Completed = rsync à 0. Digne de foi.
Copie 2 (le rattrapage) : « Complete » MENTEUR.rsync … | grep | tail sans pipefail : le Job a pris le code de tail. rsync a rendu 23 (I/O error (5) sur /source/kadans-videos, /source/.minio.sys, lost+found) et a transféré 0 octet. Erreur de script de ma part.
Conséquence : ce que l'ancien MinIO a reçu entre la copie 1 (≈ 10 h 48) et la bascule (11 h 05) n'est pas sur le disque externe, et l'ancien volume Longhorn pvc-ebb2605f (le retour arrière) est illisible aujourd'hui : une seule réplique (pi2, stopped), détaché. Instantanés existants : fadbd8e4… (25/09 02:30 UTC) et minio-avant-detachement-2026-09-25 — tous deux ANTÉRIEURS à la fenêtre.
Effet de bord de la fusion : toutes les apps ArgoCD suivant main, la LAPI CrowdSec a replanté sur pi1, où Longhorn refusait tout attachement (engineimages ei-b4bcf0a5 : nodeDeploymentMap.pi1=false figé depuis 00:06Z, pod du moteur pourtant prêt) → 403 sur tout kadans.arcodange.fr et s3.arcodange.fr de ~11 h à 17 h 56. Recréer le pod du moteur sur pi1 puis redémarrer le manager propriétaire (pi3), avec l'accord du fondateur, n'a pas réécrit la carte ; elle était à true à 17 h 42 — lue dans la même seconde qu'une annotation de réveil posée après 5 h 40 d'attente, donc cause et remède non établis. La LAPI est finalement repartie sur pi3.
Reste à décider (fondateur) : que faire de la fenêtre non couverte et du volume pvc-ebb2605f.
## Bascule de MinIO sur le disque externe de pi1 — bilan du 2026-09-26
**Fait** : tools#60 (→ 865b8254), fusionné à 11 h 05 ; MinIO prêt à 11 h 12 sur le PV local `minio-disque-externe` (pi1:/mnt/arcodange/minio, `Retain`, `Prune=false`). `.lab`, `kadans.arcodange.fr` et `s3.arcodange.fr/minio/health/live` rendent 200 (relevé 17 h 56).
**⚠ Ce qui n'a PAS marché**
- **Copie 1** (Job `minio-vers-disque-externe-1`) : `set -eu`, rsync sans tuyau → `Completed` = rsync à 0. Digne de foi.
- **Copie 2 (le rattrapage) : « Complete » MENTEUR.** `rsync … | grep | tail` sans `pipefail` : le Job a pris le code de `tail`. rsync a rendu **23** (`I/O error (5)` sur `/source/kadans-videos`, `/source/.minio.sys`, `lost+found`) et a transféré **0 octet**. Erreur de script de ma part.
- Conséquence : **ce que l'ancien MinIO a reçu entre la copie 1 (≈ 10 h 48) et la bascule (11 h 05) n'est pas sur le disque externe**, et l'ancien volume Longhorn `pvc-ebb2605f` (le retour arrière) est illisible aujourd'hui : **une seule réplique (pi2, stopped)**, détaché. Instantanés existants : `fadbd8e4…` (25/09 02:30 UTC) et `minio-avant-detachement-2026-09-25` — tous deux ANTÉRIEURS à la fenêtre.
**Effet de bord de la fusion** : toutes les apps ArgoCD suivant `main`, la LAPI CrowdSec a replanté sur pi1, où Longhorn refusait tout attachement (`engineimages ei-b4bcf0a5` : `nodeDeploymentMap.pi1=false` figé depuis 00:06Z, pod du moteur pourtant prêt) → **403 sur tout `kadans.arcodange.fr` et `s3.arcodange.fr` de ~11 h à 17 h 56**. Recréer le pod du moteur sur pi1 puis redémarrer le manager propriétaire (pi3), avec l'accord du fondateur, n'a pas réécrit la carte ; elle était à `true` à 17 h 42 — lue dans la même seconde qu'une annotation de réveil posée après 5 h 40 d'attente, donc **cause et remède non établis**. La LAPI est finalement repartie sur pi3.
**Reste à décider (fondateur)** : que faire de la fenêtre non couverte et du volume `pvc-ebb2605f`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Constat (2026-09-24, signalé par le fondateur : « l'upload de vidéos depuis mon téléphone semble bloqué »)
tools/minio-646d87c9bc-hscwtsur pi3 :0/1 CrashLoopBackOff, 260 redémarrages (≈ 22 h à 5 min de backoff).Head "http://minio.tools.svc.cluster.local:9000/…": dial tcp 10.43.120.205:9000: connect: connection refused(Endpointsminiovides). Aucun envoi ne pouvait aboutir.pvc-ebb2605f-…attached / healthy, 3 répliquesrunning— il dit sain, comme les deux fois précédentes.Chronologie (mesurée)
store redis : lecture en masse impossible : … i/o timeout(à-coup réseau).R/W Timeout. No response received in 8s→Setting replica tcp://10.42.0.11:… to ERR(deux fois en 4 min).Réparation (sans perte, remède de #31)
kubectl --context default -n tools scale deploy/minio --replicas=0; ArgoCD (selfHeal) a remisreplicas=1→ pod neufminio-646d87c9bc-46wmksur pi3, montage neuf./minio/health/live200,/minio/health/cluster200, fichier écrit/relu/effacé dans/export/.minio.sys/tmp→ écriture OK. Dernierconnection refusedcôté API : 09:02:17. Aucune donnée supprimée.Ce qui reste ouvert (cause première non traitée, 3ᵉ fois)
10.42.0.11). La cause est le délai de 8 s entre moteur et répliques sous charge/réseau, pas un nœud.kube_pod_container_status_restarts_total/ CrashLoopBackOff du namespacetools; ou un garde qui supprime le pod (pas le conteneur) quand le journal ditdrive is faulty.Précédents : #31 (29/08, pi2), #49 (14/09, pi2).
🤖 Generated with Claude Code
Nouvelle récidive le 2026-09-25, réparée à 18 h 22 (accord du fondateur)
Symptôme
tools/minioen CrashLoopBackOff :unable to rename .minio.sys/tmp … drive is faulty.s3.arcodange.frrendait 503 depuis environ 04 h 26.critical medium error, dev sdd(le volume Longhornpvc-ebb2605f…), alors que Longhorn affichaithealthyavec ses 3 répliquesrunning.Ce qui n'a PAS suffi
scale --replicas=0seul. ArgoCD (selfHeal, surminiocomme sur l'app parentetools) a remis 1 réplique en quelques secondes : le volume n'a jamais été détaché, et le nouveau pod a replanté pareil.Ce qui a marché
minio-avant-detachement-2026-09-25, prêt en 5 s.toolspuis surminio, etscale --replicas=0.detaching, puis a été rattaché avec un montage neuf. Le passage defsckau montage est la voie que décrit le diagnostic de la session voisine ; je ne l'ai pas vu dans un journal.1/1 Running,/minio/health/liveet/minio/health/readyà 200, aucune lignefaultynierrordans le journal.{prune: true, selfHeal: true}, comme avant.Ce qui reste ouvert (cette issue)
Bascule de MinIO sur le disque externe de pi1 — bilan du 2026-09-26
Fait : tools#60 (→
865b8254), fusionné à 11 h 05 ; MinIO prêt à 11 h 12 sur le PV localminio-disque-externe(pi1:/mnt/arcodange/minio,Retain,Prune=false)..lab,kadans.arcodange.frets3.arcodange.fr/minio/health/liverendent 200 (relevé 17 h 56).⚠ Ce qui n'a PAS marché
minio-vers-disque-externe-1) :set -eu, rsync sans tuyau →Completed= rsync à 0. Digne de foi.rsync … | grep | tailsanspipefail: le Job a pris le code detail. rsync a rendu 23 (I/O error (5)sur/source/kadans-videos,/source/.minio.sys,lost+found) et a transféré 0 octet. Erreur de script de ma part.pvc-ebb2605f(le retour arrière) est illisible aujourd'hui : une seule réplique (pi2, stopped), détaché. Instantanés existants :fadbd8e4…(25/09 02:30 UTC) etminio-avant-detachement-2026-09-25— tous deux ANTÉRIEURS à la fenêtre.Effet de bord de la fusion : toutes les apps ArgoCD suivant
main, la LAPI CrowdSec a replanté sur pi1, où Longhorn refusait tout attachement (engineimages ei-b4bcf0a5:nodeDeploymentMap.pi1=falsefigé depuis 00:06Z, pod du moteur pourtant prêt) → 403 sur toutkadans.arcodange.frets3.arcodange.frde ~11 h à 17 h 56. Recréer le pod du moteur sur pi1 puis redémarrer le manager propriétaire (pi3), avec l'accord du fondateur, n'a pas réécrit la carte ; elle était àtrueà 17 h 42 — lue dans la même seconde qu'une annotation de réveil posée après 5 h 40 d'attente, donc cause et remède non établis. La LAPI est finalement repartie sur pi3.Reste à décider (fondateur) : que faire de la fenêtre non couverte et du volume
pvc-ebb2605f.