Αυτόματη ειδοποίηση πληρότητας δίσκου με το Zenity.

Αν και τη σήμερον ημέρα οι αποθηκευτικοί χώροι είναι μεγάλοι, αυτό δεν σημαίνει ότι κάποια στιγμή οι δίσκοι μας δεν θα γεμίσουν — ιδιαίτερα αν αποθηκεύουμε πολλά και μεγάλα αρχεία.
Εδώ εμφανίζεται το μεγάλο πρόβλημα των σύγχρονων NVMe/SSD: σε αντίθεση με τους παλιούς μηχανικούς δίσκους που μπορεί να καθυστερούσαν, ένας SSD θα σε προδώσει δίχως την παραμικρή προειδοποίηση. Άσε δε που αν γεμίσει ο κύριος δίσκος του συστήματος (το ριζικό διαμέρισμα /), τα παρατράγουδα είναι άμεσα: το γραφικό περιβάλλον (Xorg/Display Manager) αδυνατεί να γράψει προσωρινά αρχεία, με αποτέλεσμα το σύστημα να μην μπορεί καν να συνδεθεί στην επιφάνεια εργασίας.
Καθότι την έχω πατήσει στο παρελθόν, ψάχτηκα λίγο. Κάποτε χρησιμοποιούσα διάφορες εντολές τερματικού για χειροκίνητο έλεγχο (df -h, du, fdisk -l), αλλά προφανώς κάποια στιγμή το ξεχνάς και δεν τις τρέχεις.
Δεν με ενδιέφερε κάποια εφαρμογή γραφικού περιβάλλοντος που πρέπει να την ανοίγω κατά βούληση (π.χ. Disks ή Disk Usage Analyzer). Το μόνο που ήθελα ήταν μια αυτόματη ειδοποίηση μόλις ο δίσκος φτάσει στο 90% της χωρητικότητάς του.
Έτσι, έφτιαξα ένα απλό αλλά θωρακισμένο Bash script που εκτελείται αυτόματα κατά την είσοδο στο σύστημα, ελέγχει τη χρήση του εσωτερικού δίσκου καθώς και τυχόν συνδεδεμένων εξωτερικών δίσκων, και πετάει ένα προειδοποιητικό παράθυρο με το εργαλείο Zenity αν ο χώρος εξαντλείται.
Το Script (disk_alert.sh)
Ανοίξτε τον επεξεργαστή κειμένου της διανομής σας (π.χ. Xed, Text Editor), επικολήστε τον παρακάτω κώδικα και αποθηκεύστε τον ως disk_alert.sh.
#!/bin/bash
# Ορισμός ορίου ειδοποίησης σε ποσοστό (%)
THRESHOLD=90
# Ανίχνευση του ονόματος χρήστη και του φακέλου προσαρτήσεων
USER_NAME=$(whoami)
MEDIA_DIR="/media/$USER_NAME"
# Συνάρτηση ελέγχου χώρου και εμφάνισης ειδοποίησης
check_space() {
local target="$1"
local name="$2"
# Έλεγχος αν η διαδρομή είναι ενεργό σημείο προσάρτησης (mountpoint)
if mountpoint -q "$target"; then
# Απομόνωση του ποσοστού χρήσης με καθαρό τρόπο
local usage
usage=$(df --output=pcent "$target" | tail -n 1 | tr -d ' %')
if [ -n "$usage" ] && [ "$usage" -gt "$THRESHOLD" ]; then
zenity --warning \
--title="Προειδοποίηση Χώρου Δίσκου" \
--text="Ο δίσκος <b>$name</b> έχει γεμίσει!\n\nΤρέχουσα χρήση: <b>${usage}%</b>\nΔιαδρομή: $target\n\nΠαρακαλώ καθαρίστε άμεσα αρχεία." \
--width=400 --no-wrap
fi
fi
}
# 1. Έλεγχος του εσωτερικού δίσκου (/)
check_space "/" "Εσωτερικός Δίσκος (/)"
# 2. Έλεγχος εξωτερικών δίσκων/συσκευών στο /media/username (με ασφαλή έλεγχο ύπαρξης wildcard)
if [ -d "$MEDIA_DIR" ]; then
for drive in "$MEDIA_DIR"/*; do
[ -e "$drive" ] || continue
if [ -d "$drive" ]; then
drive_name=$(basename "$drive")
check_space "$drive" "Εξωτερικός ($drive_name)"
fi
done
fi
Πώς το εγκαθιστάτε βήμα-βήμα
- Αποθήκευση: Αποθηκεύστε το αρχείο στον προσωπικό σας φάκελο, για παράδειγμα στη διαδρομή
~/Scripts/disk_alert.sh (αν δεν υπάρχει ο φάκελος Scripts, δημιουργήστε τον).
- Δικαιώματα εκτέλεσης: Ανοίξτε το τερματικό ή κάντε δεξί κλικ στο αρχείο -> Ιδιότητες -> Δικαιώματα και επιλέξτε «Να επιτρέπεται η εκτέλεση του αρχείου ως πρόγραμμα».
Εναλλακτικά, από το τερματικό τρέξτε:
```
chmod +x ~/Scripts/disk_alert.sh
```
Προσθήκη στις Εφαρμογές Εκκίνησης:
- Ανοίξτε το μενού της διανομής σας και αναζητήστε τις Εφαρμογές Εκκίνησης (Startup Applications).
- Προσθέστε μια νέα καταχώριση.
- Στο πεδίο Όνομα βάλτε:
Disk Space Alert.
- Στο πεδίο Εντολή (Command) επιλέξτε το αρχείο
disk_alert.sh που δημιουργήσατε.
Τεχνικές Επεξηγήσεις & Λεπτομέρειες
Γιατί όχι Cron Job; Επειδή το script χρησιμοποιεί το Zenity για να εμφανίσει γραφικό παράθυρο (GUI), πρέπει να εκτελείται μέσα στο περιβάλλον της συνεδρίας του χρήστη (Desktop Session). Τα Cron jobs τρέχουν στο παρασκήνιο χωρίς πρόσβαση στην οθόνη του γραφικού περιβάλλοντος.
Ασφάλεια στα ονόματα δίσκων: Χρησιμοποιούνται διπλά εισαγωγικά σε όλες τις μεταβλητές ("$drive"), ώστε το script να μην καταρρέει αν κάποιος εξωτερικός δίσκος έχει κενά διαστήματα στο όνομά του (π.χ. My Passport). Παράλληλα, με την προσθήκη του [ -e "$drive" ] || continue διασφαλίζεται ότι δεν θα υπάρξει κανένα πρόβλημα αν ο φάκελος /media/$USER_NAME είναι εντελώς κενός.
Εργαλείο Zenity: Το zenity αναλαμβάνει να μετατρέψει την έξοδο του τερματικού σε παράθυρο διαλόγου. Αν δεν είναι εγκατεστημένο στη διανομή σας, μπορείτε να το εγκαταστήσετε εύκολα από τον Software Manager ή μέσω τερματικού:
sudo apt install zenity
(ή, όποιου εγκαταστάτη έχει η διανομή σας)
Προσαρμογή Ορίου: Αν θέλετε η ειδοποίηση να βγαίνει νωρίτερα (π.χ. στο 80%), αλλάξτε απλά την τιμή THRESHOLD=90 στην αρχή του script σε THRESHOLD=80.
Επέκταση (προαιρετικά): Το script εκτελείται άπαξ με την είσοδο στο desktop. Αν κάποιος θέλει να το τρέχει περιοδικά (π.χ. ανά τακτά χρονικά διαστήματα στη διάρκεια της ημέρας), μπορεί αντί για Startup Application να το ενσωματώσει σε έναν απλό βρόχο while true με sleep στο παρασκήνιο ή να το τρέχει μέσω ενός user systemd timer, αν και η εκτέλεση στην εκκίνηση είναι υπεραρκετή για την πλειοψηφία των περιπτώσεων.
❝ Πρόκειται για ένα καθαρό Bash script που βασίζεται στα θεμελιώδη εργαλεία του Linux (df, mountpoint), προσφέροντας μια απλή και σωτήρια δικλείδα ασφαλείας για τα δεδομένα και το σύστημά σας.
❝ To script δημιουργήθηκε με την βοήθεια του Μητσάρα, του τοπικού μου llm.