Δημιουργία Disk space allert ειδοποιήσεων

Αν και τη σήμερον ημέρα οι αποθηκευτικοί χώροι που έχουμε είναι μεγάλοι εν τούτοις αυτό δεν σημαίνει ότι κάποια στιγμή οι δίσκοι μας δεν θα γεμίσουν, ιδιαίτερα αν αποθηκεύουμε πολλά αρχεία.
Και εδώ είναι το πρόβλημα των NVMe/SSD που θα σε προδώσουν δίχως την παραμικρή προειδοποίηση πιο πριν.
Άσε δε που αν είναι ο main δίσκος μπορεί να έχει και άλλα παρατράγουδα ως ακόμα και να μην ανοίγει το γραφικό περιβάλλον μετά από κάποια επανεκκίνηση.
Καθότι την έχω πατήσει στο παρελθόν ψάχτηκα λίγο και κάποτε χρησιμοποιούσα διάφορες εντολές για έλεγχο (ls -al,fdisk -l, du, df κλπ ) τις οποίες προφανώς από κάποια στιγμή και έπειτα το ξεχνάς κι δεν τις τρέχεις.

Δεν με ενδιέφερε κάτι με γραφικό περιβάλλον που να το ανοίγω κατά βούληση (πχ Disk, Disk-Usage analyzer κλπ) επειδή το μόνο που ήθελα ήταν να έχω απλά μια ειδοποίηση όταν ο δίσκος φτάσει στο 90% και τίποτα άλλο περισσότερο.
Έτσι, σκέφτηκα να φτιάξω κάποιο cron job (ένα scriptάκι που τρέχει μόνο του μια φορά την ημέρα) το οποίο ελέγχει την εντολή df -h και πετάει ένα pop-up με το εργαλείο zenity αν γεμίσει ο δίσκος.
Αυτό είναι το ακόλουθο, στο οποίο έχω πει ότι θέλω να ελέγχει και οποιοδήποτε άλλο δίσκο (εσωτερικό ή εξωτερικό) έχω επάνω (έχω βάλει και τις επεξηγήσεις ώστε να είναι κατανοητό):

#!/bin/bash

# Ορίζουμε το όριο σε ποσοστό (π.χ. 90%)
THRESHOLD=90

# Λίστα με τα σημεία που θέλουμε να ελέγχουμε

PATHS=("/" "/media/kigka")

for PATH_TO_CHECK in "${PATHS[@]}"; do
    
    # Αν πρόκειται για τον φάκελο /media/kigka, ελέγχουμε τους υποφακέλους (τους εξωτερικούς δίσκους)
    if [ "$PATH_TO_CHECK" == "/media/kigka" ]; then
        # Αν δεν υπάρχει κανένας εξωτερικός δίσκος συνδεδεμένος, προχώρα στον επόμενο
        if [ ! -d "$PATH_TO_CHECK" ] || [ -z "$(ls -A $PATH_TO_CHECK)" ]; then
            continue
        fi
        
        # Έλεγχος για κάθε εξωτερικό δίσκο ξεχωριστά
        for MOUNTED_DRIVE in "$PATH_TO_CHECK"/*; do
            if [ -d "$MOUNTED_DRIVE" ]; then
                USAGE=$(df "$MOUNTED_DRIVE" | grep / | awk '{ print $5 }' | sed 's/%//g')
                DRIVE_NAME=$(basename "$MOUNTED_DRIVE")
                
                if [ "$USAGE" -gt "$THRESHOLD" ]; then
                    zenity --warning --title="Προειδοποίηση Χώρου Δίσκου" --text="Ο εξωτερικός δίσκος [$DRIVE_NAME] έχει γεμίσει!\nΤρέχουσα χρήση: ${USAGE}%.\nΚαθάρισε αρχεία άμεσα." --width=400
                fi
            fi
        done
    else
        # Έλεγχος για τον εσωτερικό NVMe (/)
        USAGE=$(df "$PATH_TO_CHECK" | grep / | awk '{ print $5 }' | sed 's/%//g')
        if [ "$USAGE" -gt "$THRESHOLD" ]; then
            zenity --warning --title="Προειδοποίηση Χώρου Δίσκου" --text="Ο εσωτερικός δίσκος (/) έχει γεμίσει!\nΤρέχουσα χρήση: ${USAGE}%.\nΚαθάρισε αρχεία άμεσα." --width=400
        fi
    fi
done

:warning: Στη γραμμή PATHS=("/" "/media/kigka"), η διαδρομή περιέχει το δικό μου username (kigka). Αυτό θα πρέπει να το αλλάξετε με το δικό σας όνομα χρήστη.
Επίσης, εκεί που λέω: εσωτερικό NVMe μπορείτε να το αλλάξετε με ότι είδος δίσκου έχετε (πχ SSD, HDD κλπ).
Επιπλέον, μπορείτε να βάλετε άλλο ποσοστό για ειδοποίηση (πχ αν φτάσει στο 80%), αντικαθιστώντας το 90% που έχω ορίσει για την περίπτωσή μου.

Πώς το φτιάχνετε:

Απλά ανοίγετε τον text editor της διανομής σας, κάνετε επικόλληση το ανωτέρω και το αποθηκεύετε σαν disk_alert.sh, Κατόπιν, με δεξί κλικ στις Ιδιότητες, το κάνετε εκτελέσιμο.
Τέλος, το προσθέτετε στις Εφαρμογές Εκκίνησης ώστε να ξεκινάει με το σύστημά σας.

Επεξηγήσεις:

Αυτό που έκανα ήταν να πάρω κάποια από τα βασικά εργαλεία του Linux (το df για τον χώρο, το awk/sed για να απομονώσω το ποσοστό, και το zenity για το γραφικό pop-up) και να τα ενώσω σε ένα αυτοματοποιημένο script (με το if και το for loop) ώστε να τρέχει σωστά χωρίς να χρειάζεται να σπάω το κεφάλι μου με τις εντολές.

Ανάλογα το γραφικό περιβάλλον που έχετε, ενδέχεται το zenity να μην είναι προεγκατεστημένο. Θα το βρείτε στο Software Manager της διανομής σας και μπορείτε να το εγκαταστήσετε από εκεί, είτε να αλλάξετε τη γραμμή της ειδοποίησης με το αντίστοιχο εργαλείο του δικού σας περιβάλλοντος (π.χ. notify-send κλπ).
Κατά τα άλλα, η λογική του (το πώς διαβάζει τον δίσκο με το df και πώς φιλτράρει τα ποσοστά) είναι καθολική για το Linux. Και για να το πω με απλά ελληνικά πρόκειται για ένα standard bash scripting.

ps: η αρχική εικόνα είναι άσχετη, δεν βγάζει τέτοιου είδους ειδοποιήσεις. Πρόκειται για το εργαλείο Disk-usage-Analyzer της διανομης μου).

7 «Μου αρέσει»

Εναλλακτικά σε xfce με τη χρήση του generic monitor και τη χρήση του παρακάτω σκριπτακίου, μπορείς να βλέπεις γενικά στο πάνελ πόσο γεμάτος είναι ο δίσκος

#!/bin/bash
Disk=(echo -n "Disk:(df -h / | awk ‘NR==2 {print $5}’)")
echo “$Disk |Ποσοστό Σκληρού Δίσκου
Σε Χρήση”

(κάντε και hover με τον κέρσορα)

Φυσικά υπάρχει και το conky…

Απλά ιδέες δίνω…

4 «Μου αρέσει»