ΑΥΤΗ Η ΔΗΜΟΣΙΕΥΣΗ ΕΧΕΙ ΓΙΝΕΙ ΠΑΝΩ ΑΠΟ ΕΝΑ ΧΡΟΝΟ ΠΡΙΝ!
Όταν έχετε πολλούς χρήστες σε ένα λειτουργικό σύστημα, αναλόγως τη χρήση που κάνει ο καθένας, ο δίσκος σας μπορεί να γεμίσει πολύ γρήγορα και να μείνετε από χώρο.
Ένας και μόνο χρήστης μπορεί να γεμίσει όλο σας τον δίσκο, αν π.χ κατεβάζει συχνά ταινίες και άλλα μεγάλα αρχεία. Το Linux υποστηρίζει τα λεγόμενα Disk quotas σε επίπεδο πυρήνα και χρήστη. Έτσι μπορείτε να ελέγξετε τον χώρο που θα αντιστοιχεί στον κάθε χρήστη και παρακάτω θα δούμε το πως.
Ενεργοποιώντας την υποστήριξη
Τα quotas απαιτούν υποστήριξη και από την πλευρά του πυρήνα (που αφορά το σύστημα αρχείων), αλλά και από την πλευρά του χρήστη. Συστήματα αρχείων όπως ext2, ext3, ext4, ReiserFS, JFS.. κλπ, υποστηρίζουν quotas. Επίσης, η υποστήριξη έχει προστεθεί από τον πυρήνα 2.4 και μετά. Δύο συστήματα quotas υπάρχουν, το πρώτο λέγεται v1 και το δεύτερο v2. Μικρές οι διαφορές μεταξύ τους, το πρώτο υπήρχε στον πυρήνα 2.4, ενώ η νεότερη έκδοση υπάρχει από τον 2.6 και έπειτα.
Οι περισσότεροι πυρήνες έχουν ενεργοποιημένη αυτή τη λειτουργία. Σε περίπτωση που πετύχετε κάποιον στον οποίο δεν έχει ενεργοποιηθεί, τότε θα πρέπει ή να προσθέσετε μόνοι σας την λειτουργία μέσω kernel compiling ή να βρείτε το αντίστοιχο module, να το χτίσετε και να το φορτώσετε χειροκίνητα (modprobe).
Εκτός όμως από το κομμάτι του πυρήνα υπάρχουν και κάποια εργαλεία που πρέπει να εγκαταστήσουμε και να τρέξουμε. Βασικά, ένα πακέτο είναι το οποίο συνήθως ονομάζεται quota. Εγκαταστήστε το με τον διαχειριστή πακέτων της διανομής σας.
Τέλος, θα πρέπει να ενεργοποιήσουμε την λειτουργία στο σύστημα αρχείων μέσω του /etc/fstab. Αυτό το αρχείο είναι πολύ σημαντικό για την λειτουργία του συστήματός μας, οπότε επεξεργαστείτε το πολύ προσεκτικά. Οι παράμετροι που θα προσθέσουμε για την ενεργοποίηση των quotas, είναι usrquota & grpquota. Το πρώτο όπως καταλαβαίνετε είναι για χρήστες, το δεύτερο για γκρουπ. Για να παραθέσουμε και ένα παράδειγμα για το πως πρέπει να είναι η γραμμή στο /etc/fstab, παρακάτω βλέπουμε το διαμέρισμα /dev/sda1 το οποίο είναι το σύστημά μας (root /)
## root was on /dev/sda1 during installation
/dev/sda1 / ext4 rw,errors=remount-ro,usrquota,grpquota 0 1
Φυσικά το /dev/sda1 πιθανότατα θα είναι γραμμένο με το UUID του στο fstab, αυτό δεν μας πειράζει καθόλου.
Αφού σώσουμε το αρχείο, κάνουμε μια επανεκκίνηση για να ενεργοποιηθεί η λειτουργία.
Θέτοντας όρια για τους χρήστες
Μετά την επανεκκίνηση η υποστήριξη quotas, πρέπει να είναι πλήρως ενεργοποιημένη. Το πακέτο quota που έχουμε εγκαταστήσει περιέχει, εκτός από τα startup scripts και ένα εργαλείο ονόματι edquota με το οποίο μπορούμε να επεξεργαστούμε τα όρια για κάθε χρήστη (ή γκρουπ). Εμείς εδώ θα ασχοληθούμε με έναν χρήστη, π.χ τον χρήστη nick. Ότι κάνουμε από εδώ και πέρα το κάνουμε ως ο υπερ-χρήστης root.
Προσέξτε πως το edquota χρησιμοποιεί από προ-επιλογή τον Vi editor και όσοι δεν γνωρίζετε έστω και λίγο αυτόν τον editor θα δυσκολευτείτε στην επεξεργασία. Μπορείτε να θέσετε τον nano ως επεξεργαστή κειμένου με
export EDITOR=nano
Αν τυχών και δεν έχει ενεργοποιηθεί η λειτουργία quota, τότε ενεργοποιήστε την με το σύστημα εκκίνησης του λειτουργικού σας (init, systemd …κλπ).
Δίνοντας την εντολή
sudo edquota -u nick
θα ανοίξει το αρχείο επεξεργασίας. Πάμε να το δούμε και να το εξηγήσουμε λίγο.
Disk quotas for user nick (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/disk/by-uuid/2eab5xx-6xx2-4xxe-8xx9-44fxxxx998f7 289616 0 0 3193 0 0
Τα blocks που βλέπετε, καθώς και τα inodes είναι εκείνα που ο χρήστης nick χρησιμοποιεί ήδη. Αυτά δεν τα αλλάζουμε, δεν έχει καμία σημασία να τα αλλάξουμε. Εκείνα που πρέπει να πειράξουμε έτσι ώστε να θέσουμε τα όρια είναι τα soft και hard, τα οποία όπως βλέπουμε είναι μηδενικά. Τα blocks είναι ο χώρος στον δίσκο και τα inodes είναι τα αρχεία. Πόσα αρχεία μπορεί να δημιουργήσει ο χρήστης nick. Μην εκπλαγείτε αν έχετε χώρο στον δίσκο σας, αλλά έχετε πρόβλημα με την δημιουργία ή/και αποθήκευση κάποιου αρχείου λόγω των inodes. Τα inodes μπορείτε να τα τσεκάρετε με ένα switch στην εντολή df.
df -ih
Πάμε να θέσουμε όρια για τον χρήστη nick. Αλλάζουμε τις παραπάνω εισαγωγές στα blocks , soft=12000 και hard=15000. Τα inodes δεν θα τα πειράξουμε, για τώρα. Αφού αποθηκεύσουμε το αρχείο κάνουμε έναν έλεγχο με
sudo repquota -a
και θα δείτε ένα αποτέλεσμα σαν το παρακάτω
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 4215268 0 0 193797 0 0
daemon -- 64 0 0 4 0 0
man -- 1876 0 0 149 0 0
libuuid -- 24 0 0 2 0 0
ntp -- 8 0 0 2 0 0
colord -- 8 0 0 2 0 0
mdm -- 1824 0 0 19 0 0
nick +- 289684 12000 15000 7days 3198 0 0
#999 -- 320 0 0 32 0 0
Βλέπουμε πλέον ότι ο χρήστης nick έχει έναν περιορισμό 12000 ως soft quota και 15000 ως hard quota, με μια περίοδο χάριτος (grace) επτά ημερών. Εδώ είναι και η διαφορά των soft τιμών από τις hard. Οι soft τιμές μπορούν να ξεπεραστούν με μια μόνο προειδοποίηση. Μετά από αυτή την προειδοποίηση και αν μέσα σε επτά ημέρες ο χρήστης δεν έχει «συμμορφωθεί», τότε το soft μετατρέπετε σε hard και πλέον δεν τον αφήνει να αποθηκεύσει άλλα αρχεία. Αν το hard ξεπεραστεί αμέσως, εκεί δεν υπάρχει grace period και αμέσως δεν τον αφήνει να αποθηκεύσει άλλα αρχεία.
Οι παραπάνω τιμές που θέσαμε είναι ενδεικτικές και στο συγκεκριμένο παράδειγμα είναι και «λανθασμένες» μπορούμε να πούμε. Γιατί ; Γιατί ο χρήστης nick έχει ήδη 289684 blocks και θέτοντας εμείς ένα όριο 15000 , φαίνεται ότι έχει ήδη ξεπεράσει το όριο, οπότε δεν θα τον αφήνει να γράψει ούτε ένα byte πλέον.
Μπορείτε να αλλάξετε το default grace period των επτά ημερών με την εντολή
sudo edquota -t
Οι περίοδοι χάριτος θέτονται ανά σύστημα αρχείων και όχι ανά χρήστη.
Για περισσότερες ενέργειες με τα εργαλεία quota , συμβουλευτείτε το εγχειρίδιο (man).
Επίλογος (και ένα τεστ)
Σε γενικές γραμμές αυτά είναι τα Hard Disk Quotas στο Linux. Είναι χρήσιμα σε περιπτώσεις πολλών χρηστών και λιγοστού χώρου στον δίσκο, μπορούμε να διαμοιράσουμε τον χώρο ισάξια. Να ξέρετε πως η αντιγραφή ενός configuration file σε πολλαπλούς χρήστες υποστηρίζεται. Αν δηλαδή έχουμε 10 χρήστες και θέλουμε να έχουν όλοι τον ίδιο χώρο (όριο χώρου), τότε μπορούμε να φτιάξουμε ένα configuration αρχείο για έναν χρήστη και να το αντιγράψουμε σε όλους τους υπόλοιπους. Αυτό γίνεται μέσω της εντολής edquota και του -p switch. (δείτε την man page).
Παραπάνω θέσαμε έναν πολύ μικρό χώρο της τάξης των 15MB περίπου για τον χρήστη nick. Πάμε να τον τσεκάρουμε ;
Το κάνουμε με την εντολή dd , όπως φαίνεται παρακάτω
dd if=/dev/zero of=test.img
Το αποτέλεσμα ;
write failed, user block limit reached. dd: writing to ‘test.img’: Disk quota exceeded
Αν τα παραπάνω σας βολεύει να τα δείτε σε ένα βίντεο, δείτε παρακάτω.