Files
innotexBoard/DISKS_TROUBLESHOOTING.md
2026-01-16 18:40:39 +01:00

300 lines
7.0 KiB
Markdown

# Guide de Troubleshooting - Disques et Partitions
## Problèmes courants et solutions
### 1. L'endpoint retourne une liste vide
**Symptôme**: L'API retourne `{"devices": [], "total_size": "0 B", ...}`
**Causes possibles**:
- La commande `lsblk` n'est pas disponible sur le système
- `lsblk` n'est pas dans le PATH
- Le timeout de 10s a été dépassé
**Solutions**:
```bash
# Vérifier que lsblk est installé
which lsblk
lsblk --json
# Si absent, installer selon votre distribution:
# Ubuntu/Debian:
sudo apt-get install util-linux
# Red Hat/CentOS/Fedora:
sudo yum install util-linux
# Alpine:
apk add util-linux
```
### 2. L'interface affiche "Impossible de charger les disques"
**Symptôme**: Message d'erreur dans la vue frontend
**Causes possibles**:
- Le backend n'est pas accessible
- L'authentification a expiré
- Problème CORS
- L'endpoint n'existe pas
**Solutions**:
```bash
# Vérifier que le backend fonctionne
curl http://localhost:8000/api/system/stats -H "Authorization: Bearer YOUR_TOKEN"
# Vérifier que l'endpoint est enregistré
# Aller sur http://localhost:8000/docs (Swagger UI)
# L'endpoint /system/disks doit apparaître
# Vérifier les logs du backend
# Chercher les erreurs dans la sortie de FastAPI
```
### 3. Les informations d'utilisation sont incorrectes
**Symptôme**: Le pourcentage d'utilisation ne correspond pas à `df`
**Causes possibles**:
- Les points de montage ne sont pas accessibles
- Permission refusée lors de `psutil.disk_usage()`
- Caches système affectant les calculs
**Solutions**:
```bash
# Comparer avec la commande du système
df -h
# Vérifier les permissions des points de montage
ls -la /mnt
mount | grep -E 'rw|ro'
# Les statistiques psutil incluent l'espace "utilisé" différemment
# de "df" du fait des réserves du système de fichiers
```
### 4. Les partitions n'apparaissent pas
**Symptôme**: Le disque s'affiche mais sans ses partitions
**Causes possibles**:
- Les partitions ne sont pas montées
- Le disque n'a pas de partition (ex: raw device)
- Pas de point de montage accessible
**Solutions**:
```bash
# Vérifier la structure
lsblk --json
# Monter les partitions si nécessaire
sudo mount /dev/sda1 /mnt/partition1
# L'interface affichera les partitions même sans mountpoint,
# mais sans taux d'utilisation
```
### 5. Erreur 401 Unauthorized
**Symptôme**: La requête est rejetée avec 401
**Cause**: Token d'authentification invalide ou expiré
**Solutions**:
```bash
# Vous reconnecter dans l'interface
# Ou obtenir un nouveau token:
curl -X POST http://localhost:8000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin"}'
# Vérifier la validité du token dans les headers:
# Authorization: Bearer <token>
```
### 6. Timeout (erreur 504)
**Symptôme**: Request timeout en récupérant les disques
**Cause**: `lsblk` prend plus de 10 secondes
**Solutions**:
```bash
# Augmenter le timeout dans system.py:
# timeout=10 → timeout=30
# Identifier ce qui ralentit lsblk:
time lsblk --json
# Sur les gros systèmes ou systèmes de fichiers réseau lents,
# augmenter le timeout dans system.py peut être nécessaire
```
### 7. Les styles CSS ne s'appliquent pas correctement
**Symptôme**: Les barres de progression n'ont pas de couleur ou de dégradé
**Causes possibles**:
- Tailwind CSS n'est pas compilé
- Les classes Tailwind ne sont pas générées
- Conflit CSS
**Solutions**:
```bash
cd frontend
# Régénérer les styles Tailwind
npm run build
# Ou en mode développement:
npm run dev
# Vérifier dans DevTools que les classes sont appliquées
# Onglet Elements > Inspect > Vérifier les classes
```
## Logique de débogage
### Tester l'endpoint directement
```bash
# 1. Se connecter
TOKEN=$(curl -s -X POST http://localhost:8000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin"}' | jq -r '.access_token')
# 2. Appeler l'endpoint
curl -s -X GET http://localhost:8000/api/system/disks \
-H "Authorization: Bearer $TOKEN" | jq '.'
# 3. Vérifier les résultats
```
### Vérifier la commande lsblk
```bash
# Exécuter la même commande que le backend
lsblk --json --bytes --output NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS | jq '.'
# Vérifier le format JSON
lsblk --json --bytes --output NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS | python3 -m json.tool
```
### Vérifier psutil
```bash
python3 << 'EOF'
import psutil
# Lister les partitions montées
for part in psutil.disk_partitions():
print(f"Device: {part.device}, Mountpoint: {part.mountpoint}")
usage = psutil.disk_usage(part.mountpoint)
print(f" Total: {usage.total}, Used: {usage.used}, Free: {usage.free}")
EOF
```
## Configurations avancées
### Augmenter le timeout
Fichier: `backend/app/services/system.py`, ligne ~212
```python
# Avant:
result = subprocess.run([...], timeout=10)
# Après:
result = subprocess.run([...], timeout=30)
```
### Filtrer les disques/partitions
Pour exclure certains disques (exemple: loop devices):
```python
# Dans get_block_devices(), ajouter après la boucle:
if block_device['type'] == 'loop':
continue # Ignorer les disques loop
if block_device.get('size', 0) < 1024*1024*100: # < 100MB
continue # Ignorer les petits disques
```
### Changer la fréquence de rafraîchissement
Fichier: `frontend/src/views/DisksView.vue`, ligne ~162
```javascript
// Avant:
this.refreshInterval = setInterval(() => {
this.fetchDisks()
}, 30000) // 30 secondes
// Après:
this.refreshInterval = setInterval(() => {
this.fetchDisks()
}, 60000) // 60 secondes
```
## Logs et débogage
### Activer les logs dans le backend
```python
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
# Dans get_block_devices():
logger.debug(f"lsblk output: {result.stdout}")
logger.debug(f"Devices found: {len(devices)}")
```
### Vérifier les erreurs dans le navigateur
1. Ouvrir la console (F12)
2. Onglet "Network" > Filtrer par "Fetch"
3. Cliquer sur la requête `/api/system/disks`
4. Regarder la "Response" pour l'erreur complète
### Vérifier les logs du backend
```bash
# Si FastAPI s'exécute en ligne de commande, les logs s'affichent
# Chercher les messages d'erreur
# Ou rediriger vers un fichier:
python main.py 2>&1 | tee backend.log
```
## Performance
### Optimisations possibles
1. **Caching**: Mettre en cache les résultats pendant 5s pour éviter les appels répétés
2. **Pagination**: Si beaucoup de disques, paginer la réponse
3. **Workers**: Utiliser plusieurs workers Gunicorn pour le backend
4. **Lazy loading**: Charger les partitions à la demande au frontend
### Benchmark
Sur un système typique:
- Exécution de `lsblk --json`: ~50ms
- Récupération d'utilisation (psutil): ~100ms
- Total endpoint: ~150-200ms
Si vous observez des temps plus longs, vérifier:
- Les disques réseau montés
- Les systèmes de fichiers lents
- Le nombre de partitions
## Ressources supplémentaires
- `lsblk` man page: `man lsblk`
- Documentation psutil: https://psutil.readthedocs.io/
- Tailwind CSS: https://tailwindcss.com/
- Vue 3: https://vuejs.org/
- FastAPI: https://fastapi.tiangolo.com/