5.0 KiB
5.0 KiB
check_swap_all.sh — Audit du swap sur VMs & CTs Proxmox (PVE)
🔍 Objectif
Lister, en un seul passage, l’état du swap et de la mémoire pour un ensemble de VMs et de containers LXC sur un hôte Proxmox VE.
- Pour les VMs : utilise le QEMU Guest Agent afin d’exécuter des commandes invité (
swapon --show,free -h). - Pour les CTs : exécute directement via
pct execles mêmes commandes.
🧩 Fonctionnement (résumé)
- Définit deux tableaux d’identifiants :
VM_IDS=(...)etCT_IDS=(...). - Pour chaque VM :
- Vérifie que la VM est allumée (
qm status <id>). - Tente une commande via QEMU Agent (
qm guest cmd <id> get-osinfo). - Si OK, exécute sur l’invité :
echo '[swapon]'; swapon --show || echo 'Aucun swap'; echo; echo '[free]'; free -h - Sinon, signale que l’agent est inactif/non installé.
- Vérifie que la VM est allumée (
- Pour chaque CT :
- Vérifie que le CT est running (
pct status <id>). - Exécute les mêmes commandes avec
pct exec.
- Vérifie que le CT est running (
✅ Prérequis
- Hôte Proxmox VE avec accès root (pas de
sudoen PVE). - QEMU Guest Agent installé & actif dans les VMs (sinon seules les CTs seront auditées).
- Linux (Debian/Ubuntu) dans la VM :
apt update && apt install -y qemu-guest-agent systemctl enable --now qemu-guest-agent - Côté PVE (optionnel) : assurez-vous que Options ▸ QEMU Agent = Activé dans la conf de la VM.
- Linux (Debian/Ubuntu) dans la VM :
- Les containers LXC doivent avoir bash,
swapon,freedisponibles (paquetsprocps,util-linuxselon distro).
📦 Installation
- Copier le script dans votre dépôt de scripts, ex.
/home/scripts:install -m 0755 check_swap_all.sh /home/scripts/check_swap_all.sh - Adapter les listes d’IDs en tête de script :
VM_IDS=(100 101 102 103 104) CT_IDS=(20009000 20232400 20308096 20401080 20508080)
💡 Conformément à votre organisation,
/home/scriptsest le dossier de référence.
▶️ Utilisation
Exécuter en root sur l’hôte PVE :
/home/scripts/check_swap_all.sh
Extrait de sortie typique :
======================
🔍 CHECK SWAP - VMs
======================
➡️ VM 102
✅ QEMU Agent actif sur VM 102
[swapon]
NAME TYPE SIZE USED PRIO
/dev/sda2 file 4G 1.2G -2
[free]
total used free shared buff/cache available
Mem: 16Gi 3.1Gi 8.7Gi 183Mi 4.0Gi 12Gi
Swap: 4.0Gi 1.2Gi 2.8Gi
➡️ VM 103
⚠️ VM 103 allumée mais QEMU agent inactif ou non installé
======================
🔍 CHECK SWAP - CTs
======================
➡️ CT 20009000
✅ CT 20009000 en cours d'exécution
[swapon]
Aucun swap
[free]
total used free shared buff/cache available
Mem: 2048Mi 350Mi 1400Mi 50Mi 297Mi 1720Mi
Swap: 0B 0B 0B
➡️ CT 20308096
⚠️ CT 20308096 éteint
⏱️ Planification (cron) — audit régulier
Pour un rapport manuel ponctuel, lancer le script à la demande.
Pour un contrôle régulier, vous pouvez planifier un cron journalier à 08:00 (exécution locale, sortie visible dans mail root ou redirigée vers un fichier) :
0 8 * * * /home/scripts/check_swap_all.sh >> /var/log/check_swap_all.log 2>&1
- Supprimez la redirection
>>si vous préférez recevoir l’email cron root. - Pour un run silencieux (uniquement log) : gardez la redirection comme ci-dessus.
🧰 Dépannage
- “QEMU agent inactif” sur VM :
- Vérifier l’installation/service côté VM (
systemctl status qemu-guest-agent). - Vérifier l’option QEMU Agent activée dans la conf PVE de la VM.
- Vérifier l’installation/service côté VM (
- Commandes introuvables dans CT/VM :
- Installer
procpspourfree, et vérifierutil-linuxpourswapon.
- Installer
- Temps de réponse long sur certaines VMs :
- L’appel
qm guest execattend la fin de la commande ; sous forte charge, la sortie peut être retardée.
- L’appel
🛡️ Sécurité & impacts
- Le script est read-only côté invités (consultation d’état), sans modification de configuration.
- Aucune opération n’est lancée si la VM/CT n’est pas running.
- Les appels invités via QEMU Agent exigent une VM fiablement configurée (agent en service).
🗑️ Désinstallation
rm -f /home/scripts/check_swap_all.sh
rm -f /var/log/check_swap_all.log # si vous aviez activé la redirection cron
✍️ Note
- Script compatible PVE standards (
qm,pct). - Aucune dépendance externe hors PVE et outils système de base dans l’invité.
- Idéal comme check rapide avant d’activer une purge automatisée (cf.
swap_cleaner.sh).
📄 Licence
Utilisation interne. Adapter selon votre politique de sécurité.