Contexte de l'incident
Dans une production Oracle 19c RAC, une alerte d'espace disque critique a été émise en raison de l'occupation excessive par des ficheirs d'audit dans le répertoire Grid. La configuration d'audit par défaut, avec audit_sys_operations activé, a généré plus de 5,2 millions de fichiers .aud sur une longue période, saturant le stockage.
Tentatives initiales et échecs
Une suppression directe avec la commande rm -rf *.aud a échoué, l'erreur "Argument list too long" survenant à cause des limitations du shell. L'approche alternative avec find -exec rm -f {} \; a été trop lente, prenant plus de 30 minutes pour traiter l'ensemble des fichiers, ce qui était inacceptable pour une intervention d'urgence en production.
Stratégies de suppression performantes
Simulation de l'environnement
Pour évaluer les performances, un répertoire de test a été créé avec 5 millions de fichiers en utilisant un script Python modifié :
import os
chemin_audit = "/data/audit_grid/"
os.makedirs(chemin_audit, exist_ok=True)
for compteur in range(5000000):
nom_fichier = f"enregistrement_{compteur:09d}.log"
chemin_complet = os.path.join(chemin_audit, nom_fichier)
with open(chemin_complet, 'w') as fichier:
fichier.write('')
Comparaison des méthodes
La technique la plus efficace s'est avérée être l'utilisation de rsync pour synchroniser un répertoire vide, exploitant son algorithme de synchronisation incrémentielle pour supprimer les fichiers de manière optimale.
mkdir /tmp/vide
rsync -a --delete /tmp/vide/ /data/audit_grid/
Cette méthode a permis de supprimer 5 millions de fichiers en environ 2 minutes, soit une amélioration significative par rapport aux approches conventionnelles.
Recommandations pour la production
Nettoyage d'urgence rapide
rsync -a --delete --progress /tmp/vide/ /u01/app/grid/rdbms/audit/
Suppression sélective par date
find /u01/app/grid/rdbms/audit -name "*.aud" -mtime +30 -exec rm -f {} \;
Mesures préventives à long terme
Optimisation de la configuration d'audit
ALTER SYSTEM SET audit_sys_operations=FALSE SCOPE=spfile;
ALTER SYSTEM SET audit_trail=NONE SCOPE=spfile;
Automatisation du nettoyage
#!/bin/bash
find /chemin/vers/audit -name "*.log" -mtime +7 -delete
Isolation du système de fichiers
Dédier un volume logique distinct pour les fichiers d'audit, par exemple avec XFS, afin de limiter l'impact des accumulations futures et faciliter la gestion.
Principes techniques sous-jacents
La rapidité de find -delete ou rsync --delete s'explique par des appels système optimisés comme unlinkat() et une traversée efficace des répertoires. Les performances varient selon le système de fichiers (XFS surpasse EXT4 pour les petits fichiers), le type de disque (NVMe vs HDD) et la structure des répertoires. Ajuster des paramètres noyau comme vfs_cache_pressure peut aussi améliorer les opérations à grande échelle.
Bonnes pratiques opérationnelles
Intégrer les audits dans les listes de déploiement, isoler les composants critiques sur des systèmes de fichiers dédiés, et privilégier des outils adoptés au volume : find pour des dizaines de milliers de fichiers, xargs pour des centaines de milliers, et rsync ou des solutions spécialisées pour des millions de fichiers. L'acecnt doit être mis sur la conception architecturale et l'automatisation pour prévenir les incidents.