Ελληνικό Linux Partition HOWTO <author>Kristan Koehntopp, kris@koehntopp.de <date>Έκδοση 2.4, 3 Νοεμβρίου 1997 <abstract> Για οποιαδήποτε σχόλια, διορθώσεις, κλπ σχετικά με την ελληνική μετάφραση επικοινωνήστε με τον Παναγιώτη Βουδούρη στη διεύθυνση: <tt/panos@veria1.freeserve.co.uk/ Το συγκεκριμένο mini-HOWTO σας διδάσκει πως να σχεδιάζετε και να χρησιμοποιείτε το χώρο στους δίσκους σας για ένα σύστημα Linux. Μιλά για το υλικό, τις κατατμήσεις, περιορισμούς στο μέγεθος και την τοποθέτηση χώρου εναλλαγής(swap) στο δίσκο, συστήματα αρχείων, ταινίες και άλλα σχετικά θέματα. Ο σκοπός του είναι να δώσει βασικές γνώσεις, οπότε μιλάμε περισσότερο για αρχές λειτουργίας παρά για τη χρήση εργαλείων. </abstract> <toc> <sect>Εισαγωγή <sect1>Τι είναι αυτό; <p> Το έγγραφο αυτό είναι ένα Linux Mini-HOWTO. Ένα Mini-HOWTO είναι ένα σύντομο κείμενο που εξηγεί οτιδήποτε σχετικό με το Linux ως οδηγός εγκατάστασης και συντήρησης. Είναι mini επειδή είτε το κείμενο ή το θέμα είναι πολύ μικρό για ένα πραγματικό HOWTO ή ακόμα κι ένα βιβλίο. Το HOWTO δεν είναι οδηγός αναφοράς: για αυτό υπάρχουν οι σελίδες βοηθείας (man pages). <sect1>Τι υπάρχει σε αυτό; και σχετικά HOWTO. <p> Το συγκεκριμένο mini-HOWTO σας διδάσκει πώς να σχεδιάζετε και να χρησιμοποιείτε το χώρο στους δίσκους σας για ένα σύστημα Linux. Μιλά για το υλικό, τις κατατμήσεις, περιορισμούς στο μέγεθος και την τοποθέτηση εικονικής μνήμης στο δίσκο, συστήματα αρχείων, κασέτες και άλλα σχετικά θέματα. Ο σκοπός του είναι να δώσει βασικές γνώσεις, οπότε μιλάμε περισσότερο για αρχές λειτουργίας παρά για τη χρήση εργαλείων. Ιδανικά, αυτό το έγγραφο θα πρέπει να διαβαστεί πριν την πρώτη σας εγκατάσταση, πράγμα δύσκολο για τους περισσότερους. Οι πρωτάρηδες έχουν και άλλα προβλήματα από τη βελτιστοποίηση του δίσκου. Έτσι, πιθανόν είστε κάποιος που μόλις τελείωσε την εγκατάσταση του Linux και σκέφτεται τρόπους να την βελτιστοποιήσει ή πώς να αποφύγει λάθη για την επόμενη. Πάντως, να περιμένετε ότι μετά το τέλος αυτού του κειμένου θα έχετε μια επιθυμία για μια καινούρια εγκατάσταση. :-) Αυτό το mini-HOWTO περιορίζεται στον προγραμματισμό και σχεδιασμό του χώρου στο δίσκο. Δεν περιγράφει τη χρήση των fdisk, LILO, mke2fs ή προγραμμάτων για αντίγραφα ασφαλείας. Υπάρχουν άλλα HOWTO για αυτά τα προβλήματα. Παρακαλώ, δείτε το Linux HOWTO Index για πληροφορίες για Linux HOWTO. Υπάρχουν και πληροφορίες στο index για το πώς να αποκτήσετε τα HOWTO. Για να μάθετε πώς να υπολογίζετε τα μεγέθη και τις απαιτήσεις ταχύτητας για διάφορα τμήματα του συστήματος αρχείων, δείτε το "Linux Multiple Disks Layout mini-HOWTO", από τον Gjoen Stein <gjoen@nyx.net>. Για πληροφορίες και περιορισμούς σχετικά με δίσκους με περισσότερους από 1024 κύλινδρους, δείτε το "Linux Large Disk mini-HOWTO", του Andries Brouwer <aeb@cwi.nl>. Για οδηγίες του πώς να περιορίσετε τη χρήση δίσκου ανά χρήστη (quotas), δείτε το "Linux Quota mini-HOWTO", του Albert M.C. Tam <bertie@scn.org> Τη στιγμή αυτή δεν υπάρχει κάποιο γενικό έγγραφο για αντίγραφα ασφαλείας, αλλά υπάρχουν αρκετά έγγραφα που αναφέρονται σε συγκεκριμένες λύσεις. Δείτε το "Linux ADSM Backup mini-HOWTO", του Thomas Koenig <Thomas.Koenig@ciw.uni-karlsruhe.de> για οδηγίες σχετικά με το πώς να ολοκληρώσετε το Linux σε ένα IBM ADSM περιβάλλον. Δείτε το "Linux Backup with MSDOS mini-HOWTO", του Christopher Neufeld <neufeld@physics.utoronto.ca> για πληροφορίες σχετικά με αντίγραφα ασφαλείας του Linux μέσω MS-DOS. Για οδηγίες πώς να γράψετε και να παραδώσετε ένα HOWTO, δείτε το Linux HOWTO Index, του Tim Bynum <linux-howto@sunsite.unc.edu>. Επίσης, κοιτάζοντας το /usr/src/linux/Documentation μπορεί να είναι πολύ χρήσιμο. Κοιτάξτε τα ide.txt και scsi.txt για πληροφορίες σχετικά με τις ιδιότητες των οδηγών δίσκων και ρίξτε μια ματιά και στον υποκατάλογο filesystems/. <sect>Τέλος πάντων, τι είναι μια κατάτμηση; <p> Όταν εφευρέθηκαν οι σκληροί δίσκοι, οι χρήστες σύντομα ήθελαν να εγκαταστήσουν διάφορα λειτουργικά συστήματα, ακόμα κι αν είχαν μόνο ένα δίσκο στο σύστημά τους. Έτσι, χρειαζόταν ένας μηχανισμός που να χωρίζει τον ένα φυσικό δίσκο σε πολλαπλές λογικές μονάδες. Αυτό είναι η κατάτμηση: ένα συνεχές τμήμα του δίσκου που συμπεριφέρεται σαν ένας τελείως ξεχωριστός δίσκος στα περισσότερα λειτουργικά συστήματα. Είναι εμφανές ότι οι κατατμήσεις δεν πρέπει να υπερκαλύπτουν η μία την άλλη: Σίγουρα ένα λειτουργικό δε θα ήταν ευχαριστημένο αν ένα άλλο λειτουργικό σύστημα έγραφε πάνω σε σημαντικά του δεδομένα επειδή οι κατατμήσεις συγκαλύπτονται. Επίσης, δε θα πρέπει να υπάρχουν κενά μεταξύ των κατατμήσεων. Αν και τα ενδιάμεσα κενά δεν είναι επιβλαβή, χαραμίζουν τον πολύτιμο χώρο του δίσκου. Ο δίσκος δε χρειάζεται να κατατμηθεί τελείως. Μπορεί να αποφασίσετε να αφήσετε λίγο χώρο στο τέλος του δίσκου που να μη χρησιμοποιείται από κανένα λειτουργικό σύστημα. Αργότερα, όταν ξεκαθαρίσει ποιο λειτουργικό χρησιμοποιείτε περισσότερο, μπορείτε να χρησιμοποιήσετε τον κενό χώρο για το σύστημα αυτό. Οι κατατμήσεις δε μπορούν να μετακινηθούν ή να αλλάξουν μέγεθος χωρίς να καταστραφεί το σύστημα αρχείων τους. Αυτό σημαίνει πως η εκ νέου διαίρεση του δίσκου σε κατατμήσεις απαιτεί την λήψη αντιγράφων ασφαλείας και μετά την αναδιαίρεση την επαναφορά των δεδομένων από τα αντίγραφα αυτά. Στην πραγματικότητα, είναι πολύ συχνό το να καταστρέφονται τα πάντα κατά την αναδιαίρεση, οπότε θα πρέπει να κάνετε αντίγραφα όλων των δεδομένων σε όλους τους δίσκους πριν ακουμπήσετε προγράμματα σαν το <tt/fdisk/. Παρόλα αυτά, μερικές κατατμήσεις με συγκεκριμένα συστήματα αρχείων <em/μπορούν/ να διαιρεθούν χωρίς να χαθούν δεδομένα (αν είστε τυχεροί). Για παράδειγμα, υπάρχει ένα πρόγραμμα ονόματι "fips" που διαιρεί κατατμήσεις MS-DOS στα δύο για να κάνει χώρο για μια εγκατάσταση Linux χωρίς να χρειαστεί επανεγκατάσταση του MS-DOS. Όμως πάλι δε θα το αγγίξετε χωρίς να πάρετε αντίγραφα, έτσι δεν είναι; <sect1>Τα αντίγραφα είναι σημαντικά <p> Οι ταινίες είναι οι φίλοι σας για τα αντίγραφα. Είναι γρήγορες, αξιόπιστες και εύκολες στη χρήση, οπότε μπορείτε να κάνετε αντίγραφα ασφαλείας συχνά και κατά προτίμηση αυτόματα και χωρίς μπελάδες. Προσοχή: Μιλάω για αληθινές ταινίες, όχι εκείνες τις ftape αηδίες που ελέγχονται από τον ελεγκτή δίσκου. Αγοράστε SCSI: το Linux έχει εγγενή υποστήριξη SCSI. Δεν χρειάζεται να φορτώσετε ASPI οδηγούς, δε χάνετε πολύτιμη HMA και εφόσον ο ελεγκτής SCSI εγκατασταθεί, απλά προσθέτετε δίσκους, κασέτες και CD-ROMs επάνω του. Ούτε άλλες I/O διευθύνσεις, παίξιμο με IRQ ή συνδυασμοί Master/Slave και PIO. Επίσης: Οι καλοί SCSI ελεγκτές σας δίνουν υψηλή επίδοση I/O χωρίς μεγάλο φορτίο στον επεξεργαστή. Ακόμη και κάτω από βαριά χρήση του δίσκου θα έχετε καλή απόκριση. Εάν σχεδιάζετε να χρησιμοποιήσετε ένα σύστημα Linux σαν βασικό USENET τροφοδότη ή εάν θα ασχοληθείτε ως ISP μην διανοηθείτε να πάρετε σύστημα χωρίς SCSI. <sect1>Αριθμοί και ονόματα συσκευών <p> Ο αριθμός των κατατμήσεων σε βασιζόμενα σε Intel συστήματα ήταν περιορισμένος από την αρχή: Ο αρχικός πίνακας κατατμήσεων ήταν εγκατεστημένος ως τμήμα του τομέα εκκίνησης και είχε χώρο για μόνο τέσσερις εγγραφές. Αυτές οι τέσσερις κατατμήσεις ονομάζονται πρωταρχικές. Όταν έγινε εμφανές ότι οι χρήστες χρειάζονταν περισσότερες, οι λογικές κατατμήσεις εφευρέθηκαν. Ο αριθμός τους δεν είναι περιορισμένος: κάθε λογική κατάτμηση περιέχει ένα δείκτη στην επόμενη, οπότε είναι δυνατόν να υπάρχει μια αλυσίδα από άπειρες εγγραφές. Για λόγους συμβατότητας, ο χώρος που χρησιμοποιείται από όλες τις λογικές κατατμήσεις πρέπει να καταμετρηθεί. Εάν χρησιμοποιείτε λογικές κατατμήσεις, μια εγγραφή των πρωταρχικών κατατμήσεων σημειώνεται ως "εκτεταμένη κατάτμηση" ενώ τα αρχικό και τελικό σημείο της σημειώνει τον χώρο που χρησιμοποιείται από τις λογικές κατατμήσεις. Αυτό υπονοεί ότι ο χώρος που δίνεται στις λογικές κατατμήσεις πρέπει να είναι συνεχόμενος. Μπορεί να υπάρχει μόνο μία εκτεταμένη κατάτμηση: κανένα <tt/fdisk/ πρόγραμμα δε θα δημιουργήσει παραπάνω από μία εκτεταμένη κατάτμηση. Τo Linux δε μπορεί να χειριστεί πάνω από ένα συγκεκριμένο αριθμό κατατμήσεων ανά δίσκο. Έτσι, στο Linux έχετε 4 πρωταρχικές κατατμήσεις (3 από αυτές χρήσιμες, εάν χρησιμοποιείτε λογικές κατατμήσεις) και το πολύ 15 κατατμήσεις συνολικά σε ένα δίσκο SCSI (63 συνολικά σε ένα δίσκο IDE). Στο Linux, οι κατατμήσεις απεικονίζονται ως αρχεία συσκευών. Το αρχείο συσκευής είναι ένα αρχείο τύπου c (για συσκευή χαρακτήρων=character, που δε χρησιμοποιούν ενδιάμεση μνήμη-buffer chache) ή τύπου b (για συσκευή τεμαχίων=block, που περνά μέσα από την ενδιάμεση μνήμη). Στο Linux, όλοι οι δίσκοι απεικονίζονται ως block συσκευές. Σε αντίθεση με άλλα Unix συστήματα, το Linux δεν προσφέρει ακατέργαστες εκδόσεις χαρακτήρων (raw character) των δίσκων και των αντίστοιχων κατατμήσεών τους. Το μόνο σημαντικό σε ένα αρχείο συσκευής είναι ο μείζων και ο μικρός αριθμός συσκευής, που δείχνονται αντί του μεγέθους του αρχείου: <tscreen><code> $ ls -l /dev/hda brw-rw---- 1 root disk 3, 0 Jul 18 1994 /dev/hda ^ ^ | minor device number major device number </code></tscreen> Όταν χρησιμοποιείται ένα αρχείο συσκευής, ο μείζων αριθμός επιλέγει ποιός οδηγός συσκευής θα κληθεί για να εκτελεστεί η εργασία εισόδου/εξόδου. Η κλήση αυτή γίνεται με τον μικρό αριθμό ως παράμετρο και εξαρτάται αποκλειστικά από τον οδηγό πώς θα μεταφραστεί ο μικρός αριθμός. Η τεκμηρίωση του οδηγού συνήθως εξηγεί πώς ο οδηγός χρησιμοποιεί τους μικρούς αριθμούς. Για IDE δίσκους η τεκμηρίωση βρίσκεται στο <tt>/usr/src/linux/Documentation/ide.txt</>. Για SCSI δίσκους, θα περιμένατε να τους βρείτε στο <tt>/usr/src/linux/Documentation/scsi.txt</>, αλλά δεν είναι εκεί. Πρέπει να κοιτάξετε στον κώδικα του οδηγού για να είστε σίγουροι (<tt>/usr/src/linux/driver/scsi/sd.c:184-196</>). Ευτυχώς υπάρχει και η λίστα αριθμών και ονομάτων οδηγών του Peters Anvin στο <tt>/usr/src/linux/Documentation/devices.txt</>; κοιτάξτε τις αναφορές για block συσκευές, μείζων 3, 22, 33, 34 για IDE και μείζων 8 για SCSI δίσκους. Οι μείζων και μικροί αριθμοί είναι ένα byte ο καθένας και για αυτό ο αριθμός κατατμήσεων ανά δίσκο είναι περιορισμένος. Κατά σύμβαση, τα αρχεία συσκευών έχουν συγκεκριμένα ονόματα και πολλά προγράμματα έχουν γνώση των ονομάτων αυτών κατά τη μεταγλώττισή τους. Περιμένουν οι IDE δίσκοι να ονομάζονται <tt>/dev/hd*</> και τους SCSI δίσκους <tt>/dev/sd*</>. Οι δίσκοι αριθμούνται ως a, b, c κλπ, οπότε το <tt>/dev/hda</> είναι ο πρώτος IDE δίσκος και ο <tt>/dev/sda</> είναι ο πρώτος σας SCSI δίσκος. Και οι δυο συσκευές αντιπροσωπεύουν ολόκληρους δίσκους, ξεκινώντας από το block ένα. Γράφοντας στις συσκευές αυτές με τα λάθος εργαλεία θα καταστρέψει τις εγγραφές εκκίνησης και κατατμήσεων, καθιστώντας όλα τα δεδομένα στον δίσκο μη προσβάσιμα ή κάνοντας το σύστημά σας αδύνατο να ξεκινήσει. Να ξέρετε τι κάνετε, και ξανά, πάρτε αντίγραφα πριν κάνετε οτιδήποτε. Οι πρωταρχικές κατατμήσεις του δίσκου είναι οι 1, 2, 3 και 4. Έτσι <tt>/dev/hda1</> είναι η πρώτη πρωταρχική κατάτμηση στον πρώτο IDE δίσκο κοκ. Λογικές κατατμήσεις έχουν νούμερα 5 και άνω, οπότε <tt>/dev/sdb5</> είναι η πρώτη λογική κατάτμηση στον δεύτερο SCSI δίσκο. Κάθε εγγραφή στον πίνακα κατατμήσεων έχει μια αρχική και τελική διεύθυνση και έναν τύπο. Ο τύπος είναι ένας αριθμητικός κωδικός (ένα byte) που καθορίζει τη συγκεκριμένη κατάτμηση σε ένα συγκεκριμένο λειτουργικό σύστημα. Οι κωδικοί κατατμήσεων δεν είναι μοναδικοί, οπότε υπάρχει η πιθανότητα δυο λειτουργικά να χρησιμοποιούν τον ίδιο κωδικό. Το Linux χρησιμοποιεί τον κωδικό 0χ82 για κατατμήσεις εναλλαγής και 0χ83 για "εγγενή" συστήματα αρχείων (ext2 δηλαδή). Το κάποτε δημοφιλές αλλά τώρα παρωχημένο Linux/Minix σύστημα χρησιμοποιούσε τον κωδικό 0χ81. Το OS/2 χρησιμοποιεί τον τύπο 0χ07 και το ίδιο και το NTFS σύστημα των Windows NT. Το MS-DOS χρησιμοποιεί αρκετούς κωδικούς για τις διάφορες εκδόσεις του FAT συστήματός του: 0χ01, 0χ04 και 0χ06 είναι γνωστά. Το DR-DOS χρησιμοποιούσε το 0χ81 για τις προστατευόμενες FAT κατατμήσεις του, δημιουργώντας προβλήματα με το Linux/Minix στον καιρό του, αλλά σήμερα ούτε το Linux/Minix ούτε και το DR-DOS χρησιμοποιούνται πια. Η εκτεταμένη κατάτμηση που χρησιμοποιείται από τις λογικές κατατμήσεις έχει κωδικό 0χ05. Οι κατατμήσεις δημιουργούνται και καταστρέφονται με το <tt>fdisk</>. Κάθε λειτουργικό που σέβεται τον εαυτό του έχει ένα <tt>fdisk</> που παραδοσιακά καλείται <tt>fdisk</> (ή <tt>FDISK.EXE</>) στα περισσότερα συστήματα. Μερικά <tt>fdisk</>, κυρίως του DOS, είναι κάπως περιορισμένα όταν χειρίζονται κατατμήσεις άλλων λειτουργικών. Τέτοιοι περιορισμοί έχουν να κάνουν με την αδυναμία χειρισμού οτιδήποτε με ξένου κωδικό, με αριθμό κυλίνδρου μεγαλύτερο του 1024 και την αδυναμία να δημιουργήσουν ή να καταλάβουν κατατμήσεις που δεν τελειώνουν σε όριο κυλίνδρου. Για παράδειγμα, το fdisk του MS-DOS δε μπορεί να σβήσει κατατμήσεις NTFS, το fdisk του OS/2 έχει αναφερθεί ότι κρυφά "διορθώνει" κατατμήσεις που δημιουργήθηκαν με το fdisk του Linux που δεν τελειώνουν σε όριο κυλίνδρου, ενώ και τα δύο, του DOS και του OS/2, έχουν προβλήματα με δίσκους με περισσότερους από 1024 κυλίνδρους (δείτε το "large-disk" mini-howto για λεπτομέρειες για τέτοιους δίσκους). <sect>Τι κατατμήσεις χρειάζομαι; <sect1>Πόσες κατατμήσεις χρειάζομαι; <p> Ωραία, πόσες κατατμήσεις χρειάζεστε δηλαδή; Λοιπόν, μερικά λειτουργικά συστήματα δε θέλουν να ξεκινούν από λογικές κατατμήσεις για λόγους που ξεφεύγουν της λογικής. Έτσι, πιθανά να θέλετε να κρατήσετε τις πρωταρχικές κατατμήσεις σας για την εκκίνηση των MS-DOS, OS/2 και Linux ή οτιδήποτε άλλο χρησιμοποιείτε. Θυμηθείτε ότι μια πρωταρχική κατάτμηση χρειάζεται για να γίνει εκτεταμένη, ώστε να δρα σαν δοχείο για τις λογικές κατατμήσεις του δίσκου σας. Η εκκίνηση λειτουργικών συστημάτων περιλαμβάνει το BIOS και τους περιορισμούς των 1024 κυλίνδρων. Έτσι, μάλλον θα θέλετε να βάλετε όλες τις κατατμήσεις εκκίνησης στους πρώτους 1024 κυλίνδρους του δίσκου σας, ώστε να αποφύγετε τα προβλήματα. Ξανά, διαβάστε το "large-disk" mini-howto, για περισσότερες λεπτομέρειες. Για να εγκαταστήσετε το Linux, θα χρειαστείτε τουλάχιστον μία κατάτμηση. Εάν ο πυρήνας φορτώνεται από αυτήν την κατάτμηση (για παράδειγμα από το LILO), η κατάτμηση αυτή πρέπει να διαβάζεται από το BIOS. Εάν χρησιμοποιείτε άλλα μέσα για να φορτώσετε τον πυρήνα (από δισκέτα εκκίνησης ή με το LOADLIN.EXE μέσω του MS-DOS) η κατάτμηση μπορεί να είναι οπουδήποτε. Σε οποιαδήποτε περίπτωση, η κατάτμηση θα είναι τύπου 0χ83 "Linux native". Το σύστημά σας θα χρειαστεί και χώρο εναλλαγής. Εκτός εάν χρησιμοποιείτε αρχεία ως χώρο εναλλαγής, θα χρειαστείτε μια κατάτμηση αφιερωμένη για αυτή τη δουλειά. Εφόσον η κατάτμηση αυτή χρησιμοποιείται από τον πυρήνα του Linux και ο πυρήνας δεν έχει τις αδυναμίες του BIOS, η κατάτμηση αυτή μπορεί να βρίσκεται οπουδήποτε στο δίσκο. Συστήνω να χρησιμοποιήσετε μια λογική κατάτμηση (/dev/?d?5 ή μεγαλύτερη). Οι κατατμήσεις αφιερωμένες ως χώρος εναλλαγής είναι τύπου 0x82 "Linux swap". Αυτές είναι οι ελάχιστες απαιτήσεις. Θα ήταν χρήσιμο να δημιουργήσετε περισσότερες κατατμήσεις για το Linux. Διαβάστε παρακάτω. <sect1>Πόσο μεγάλος πρέπει να είναι ο χώρος εναλλαγής; <p> Εάν αποφασίσατε να χρησιμοποιήσετε μια κατάτμηση ως χώρο εναλλαγής, που γενικά είναι Καλή Ιδέα, ακολουθήστε τις παρακάτω οδηγίες για να υπολογίσετε το μέγεθός της: <itemize> <item> Στο Linux, η μνήμη RAM και ο χώρος εναλλαγής χρησιμοποιούνται ως το σύνολο της εικονικής μνήμης που είναι διαθέσιμη (κάτι που δεν είναι αλήθεια για όλα τα Unix). Για παράδειγμα αν έχετε 8MB RAM και 12MB χώρο εναλλαγής, έχετε ένα σύνολο περίπου 20MB εικονικής μνήμης. <item> Όταν καθορίζετε το μέγεθος του χώρου εναλλαγής, θα πρέπει να έχετε περίπου 16MB εικονικής μνήμης συνολικά. Έτσι, για 4MB RAM θα χρειαστείτε τουλάχιστον 12MB ως χώρο εναλλαγής, για 8MB RAM θα χρειαστείτε τουλάχιστον 8MB χώρο εναλλαγής κοκ. <item> Στο Linux, μία κατάτμηση εναλλαγής δε μπορεί να είναι μεγαλύτερη από 128MB. Δηλαδή, η κατάτμηση μπορεί να είναι μεγαλύτερη από 128MB, αλλά ο παραπάνω χώρος δε χρησιμοποιείται ποτέ. Εάν θέλετε παραπάνω από 128MB χώρου εναλλαγής, θα χρειαστείτε πολλαπλές κατατμήσεις. <item> Όταν δημιουργείτε τον χώρο εναλλαγής, θυμηθείτε ότι πολύς χώρος μπορεί να είναι και άχρηστος. Κάθε διεργασία έχει ένα "σύνολο εργασίας". Αυτό το σύνολο σελίδων στη μνήμη θα χρησιμοποιηθεί από τον επεξεργαστή στο σύντομο μέλλον. Το Linux προσπαθεί να προβλέψει την πρόσβαση στη μνήμη (υποθέτοντας ότι οι τελευταία χρησιμοποιημένες σελίδες θα χρησιμοποιηθούν ξανά σύντομα) και κρατά αυτές τις σελίδες στη RAM αν είναι δυνατόν. Εάν το πρόγραμμα έχει καλή "τοπικότητα αναφοράς" η υπόθεση αυτή θα είναι σωστή και ο αλγόριθμος πρόβλεψης θα δουλέψει. Το να κρατηθεί το σύνολο εργασίας στη μνήμη δουλεύει μόνο εάν υπάρχει αρκετή μνήμη RAM. Εάν έχετε πολλές διεργασίες να τρέχουν σε ένα μηχάνημα, ο πυρήνας αναγκάζεται να βάζει σελίδες στον δίσκο που θα τις χρησιμοποιήσει σύντομα (αναγκάζοντας την έξοδο μιας σελίδας από άλλο σύνολο εργασίας και την εισαγωγή της σελίδας που ζητείται). Αυτό συνήθως καταλήγει σε βαριά εναλλαγή σελίδων και κατακόρυφη πτώση της απόδοσης. Ένα μηχάνημα σε αυτή την κατάσταση λέγεται ότι κάνει "thrashing". Σε ένα τέτοιο μηχάνημα οι διεργασίες τρέχουν στην ουσία από τον δίσκο αντί της RAM. Έτσι η απόδοση πέφτει περίπου όσο η σχέση μεταξύ της ταχύτητας πρόσβασης μνήμης και της ταχύτητας πρόσβασης του δίσκου. Ένας παλιός κανόνας από τις μέρες του PDP και του Vax λέει ότι το σύνολο εργασίας ενός προγράμματος είναι το 25% του εικονικού του μεγέθους. Για αυτό είναι μάλλον άσκοπο να έχετε χώρο εναλλαγής μεγαλύτερο από τρεις φορές το μέγεθος της RAM. Προσέξτε όμως ότι αυτός είναι ένας απλός κανόνας. Είναι εύκολο να δημιουργηθούν σενάρια όπου προγράμματα έχουν εξαιρετικά μεγάλα ή μικρά σύνολα εργασίας. Για παράδειγμα ένα πρόγραμμα εξομοίωσης έχει μεγάλα σύνολα δεδομένων που προσβάλλονται τυχαία και χωρίς καμία τοπικότητα, έτσι το σύνολο εργασίας είναι πολύ μεγάλο. Από την άλλη, το xv με αρκετά ανοιχτά JPEG αρχεία θα έχει ένα πολύ μεγάλο σύνολο δεδομένων. Όμως οι μετασχηματισμοί θα γίνονται σε ένα μόνο αρχείο, οπότε η περισσότερη μνήμη που καταλαμβάνεται από το xv δεν προσβάλλεται ποτέ. Το ίδιο ισχύει και με έναν επεξεργαστή κειμένου με πολλά ανοιχτά έγγραφα, αλλά μόνο ένα να διορθώνεται. Έτσι, τα προγράμματα αυτά - αν έχουν σχεδιαστεί σωστά - έχουν πολύ μεγάλη τοπικότητα και μεγάλα τμήματά τους μπορούν να κρατηθούν στο χώρο εναλλαγής χωρίς μεγάλη πτώση ταχύτητας. Θα περίμενε κανείς ότι το 25% από την εποχή της γραμμής εντολών δε θα είναι σωστό στις μέρες των γραφικών περιβάλλοντων και πολλαπλών εγγράφων, αλλά δεν ξέρω για νέες μελέτες που επιβεβαιώνουν αυτά τα νούμερα. </itemize> Έτσι για ένα σύστημα με 16MB RAM, χώρος εναλλαγής δε χρειάζεται για μια ελάχιστη διαμόρφωση και πάνω από 48MB είναι μάλλον άχρηστα. Το ακριβές ποσό μνήμης εξαρτάται από το μίγμα των εφαρμογών στο μηχάνημα (τι περιμένατε;). <sect1>Πού πρέπει να βάλω το χώρο εναλλαγής; <p> <itemize> <item> Τα μηχανικά είναι αργά, τα ηλεκτρονικά είναι γρήγορα. Οι μοντέρνοι δίσκοι έχουν πολλές κεφαλές. Η μετάβαση μεταξύ κεφαλών στο ίδιο αυλάκι είναι γρήγορη, αφού είναι καθαρά ηλεκτρονική. Η μετάβαση μεταξύ αυλακιών είναι αργή, αφού απαιτεί τη μετακίνηση φυσικών αντικειμένων. Έτσι αν έχετε ένα δίσκο με πολλές κεφαλές και έναν με λιγότερες με ίδιες τις άλλες παραμέτρους τους, ο δίσκος με τις περισσότερες κεφαλές θα είναι γρηγορότερος. Παρόλα αυτά, το να χωρίσετε το χώρο εναλλαγής και να τον μοιράσετε στους δυο δίσκους θα είναι ακόμα γρηγορότερο. <item> Οι παλιότεροι δίσκοι έχουν τον ίδιο αριθμό τομέων σε όλα τα αυλάκια. Με αυτούς τους δίσκους θα είναι πιο γρήγορο να βάλετε το χώρο εναλλαγής στη μέση του δίσκου, υποθέτοντας ότι η κεφαλή του δίσκου θα κινηθεί από μια τυχαία περιοχή προς το χώρο εναλλαγής. <item> Οι νεότεροι δίσκοι χρησιμοποιούν ZBR (zone bit recording). Έχουν περισσότερους τομείς στα εξωτερικά αυλάκια. Με σταθερό ρυθμό περιστροφής, αυτό δίνει σημαντικά αυξημένη απόδοση στα εξωτερικά αυλάκια σε σχέση με τα εσωτερικά. Βάλτε το χώρο εναλλαγής στα εξωτερικά αυλάκια. <item> Φυσικά η κεφαλή του δίσκου δε θα κινείται τυχαία. Εάν έχετε το χώρο εναλλαγής στη μέσου του δίσκου, μεταξύ μιας πολυάσχολης κατάτμησης home και μιας σχεδόν αχρησιμοποίητης κατάτμησης αρχείου, θα ήταν καλύτερα να το βάλετε στη μέση της κατάτμησης home, για ακόμα μικρότερες κινήσεις της κεφαλής. Φυσικά θα ήταν καλύτερα αν είχατε το χώρο εναλλαγής σε έναν άλλο αχρησιμοποίητο δίσκο. </itemize> <bf/Περίληψη:/ Βάλτε το χώρο εναλλαγής σε ένα γρήγορο δίσκο με πολλές κεφαλές που δεν κάνει άλλες δουλειές. Εάν έχετε πολλούς δίσκους: μοιράστε το και σκορπίστε το σε όλους τους δίσκους ή ακόμη και σε διαφορετικούς ελεγκτές. <bf/Ακόμη καλύτερα:/ Αγοράστε περισσότερη RAM. <sect1>Μερικά γεγονότα για τα συστήματα αρχείων και τον κατακερματισμό <p> Ο χώρος στο δίσκο διαχειρίζεται από το λειτουργικό σύστημα σε μονάδες και τμήματα ενοτήτων (blocks). Στο ext2, τα τμήματα και οι ενότητες πρέπει να έχουν το ίδιο μέγεθος, οπότε μπορούμε να περιορίσουμε τη συζήτησή μας στις ενότητες. Τα αρχεία έρχονται σε οποιοδήποτε μέγεθος. Δε τελειώνουν στα όρια των ενοτήτων. Έτσι, για κάθε αρχείο, ένα τμήμα της τελευταίας ενότητας χαραμίζεται. Υποθέτοντας ότι τα μεγέθη των αρχείων είναι τυχαία, χαραμίζεται περίπου μισή ενότητα για κάθε αρχείο που υπάρχει στο δίσκο σας. Ο Tanenbaum το ονομάζει αυτό "εσωτερικό κατακερματισμό" στο βιβλίο του "Λειτουργικά συστήματα". Μπορείτε να μαντέψετε τον αριθμό των αρχείων στον δίσκο σας από τον αριθμό των χρησιμοποιημένων κόμβων (inodes) του δίσκου σας. <tscreen><code> # df -i Filesystem Inodes IUsed IFree %IUsed Mounted on /dev/hda3 64256 12234 52022 19% / /dev/hda5 96000 43058 52942 45% /var </code></tscreen> Υπάρχουν περίπου 12000 αρχεία στο <tt>/</> και περίπου 44000 αρχεία στο <tt>/var</>. Με μέγεθος κομματιού 1KB, περίπου 6+22 = 28MB χάνονται στα τελικά κομμάτια των αρχείων. Αν είχα επιλέξει μέγεθος κομματιού 4KB, θα είχα χάσει 4 φορές περισσότερο χώρο. Η μεταφορά δεδομένων, όμως, είναι γρηγορότερη για συνεχής ενότητες δεδομένων. Για αυτό, το ext2 προσπαθεί να προαναθέσει το χώρο σε 8 συνεχής ενότητες για επεκτεινόμενα αρχεία. Αν ο χώρος δε χρησιμοποιηθεί ελευθερώνεται, οπότε δε χαραμίζεται καθόλου χώρος. Η ασυνεχής ανάθεση κομματιών σε ένα αρχείο είναι κακή για την απόδοση, εφόσον τα αρχεία διαβάζονται με ένα συνεχή τρόπο. Αυτό αναγκάζει το λειτουργικό να μοιράσει την πρόσβαση στο δίσκο και την κεφαλή να κινηθεί. Αυτό ονομάζεται "εξωτερικός κατακερματισμός" ή απλά "κατακερματισμός" και είναι ένα συχνό πρόβλημα σε συστήματα αρχείων DOS. Το ext2 έχει αρκετές στρατηγικές για να αποφύγει τον εξωτερικό κατακερματισμό. Κανονικά, ο κατακερματισμός δεν αποτελεί μεγάλο πρόβλημα για το ext2, ακόμη και σε κατατμήσεις βαρέας χρήσης όπως το χώρο νέων του USENET. Αν και υπάρχει ένα εργαλείο αποκατακερματισμού για το ext2, κανείς δε το χρησιμοποιεί και δε συμβαδίζει με την τρέχουσα έκδοση του ext2. Χρησιμοποιήστε το, άλλα με δική σας ευθύνη. Το MS-DOS είναι γνωστό για την παθολογική του διαχείριση χώρου. Σε συνδυασμό με την απύθμενη buffer cache, οι επιπτώσεις του κατακερματισμού αρχείων στην απόδοση γίνονται γρήγορα αντιληπτές. Οι χρήστες του DOS είναι συνηθισμένοι στον αποκατακερματισμό του δίσκου κάθε λίγες εβδομάδες και μερικοί έχουν αναπτύξει ευλαβικές συνήθειες και πιστεύω για τον αποκατακερματισμό. Καμιά από αυτές τις συνήθειες δε θα πρέπει να μεταφερθεί στο Linux και το ext2. Τα εγγενή συστήματα αρχείων του Linux δε χρειάζονται αποκατακερματισμό κάτω από κανονικές συνθήκες, ακόμη και σε περιπτώσεις με τουλάχιστον 5% ελεύθερο χώρο στο δίσκο. Το MS-DOS χάνει και μεγάλες ποσότητες χώρου λόγω του εσωτερικού κατακερματισμού. Για κατατμήσεις άνω των 256KB, οι ενότητες του DOS γίνονται τόσο μεγάλες που είναι πρακτικά μη χρησιμοποιήσιμες (αυτό έχει διορθωθεί εν μέρη με το FAT32). Το ext2 δε σας αναγκάζει να χρησιμοποιήσετε μεγάλες ενότητες για μεγάλα συστήματα αρχείων, εκτός για πολύ μεγάλα συστήματα αρχείων στην περιοχή του 0.5TB (δηλαδή terabytes με 1TB = 1024GB) και άνω, όπου οι μικρές ενότητες γίνονται μη αποδοτικές. Έτσι, σε αντίθεση με το DOS, δεν υπάρχει λόγος να χωρίζετε το δίσκο σε πολλές κατατμήσεις για να κρατήσετε το μέγεθος των ενοτήτων μικρό. Χρησιμοποιήστε το 1KB όπου είναι δυνατόν. Ίσως να θέλετε να χρησιμοποιήσετε τα 2KB για μερικές κατατμήσεις, αλλά να περιμένετε μερικά απροσδόκητα προβλήματα. <sect1> Διάρκεια ζωής αρχείων και κύκλοι αντιγράφων ασφαλείας ως κριτήρια κατατμήσεων <p> Με το ext2, η κατατμήσεις πρέπει να γίνουν με βάση τους περιορισμούς για αντίγραφα ασφαλείας και για την αποφυγή εξωτερικού κατακερματισμού λόγω της διάρκειας ζωής των αρχείων. Τα αρχεία έχουν διαφορετικές διάρκειες ζωής. Αφού δημιουργηθεί ένα αρχείο, θα παραμείνει στο σύστημα για κάποιο χρονικό διάστημα και μετά θα αφαιρεθεί. Η διάρκεια ζωής των αρχείων διαφέρει πολύ μέσα στο σύστημα και εξαρτάται, εν μέρει, από το χώρο παραμονής του αρχείου. Για παράδειγμα, αρχεία στα <tt>/bin</>, <tt>/sbin</>, <tt>/usr/bin</>, <tt>/usr/bin</> και παρόμοιους καταλόγους είναι πιθανόν να έχουν μεγάλη διάρκεια ζωής: αρκετούς μήνες και παραπάνω. Αρχεία στο <tt>/home</> είναι πιθανό να έχουν μια μέση διάρκεια ζωής: περίπου αρκετές εβδομάδες. Αρχεία στο <tt>/var</> είναι συνήθως βραχύβια: σχεδόν κανένα αρχείο στο <tt>/var/spool/news</> δε θα παραμείνει για περισσότερες από μερικές μέρες, ενώ αρχεία στο <tt>/var/spool/lpd</> έχουν διάρκεια ζωής μερικά λεπτά ή λιγότερο. Για αντίγραφα ασφαλείας είναι χρήσιμο το ποσό του καθημερινού αντίγραφου να είναι μικρότερο από τη χωρητικότητα του ενός μέσου. Ένα καθημερινό αντίγραφο μπορεί να είναι είτε ολόκληρο είτε προσαυξητικό. Μπορείτε να αποφασίσετε να κρατήσετε τις κατατμήσεις σας μικρές για να χωράνε σε ένα μέσο (για καθημερινά πλήρη αντίγραφα). Σε οποιαδήποτε περίπτωση κάθε κατάτμηση θα πρέπει να είναι αρκετά μικρή ώστε τα καθημερινά δεδομένα (όλα τα αλλαγμένα αρχεία) να χωράνε σε ένα μέσο (επιλέξτε προσαυξητικό αντίγραφο και να περιμένετε να αλλάζετε μέσο για το εβδομαδιαίο/μηνιαίο πλήρες αντίγραφο - δεν γίνεται πλήρης αυτοματοποιημένη εργασία). Η στρατηγική αντιγράφων εξαρτάται από αυτή την απόφαση. Όταν σχεδιάζετε να αγοράσετε δίσκους, Θυμηθείτε να κρατήσετε αρκετά χρήματα για τα αντίγραφα! Δεδομένα χωρίς αντίγραφα είναι άχρηστα! Η αναπαραγωγή δεδομένων κοστίζει πολύ περισσότερο από το αντίγραφο για σχεδόν οποιονδήποτε! Για μεγαλύτερη απόδοση είναι χρήσιμο να κρατάτε αρχεία με διαφορετικό χρόνο ζωής σε διαφορετικές κατατμήσεις. Με αυτό τον τρόπο τα βραχύβια αρχεία στην κατάτμηση συζητήσεων θα κατακερματιστούν πολύ. Αυτό, όμως, δε θα έχει καμία επίπτωση στην απόδοση των <tt>/</> ή <tt>/home</> κατατμήσεων. <sect>Ένα παράδειγμα <sect1>Προτεινόμενο μοντέλο για φιλόδοξους αρχάριους <p> Ένα συχνό μοντέλο δημιουργεί τις <tt>/</>, <tt>/home</> και <tt>/var</> κατατμήσεις όπως προαναφέρθηκε. Είναι αρκετά απλό στην εγκατάσταση και συντήρηση και διαφοροποιεί αρκετά τις κατατμήσεις ώστε να αποφευχθούν προβλήματα από τη διάρκεια ζωής των αρχείων. Βολεύει και για αντίγραφα: σχεδόν κανένας δεν κρατά αντίγραφο του USENET και μόνο μερικά αρχεία του <tt>/var</> αξίζουν να κρατηθούν (<tt>/var/spool/mail</> για παράδειγμα). Από την άλλη, το <tt>/</> σπάνια αλλάζει και μπορεί να αντιγραφεί κατά βούληση (για παράδειγμα μετά από αλλαγές στη διαμόρφωση) και είναι αρκετά μικρό για να χωρέσει σε ένα μοντέρνο μέσο (περίπου 250 με 500MB, ανάλογα με το πόσες εφαρμογές έχουν εγκατασταθεί). Το <tt>/home</> περιλαμβάνει πολύτιμα δεδομένα χρηστών, οπότε θα πρέπει να δημιουργείται αντίγραφο καθημερινά. Μερικές εγκαταστάσεις έχουν πολύ μεγάλα <tt>/home</> και πρέπει να κάνουν προσαυξητικά αντίγραφα. Μερικά συστήματα βάζουν το <tt>/tpm</> σε ξεχωριστή κατάτμηση, ενώ άλλα δημιουργούν ένα συμβολικό δεσμό στο <tt>/var/tmp</> για να έχουν το ίδιο αποτέλεσμα (σημειώστε ότι αυτό μπορεί να επηρεάσει το single user mode, όπου το <tt>/var</> δε θα είναι διαθέσιμο μέχρι να δημιουργηθεί ένα ή να το αναρτήσετε χειροκίνητα στο <tt>/var</>) ή το βάζουν σε RAM disk (όπως κάνει το Solaris για παράδειγμα). Αυτό κρατά το <tt>/tmp</> έξω από το <tt>/</>, μια καλή ιδέα. Το μοντέλο αυτό είναι βολικό και για αναβαθμίσεις ή επανεγκαταστάσεις: κρατήστε τα αρχεία διαμόρφωσης (ή ολόκληρο το <tt>/etc</>) σε κάποιο <tt>/home</> κατάλογο, πετάξτε το <tt>/</>, επανεγκαταστήσετε και ξαναφορτώστε την παλιά διαμόρφωση από το <tt>/home</>. <sect>Πώς το έκανα στο μηχάνημά μου <p> Είχα στο ράφι έναν παλιό ISA 386/40, που εγκατέλειψα πριν δυο χρόνια επειδή είχε τεχνολογικά ξεπεραστεί. Σχεδίαζα να το κάνω ένα μικρό εξυπηρέτη χωρίς X-Windows για το οικιακό τοπικό μου δίκτυο. Να πως το έκανα: πήρα τον 386 και του έβαλα 16MB RAM. Πρόσθεσα ένα φτηνό EIDE δίσκο, το μικρότερο που μπορούσα να βρω (800MB), και μια κάρτα ethernet. Έβαλα και μια παλιά κάρτα γραφικών Hercules επειδή είχα ακόμα μια οθόνη. Εγκατέστησα το Linux και έτσι έγινε ένας NFS, SMB, HTTP, LPD/LPR, NNTP server καθώς και διακομιστής ταχυδρομείου και εξυπηρετητής POP3. Με μια πρόσθετη ISDN κάρτα το μηχάνημα έγινε και ο TCP/IP router και firewall. Ο περισσότερος χώρος του δίσκου πήγε στους καταλόγους <tt>/var</>, <tt>/var/spool/mail</>, <tt>/var/spool/news</> και <tt>/var/htppd/html</>. Έβαλα το <tt>/var</> σε ξεχωριστή, μεγάλη κατάτμηση. Δε θα υπάρχουν σχεδόν καθόλου χρήστες στο μηχάνημα, οπότε δεν έκανα home κατάτμηση αλλά την προσάρτησα στο <tt>/home</> από κάποιο άλλο σταθμό εργασίας μέσω NFS. Linux χωρίς Χ-Windows συν αρκετά τοπικά εγκατεστημένα εργαλεία θα είναι μια χαρά με 250MB στο <tt>/</>. Το μηχάνημα έχει 16MB RAM, αλλά θα τρέχει πολλούς servers. 16MB χώρου εναλλαγής θα είναι απαραίτητα, 32MB θα είναι άνετα. Χώρο έχουμε, οπότε το μηχάνημα θα πάρει 32MB. Για συναισθηματικούς λόγους μια κατάτμηση MS-DOS περίπου 20MB κρατιέται. Αποφάσισα να εισάγω το <tt>/home</> από άλλο μηχάνημα, οπότε τα υπόλοιπα 500+MB θα καταλήξουν ως <tt>/var</>. Θα είναι παραπάνω από αρκετά για οικιακή τροφοδοσία USENET. Έχουμε <tscreen><code> Device Mount point Size /dev/hda1 /dos_c 25 MB /dev/hda2 - (swap space) 32 MB /dev/hda3 / 250 MB /dev/hda4 - (extended partition) 500 MB /dev/hda5 /var 500 MB homeserver:/home /home 1.6 GB </code></tscreen> Κάνω τα αντίγραφα ασφαλείας του μηχανήματος μέσω του δικτύου χρησιμοποιώντας ταινίες στο <tt>homeserver</>. Εφόσον όλα σε αυτό το μηχάνημα έχουν εγκατασταθεί από CD-ROM τα μόνα που πρέπει να σώσω είναι τα αρχεία διαμόρφωσης από το <tt>/etc</>, τα παραμετροποιημένα μου, τοπικά εγκατεστημένα *.tgz αρχεία από το <tt>/root/Source/Installed</> και τα <tt>/var/spool/mail</> και <tt>/var/httpd/html</>. Τα αντιγράφω σε ένα κατάλογο <tt>/home/backmeup</> στον <tt>homeserver</> κάθε νύχτα, όπου το προγραμματισμένο αντίγραφο για τον homeserver τα γράφει. </article>