Nettoyage optimisé de millions de fichiers d'audit Oracle Grid suite à une échec de suppression récursive

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.

Étiquettes: Oracle Grid Audit Linux rsync

Publié le 9 juin à 19h53