💽

Disk Overvågnings Script

Indsamler directory-størrelser og backup-filer og gemmer løbende i MariaDB (drift)

📊 Flowdiagram

Disk Overvågning — Flowdiagram 🚀 Start 🔁 For each dir i DIRECTORIES[] directory-løkke 🔍 Findes directory? ⚠️ skip nej 📏 du -sb → size_bytes 🗄️ Beregn MB/GB → INSERT directory_sizes 🔍 Scan /data/db-backup (hvis den findes) fil-løkke (find -maxdepth 2) 📂 find -type f → filepath 📊 stat → size_bytes + modified_date 🗄️ INSERT backup_files ✅ Færdig Legende Kontrol / måling Database INSERT Advarsel / skip

📋 Trin-for-trin forklaring

1

Opsætning

Definerer MySQL-credentials og et array af directories der skal overvåges. Credentials bør flyttes til .my.cnf eller en separat config-fil frem for hardcoded.

2

Directory-løkke

Itererer over alle directories i DIRECTORIES[]. For hvert tjekkes om det eksisterer — manglende directories advares men stopper ikke scriptet.

3

Måling med du

du -sb returnerer den præcise størrelse i bytes. Awk ekstrahere kun talværdien. Nul-størrelser springes over for at undgå fejldata.

4

INSERT til directory_sizes

Beregner MB og GB via bc og indsætter én række per directory i tabellen directory_sizes i drift-databasen.

5

Scan af backup-filer

find -maxdepth 2 -type f finder alle filer i /data/db-backup. For hver fil hentes størrelse og ændrings-dato via stat.

6

INSERT til backup_files

Filnavn og sti SQL-escapes (single-quotes dobles) og indsættes i tabellen backup_files med størrelse og ændrings-dato.

📁 Overvågede directories

🗄️ Database-tabeller (drift)

📋 directory_sizes

idINT AUTO_INCREMENT
directory_pathVARCHAR
size_bytesBIGINT
size_mbDECIMAL(10,2)
size_gbDECIMAL(10,3)
recorded_atTIMESTAMP (auto)

📋 backup_files

idINT AUTO_INCREMENT
filenameVARCHAR
filepathVARCHAR
size_bytesBIGINT
size_mbDECIMAL(10,2)
modified_dateDATETIME
scanned_atTIMESTAMP (auto)

⚠️ Sikkerhedsnoter

Anbefaling Flyt credentials til ~/.my.cnf
SQL Single-quotes i filnavne escapes korrekt
OBS Script bruger inline SQL — overvej prepared statements ved fremtidig refaktorering

⚙️ Konfiguration

VariableBeskrivelse
DB_USERMySQL-brugernavn
DB_PASSMySQL-password (bør flyttes til .my.cnf)
DB_NAMEDatabase-navn (drift)
DB_HOSTDatabase-host (localhost)
DIRECTORIESArray af stier der måles

📝 Terminal-output eksempel

=== Disk Overvågning - 2025-02-22 14:00:01 ===

Måler: /data/db-backup
✓ Gemt: /data/db-backup - 1.842 GB
Måler: /var/www
✓ Gemt: /var/www - 3.210 GB
Måler: /home/kao
✓ Gemt: /home/kao - 0.124 GB
Måler: /var/lib/mysql
✓ Gemt: /var/lib/mysql - 5.671 GB
⚠ Directory findes ikke: /data/backup

Scanner filer i /data/db-backup...
✓ Backup filer scannet

=== Færdig ===

💡 Typisk cron-opsætning

# Kør hvert 6. time
0 */6 * * * /home/kao/scripts/disk_monitor.sh

# Eller dagligt kl. 06:00
0 6 * * * /home/kao/scripts/disk_monitor.sh