449 γραμμές
		
	
	
	
		
			37 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			449 γραμμές
		
	
	
	
		
			37 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
+++
 | 
						||
title = 'Swapping'
 | 
						||
date = '2000-03-01T00:00:00Z'
 | 
						||
description = ''
 | 
						||
author = 'Μάνος Καραγιώργος(mailto:mantis@pathfinder.gr)'
 | 
						||
issue = ['Magaz 22']
 | 
						||
issue_weight = 2
 | 
						||
+++
 | 
						||
 | 
						||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
						||
 | 
						||
*Άξονας κίνησης του παρόντος άρθρου είναι η περιγραφή του σκοπού ύπαρξης swap αρχείων/κατατμήσεων, της λειτουργίας τους, της διαδικασίας ορισμού τους, κ.ά.*
 | 
						||
 | 
						||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
						||
 | 
						||
**1. Let\'s swap\...**
 | 
						||
-------------------------------------------------
 | 
						||
 | 
						||
-   [1.1 Σκοπός ύπαρξης swap κατάτμησης/αρχείου](#ss1.1)
 | 
						||
-   [1.2 Εικονική μνήμη](#ss1.2)
 | 
						||
-   [1.3 Λειτουργία](#ss1.3)
 | 
						||
-   [1.4 Swapping/Paging](#ss1.4)
 | 
						||
-   [1.5 Μέγεθος swap](#ss1.5)
 | 
						||
-   [1.6 Όρια](#ss1.6)
 | 
						||
-   [1.7 Συμβουλές για μέγιστη απόδοση](#ss1.7)
 | 
						||
 | 
						||
**2. Swap αρχεία**
 | 
						||
---------------------------------------------
 | 
						||
 | 
						||
-   [2.1 Ορισμός swap αρχείου](#ss2.1)
 | 
						||
-   [2.2 Ρόλος του /dev/zero](#ss2.2)
 | 
						||
 | 
						||
**3. Swap κατατμήσεις**
 | 
						||
--------------------------------------------------
 | 
						||
 | 
						||
-   [3.1 Ορισμός swap κατάτμησης](#ss3.1)
 | 
						||
 | 
						||
**4. Ρύθμιση swap συσκευών**
 | 
						||
-------------------------------------------------------
 | 
						||
 | 
						||
**5. Συγχρονισμός\... ΤΩΡΑ**
 | 
						||
-------------------------------------------------------
 | 
						||
 | 
						||
-   [5.1 Ρόλος της sync](#ss5.1)
 | 
						||
 | 
						||
**6. Χρησιμοποίηση swap συσκευών**
 | 
						||
-------------------------------------------------------------
 | 
						||
 | 
						||
-   [6.1 Το αρχείο /etc/fstab](#ss6.1)
 | 
						||
-   [6.2 Εξηγήσεις\...](#ss6.2)
 | 
						||
-   [6.3 Παράμετροι στην swapon](#ss6.3)
 | 
						||
-   [6.4 Αυτόματη χρησιμοποιήση swap συσκευών](#ss6.4)
 | 
						||
-   [6.5 Μή χρησιμοποίηση swap συσκευών](#ss6.5)
 | 
						||
 | 
						||
**7. Έλεγχος χρήσης swap συσκευών**
 | 
						||
--------------------------------------------------------------
 | 
						||
 | 
						||
-   [7.1 free](#ss7.1)
 | 
						||
-   [7.2 cat /proc/meminfo](#ss7.2)
 | 
						||
-   [7.3 cat /proc/swaps](#ss7.3)
 | 
						||
-   [7.4 top](#ss7.4)
 | 
						||
-   [7.5 procinfo](#ss7.5)
 | 
						||
 | 
						||
**8. Ιδέες\...**
 | 
						||
-------------------------------------------
 | 
						||
 | 
						||
-   [8.1 Συνδυασμός swap και /tmp](#ss8.1)
 | 
						||
-   [8.2 Swap κατ\' απαίτηση με loopback device](#ss8.2)
 | 
						||
 | 
						||
**9. Ίδιος χώρος swap με άλλα λειτουργικά συστήματα**
 | 
						||
--------------------------------------------------------------------------------
 | 
						||
 | 
						||
-   [9.1 FreeBSD](#ss9.1)
 | 
						||
-   [9.2 Microsoft Windows](#ss9.2)
 | 
						||
 | 
						||
**10. Σχετικά**
 | 
						||
--------------------------------------------
 | 
						||
 | 
						||
-   [10.1 No time\...](#ss10.1)
 | 
						||
-   [10.2 Πηγές](#ss10.2)
 | 
						||
 | 
						||
 | 
						||
### [1. Let\'s swap\...]{#s1}
 | 
						||
 | 
						||
### [1.1 Σκοπός ύπαρξης swap κατάτμησης/αρχείου]{#ss1.1}
 | 
						||
 | 
						||
To swap αρχείο/κατάτμηση χρησιμοποιείται ως εικονική μνήμη (virtual RAM) στο σύστημά σας. Η εικονική μνήμη είναι επέκταση της πραγματικής μνήμης του συστήματος.
 | 
						||
Η ύπαρξή του τις περισσότερες φορές είναι απαραίτητη.
 | 
						||
 | 
						||
### [1.2 Εικονική μνήμη]{#ss1.2}
 | 
						||
 | 
						||
Το Linux υποστηρίζει εικονική μνήμη, δήλαδη χρησιμοποιεί ένα δίσκο σαν επέκταση της RAM, έτσι ώστε το συνολικό μέγεθος της χρησιμοποιήσιμης μνήμης να αυξάνει
 | 
						||
αναλογικά. Ο πυρήνας γράφει τα περιεχόμενα ενός τρέχοντος αχρησιμοποίητου block μνήμης στο σκληρό δίσκο έτσι ώστε η μνήμη να μπορεί να χρησιμοποιηθεί για άλλο
 | 
						||
σκοπό. Όταν τα αρχικά περιέχομενα χρειάζονται ξανά, διαβάζονται πάλι από τη μνήμη.
 | 
						||
 | 
						||
Αυτά όλα γίνονται τελείως αδιαφανή από το χρήστη. Προγράμματα που τρέχουν κάτω από το Linux βλέπουν μόνο τη μεγαλύτερη ποσότητα της διαθέσιμης μνήμης και δεν
 | 
						||
προσέχουν πως κομμάτια αυτών μένουν στο δίσκο από στιγμή σε στιγμή. Το κομμάτι του σκληρού δίσκου που χρησιμοποιείται σαν εικονική μνήμη ονομάζεται χώρος swap
 | 
						||
(χώρος προσωρινής αποθήκευσης).
 | 
						||
 | 
						||
### [1.3 Λειτουργία]{#ss1.3}
 | 
						||
 | 
						||
Όταν χρησιμοποιείται swap χώρος, το Linux μετακινεί αχρησιμοποιήτες σελίδες μνήμης στο σκληρό δισκό, επιτρέποντας να τρέχετε περισσότερες εφαρμογές ταυτόχρονα
 | 
						||
στο σύστημά σας.
 | 
						||
 | 
						||
Όμως, επειδή αυτή η διαδικασία είναι σχετικά αργή (χίλιες φορές περίπου), ο χώρος swap δεν μπορεί να αντικαταστήσει την πραγματική φυσική μνήμη RAM, που είναι
 | 
						||
πιο γρήγορη. Έτσι τα προγράμματα δεν τρέχουν το ίδιο γρήγορα. Οι εφαρμογές του X Window System, κυρίως, έχουν ιδιαίτερες απαιτήσεις σε μνήμη και γι\'αυτό θα
 | 
						||
πρέπει να έχετε μια συσκευή (αρχείο/κατάτμηση) swap.
 | 
						||
 | 
						||
Μερικά προγράμματα καταλαμβάνουν στατικά σελίδες πραγματικής μνήμης (κλειδώνοντάς τες) για λόγους ασφαλείας ή για λόγους απόδοσης. Με αυτόν τον τρόπο οι
 | 
						||
\"κλειδωμένες\" σελίδες μειώνουν το μέγεθος της διαθέσιμης πραγματικής μνήμης, καθιστώντας απαραίτητη τη χρήση swap μνήμης.
 | 
						||
 | 
						||
### [1.4 Swapping/Paging]{#ss1.4}
 | 
						||
 | 
						||
Με απλά λόγια:
 | 
						||
 | 
						||
Υπάρχει διαχωρισμός μεταξύ του swapping (γράφοντας ολόκληρες τις διεργασίες (processes) σε χώρο swap) και του paging (γράφοντας μόνο καθορισμένου μεγέθους
 | 
						||
κομμάτια, συνήθως μερικά kilobytes τη φορά).
 | 
						||
 | 
						||
Το paging είναι συνήθως πιο αποτελεσματικό, και αυτό είναι που κάνει το Linux, αλλά μιλάμε για swapping έτσι κι αλλιώς.
 | 
						||
 | 
						||
### [1.5 Μέγεθος swap]{#ss1.5}
 | 
						||
 | 
						||
Ορισμένοι προτείνουν ότι η swap μνήμη πρέπει να έχει διπλάσιο μέγεθος από αυτό της πραγματικής μνήμης. Υπάρχουν αρκετές διαφοροποιήσεις σχετικά με το πόση swap
 | 
						||
μνήμη θα πρέπει να χρησιμοποιήσετε: όλες εξαρτώνται από το τι εφαρμογές θέλετε να τρέχετε\...
 | 
						||
 | 
						||
Το μέγεθος του χώρου swap εξαρτάται ακόμη από πόση μνήμη έχετε ήδη στο σύστημά σας.
 | 
						||
 | 
						||
Αν έχετε αρκετή φυσική μνήμη (\>128ΜΒ) και είστε ο μοναδικός χρήστης του συστήματος χωρίς ιδιαίτερες απαιτήσεις μπορεί να σκεφτείτε να μην χρησιμοποιήσετε μνήμη
 | 
						||
swap, έχοντας έτσι περισσότερο ελεύθερο αποθηκευτικό χώρο και μειώνοντας το χρόνο αναζήτησης στα δεδομένα σας.
 | 
						||
 | 
						||
Μπορεί να μην χρησιμοποιείτε μια swap κατάτμηση πολύ συχνά, όταν όμως τη χρειαστείτε η παρουσία της είναι ανεκτίμητη.
 | 
						||
 | 
						||
Πιθανότατα δεν έχει νόημα να έχετε swap μνήμη περισσότερη από τρεις φορές της φυσικής μνήμης.
 | 
						||
 | 
						||
Υπολογίστε τη συνολικη σας ανάγκη σε μνήμη. Αυτή είναι το μεγαλύτερο μέγεθος μνήμης που πιθανώς θα χρειαστείτε σε κάθε στιγμή, δηλαδή το άθροισμα των απαιτήσεων
 | 
						||
σε μνήμη όλων των προγραμμάτων που θέλετε να τρέχετε ταυτοχρόνως. Αυτό μπορεί να γίνει τρέχοντας την ίδια ώρα όλα τα προγράμματα που πιθανώς θα τρέξετε ποτέ
 | 
						||
ταυτοχρόνως. Για παράδειγμα, αν θέλετε να τρέχετε το X Window System, θα πρέπει να καταχωρίσετε περίπου 8-16 MB για αυτό, ο gcc θέλει αρκετά megabytes (μερικά
 | 
						||
αρχεία χρειάζονται μία ασυνήθιστα μεγάλη ποσότητα, μέχρι και δεκάδες megabytes, αλλά συνήθως περίπου 4-8 θα είναι αρκετά) κτλ. Ο πυρήνας θα χρησιμοποιήσει
 | 
						||
περίπου 1-2ΜΒ από μόνος του, και τα συνηθισμένα shells και άλλα μικρά βοηθητικά προγράμματα ίσως μερικές εκατοντάδες kilobytes (περίπου 1ΜΒ όλα μαζί). Δεν
 | 
						||
υπάρχει ανάγκη να προσπάθησετε να είστε ακριβείς, υπολογισμοί στο περίπου είναι μια χαρά, αλλά μπορεί να θέλετε να είστε στην απαισιόδοξη πλευρά.
 | 
						||
 | 
						||
Θυμηθείτε πως αν υπάρχουν αρκετά άτομα που χρησιμοποιούν το σύστημα ταυτοχρόνως, θα καταναλώνουν όλα μνήμη. Πάντως, αν δύο άτομα τρέχουν το ίδιο πρόγραμμα
 | 
						||
αταυτοχρόνως, η συνολική κατανάλωση μνήμης συνήθως δεν είναι διπλάσια, εφόσον οι σελίδες του κώδικα και οι shared βιβλιοθήκες υπάρχουν ήδη μια φορά.
 | 
						||
 | 
						||
### [1.6 Όρια]{#ss1.6}
 | 
						||
 | 
						||
Το μέγιστο χρήσιμο μέγεθος μιας περιοχής swap εξαρτάται πλέον από την αρχιτεκτονική του συστήματος.
 | 
						||
 | 
						||
Είναι περίπου:
 | 
						||
 | 
						||
-   2GB σε i386, PPC, m68k, ARM,
 | 
						||
-   1GB σε sparc,
 | 
						||
-   512MB σε mips,
 | 
						||
-   128GB σε alpha και
 | 
						||
-   3TB σε sparc64.
 | 
						||
 | 
						||
Υποστηρίζονται μέχρι και 8 συνολικά περιοχές swap.
 | 
						||
 | 
						||
### [1.7 Συμβουλές για μέγιστη απόδοση]{#ss1.7}
 | 
						||
 | 
						||
Συνιστάται η χρησιμοποιήση μιας swap κατάτμησης παρά ενός swap αρχείου. Έτσι σε πολλές εγκαταστάσεις του Linux θα συναντήσετε δύο τουλάχιστον κατατμήσεις. To
 | 
						||
swapping σε αρχείο επιφέρει σχετική μείωση της απόδοσης του συστήματος γιατί πηγαίνει μέσω του συστήματος αρχείων (ext2). Από την άλλη, μπορείτε να προσθέσετε
 | 
						||
swap αρχείο όποτε θέλετε χωρίς καμία ανάγκη για κατάτμηση των δίσκων σας.
 | 
						||
 | 
						||
Χρησιμοποποιείστε πρώτα αρχείο swap, δουλέψτε με το σύστημα σας για λίγο καιρό για να δείτε πόση μνήμη swap χρειάζεστε περίπου, και μετά φτιάξτε μια κατάτμηση
 | 
						||
swap. Μπορείτε βέβαια να χρησιμοποιείτε πολλές swap κατατμήσεις ή/και swap αρχεία, ταυτοχρόνως.
 | 
						||
 | 
						||
Αφήστε, πάντως, περιθώρια ασφαλείας γιατί πιθανότατα θα ξεχάσετε να τρέξετε μερικά προγράμματα που θα θέλετε να τρέχετε και βεβαιωθείτε ότι έχετε ελέυθερο χώρο
 | 
						||
σε κάθε περίπτωση. Είναι καλύτερα να καταχωρήσετε πάρα πολύ χώρο παρά πολύ λίγο (προσέξτε τους τόνους στο παρα\...), αλλά δεν υπάρχει ανάγκη να το παρακάνετε
 | 
						||
και να καταχωρήσετε ολόκληρο δίσκο, εφόσον αχρησιμοποιήτος χώρος swap είναι no doubt wasted χώρος.
 | 
						||
 | 
						||
Αν ο χώρος swap, που θα υπολογίσετε με την παραπάνω μέθοδο, είναι πάρα πολύ μεγαλύτερος από τη φυσική σας μνήμη (όχι τη δικιά σας, του συστήματος σας\...),
 | 
						||
καλύτερα να σκεφτείτε σοβαρά να επενδύσετε στην αγορά περισσότερης φυσικής μνήμης, αλλιώς η απόδοση θα είναι αρκετά χαμηλή.
 | 
						||
 | 
						||
Είναι καλή ιδέα να έχετε τουλάχιστον λίγο χώρο swap, ακόμη και αν οι υπολογισμοί σας δείχουν ότι δεν χρειάζεστε καθόλου. Το Linux χρησιμοποιεί το χώρο swap
 | 
						||
δυαναμικά, έτσι ώστε όση περισσότερη φυσική μνήμη το δυνατόν να μπορεί να παραμείνει ελεύθερη. Το Linux θα swap out σελίδες μνήμης που δεν έχουν χρησιμοποιηθεί,
 | 
						||
ακόμη και αν η μνήμη δεν χρειάζεται ακόμη για τίποτα. Αυτό αποφεύγει την αναμονή για swapping όταν χρειάζεται: το swapping μπορεί να γίνει νωρίτερα, όταν ο
 | 
						||
δίσκος είναι έτσι κι αλλιώς αδρανής.
 | 
						||
 | 
						||
Ο χώρος swap μπορεί να χωριστεί ανάμεσα σε αρκετούς δίσκους. Αυτό μερικές φορές βελτιώνει την απόδοση, ανάλογα με τις σχετικές ταχύτητες των δίσκων και το χρόνο
 | 
						||
προσπέλασης αυτών. Μπορεί να θέλετε να πειραματιστείτε με μερικά διαδεδομένα μοντέλα, αλλά κατανοήστε ότι κάνοντας τα πειράματα κανονικά είναι αρκετά δύσκολο.
 | 
						||
Δε θα πρέπει να πιστεύετε φήμες που λένε ότι ένα μοντέλο είναι ανώτερο από κάθε άλλο, εφόσον δε θα είναι πάντα αληθείς.
 | 
						||
 | 
						||
Μπορείτε να χρησιμoποιήσετε και περισσότερες από μία swap κατατμήσεις.
 | 
						||
 | 
						||
Μερικοί χρησιμοποιούν RAM disks για swapping, δεν κερδίζετε πολλά με αυτόν τον τρόπο αφού μειώνεται τη διαθέσιμη μνήμη για caching και buffering.
 | 
						||
 | 
						||
Συνιστάται να δημιουργείτε κατατμήσεις swap σε μεσαία tracks του σκληρού δίσκου (συνήθως /dev/?d?x, όπου xε{4,5,\...} ανάλογα με τον αριθμό των υπάρχοντων
 | 
						||
κατατμήσεων) , γιατί τότε η αναζήτηση είναι σχετικά γρήγορη (γρήγορη διαμεταγωγή και αναζήτηση αρχείων).
 | 
						||
 | 
						||
Αν χρησιμοποιείτε swap αρχείο συνιστάται να τοποθετείται σε ξεχωριστή κατάτμηση, αφού περιλαμβάνει λιγότερα ρίσκα. Αυτή η κατάτμηση δε θα μπορεί πλεόν να
 | 
						||
χρησιμοποιηθεί, ακόμη και αν φαίνεται να υπάρχει ελεύθερος χώρος σε αυτή.
 | 
						||
 | 
						||
 | 
						||
### [2. Swap αρχεία]{#s2}
 | 
						||
 | 
						||
Ένα swap αρχείο είναι ένα κανονικό αρχείο. Δεν είναι με κανένα τρόπο ειδικό προς τον πυρήνα. Το μόνο πράγμα που νοιάζει τον πυρήνα είναι να μην έχει καθόλου
 | 
						||
\"τρύπες\", και να είναι έτοιμο για χρήση με την εντολή mkswap.
 | 
						||
 | 
						||
Πρέπει, πάντως, να διαμένει σε έναν τοπικό δίσκο του συστήματος. Δεν μπορεί να διαμένει σε ένα σύστημα αρχείων που έχει προσαρτηθεί μέσω NFS για λόγους
 | 
						||
υλοποίησης.
 | 
						||
 | 
						||
Το κομμάτι σχετικά με τις \"τρύπες\" είναι σημαντικό. Το αρχείο swap κρατάει τον χώρο του δίσκου έτσι ώστε ο πυρήνας να μπορεί γρήγορα να swap out μια σελίδα
 | 
						||
χωρίς να χρειάζεται να παέι μέσω όλων των πραγμάτων που είναι χρήσιμα όταν καταχωρεί ένα sector δίσκου σε ένα αρχείο. Ο πυρήνας απλώς χρησιμοποιεί όποιους
 | 
						||
τομείς έχουν ήδη καταχωρηθεί στο αρχείο. Επειδή μια \"τρύπα\" σε ένα αρχείο σημαίνει πως δεν υπάρχουν καθόλου τομείς δίσκου καταχωρημένοι (για αυτό το μέρος
 | 
						||
μέσα στο αρχείο), δεν είναι καλό για τον πυρήνα να προσπαθεί να τους χρησιμοποιεί.
 | 
						||
 | 
						||
### [2.1 Ορισμός swap αρχείου]{#ss2.1}
 | 
						||
 | 
						||
Ένας καλός τρόπος για να δημιουργήσετε το swap αρχείο χωρίς \"τρύπες\" είναι μέσω της ακόλουθης εντολής:
 | 
						||
 | 
						||
    dd if=/dev/zero of=<swap αρχείο> bs=<bytes> count=<blocks>
 | 
						||
 | 
						||
-   if=/dev/zero : input file, διαβάζει από αυτό το αρχείο
 | 
						||
-   of=\<swap αρχείο\> : output file, γράφει σε αυτό το αρχείο
 | 
						||
-   bs=\<bytes\> : block size, διαβάζει και γράφει \<bytes\> bytes κάθε φορά
 | 
						||
-   count=\<blocks\> : αντιγράφει μόνο \<blocks\> blocks από αυτά που διαβάζει
 | 
						||
 | 
						||
Θα εμφανιστεί το μήνυμα:
 | 
						||
 | 
						||
    <blocks>+0 records in
 | 
						||
    <blocks>+0 records out
 | 
						||
 | 
						||
Είναι καλύτερα το μέγεθος να είναι πολλαπλάσιο του 4, επειδή ο πυρήνας γράφει σελίδες μνήμης, που είναι 4ΚΒ σε μέγεθος. Αν το μέγεθος δεν είναι πολλαπλάσιο του
 | 
						||
4, το τελευταίο ζευγάρι των kilobytes μπορεί να είναι αχρησιμοποίητο. Ειδικότερα, για swap αρχείο το μέγεθος είναι καλό να είναι πολλαπλάσιο του inode μεγέθους,
 | 
						||
συνήθως 1024 ή 2048 (ή ακόμη και 4096), γιατί 1block=1KB=1024 bytes άρα τιμές πολλαπλάσιες του 1024.
 | 
						||
 | 
						||
### [2.2 Ρόλος του /dev/zero]{#ss2.2}
 | 
						||
 | 
						||
Το /dev/zero είναι ένα ειδικό αρχείο που κατά την ανάγνωσή του, επιστρέφει \\0 χαρακτήρες. Είναι μια συσκευή που όταν την διαβάζετε παίρνετε άπειρα ASCII 0.
 | 
						||
Είναι χρήσιμη ως πηγή \"κενών\" bytes, όπως ακριβώς και πολλοί επεξεργαστές RISC έχουν ένα zero καταχωρητή που είναι πάντα 0.
 | 
						||
 | 
						||
Δημιουργείται με:
 | 
						||
 | 
						||
    mknod -m 666 /dev/zero c 1 5
 | 
						||
    chown root.mem /dev/zero
 | 
						||
 | 
						||
 | 
						||
### [3. Swap κατατμήσεις]{#s3}
 | 
						||
 | 
						||
Μία swap κατάτμηση δεν είναι επίσης ειδική με κανέναν τρόπο. Τη δημιουργείτε όπως κάθε άλλη κατάτμηση. Η μόνη διαφορά είναι ότι χρησιμοποιείται σαν μια άδεια
 | 
						||
(raw) κατάτμηση, δηλαδή, δεν περιέχει κανένα σύστημα αρχείων. Είναι καλη ιδέα να σημειώνετε τις κατατμήσεις swap σαν τύπο 82 (Linux swap). Αυτό κάνει τα
 | 
						||
περιεχόμενα της κατάτμησης πιο σαφή, αν και δεν είναι αυστηρώς απαραίτητο στον πυρήνα.
 | 
						||
 | 
						||
Όπως αναφέραμε, οι κατατμήσεις swap είναι πιο γρήγορες ξεπερνούν το σύστημα αρχείων, διαβάζοντας κατευθείαν από τον σκληρό δίσκο.
 | 
						||
 | 
						||
### [3.1 Ορισμός swap κατάτμησης]{#ss3.1}
 | 
						||
 | 
						||
Η swap κατάτμηση δεν είναι ανάγκη να βρίσκεται στον ίδιο σκληρό δίσκο με την κατάτμηση που είναι εγκατεστημένο το Linux.
 | 
						||
 | 
						||
Τρέξτε το πρόγραμμα fdisk. Δώστε n (add a new partition), μετά p (primary partition), για hex code: 82 (αν γράψετε l θα δείτε ότι αυτός ο τύπος αντιστοιχεί σε
 | 
						||
κατάτμηση Linux swap).
 | 
						||
 | 
						||
Κάθε είδος κατάτμησης έχει έναν ξεχωριστό (identifier number) αριθμό ώστε να αναγνωρίζεται από το λειτουργικό σύστημα. (π.χ. για το Linux είναι 83).
 | 
						||
 | 
						||
Τελος, δώστε: w (write table to disk and exit).
 | 
						||
 | 
						||
 | 
						||
### [4. Ρύθμιση swap συσκευών]{#s4}
 | 
						||
 | 
						||
Εφόσον έχετε δημιουργήσει ένα swap αρχείο ή μια swap κατάτμηση, πρέπει να γράψετε μια υπογραφή στην αρχή του/της, αυτή περιέχει μερικές διευθυντικές πληροφορίες
 | 
						||
και χρησιμοποιείται από τον πυρήνα. Η εντολή για να το κάνετε αυτό είναι η mkswap. Τη χρησιμοποιείτε έτσι:
 | 
						||
 | 
						||
    mkswap <swap συσκευή> <μέγεθος>
 | 
						||
 | 
						||
Συνηθισμένες παράμετροι:
 | 
						||
 | 
						||
-   -c ελέγχει τη συσκευή (block device) για bad blocks
 | 
						||
-   -v0 παλιά μέθοδος (μέχρι 128ΜΒ)
 | 
						||
-   -v1 νέα μέθοδος (μέχρι 2GB)
 | 
						||
 | 
						||
Θα εμφανιστεί το μήνυμα:
 | 
						||
 | 
						||
    Setting up swapspace, size = <μεγεθος> bytes
 | 
						||
 | 
						||
Ο swap χώρος δεν χρησιμοποιείται ακόμη. Υπάρχει, αλλά ο πυρήνας δεν τον χρησιμοποιεί για να παρέχει εικονική μνήμη.
 | 
						||
 | 
						||
Πρέπει να είστε πολύ προσεκτικοί στη χρησιμοποίηση της εντολής mkswap, εφόσον ΔΕΝ ελέγχει αν το αρχείο ή η κατάτμηση χρησιμοποιείται για άλλο σκοπό. Η
 | 
						||
χρησιμοποίησή της γίνεται συνήθως κατά την εγκατάσταση του συστήματος, την εκτελείτε μόνο ΜΙΑ φορά.
 | 
						||
 | 
						||
 | 
						||
### [5. Συγχρονισμός\... ΤΩΡΑ]{#s5}
 | 
						||
 | 
						||
H εντολή sync μέσω της συνάρτησης sync() δεσμεύει πρώτα τα inodes σε buffers, και μετά τα buffers στο σκληρό δίσκο. Εκτελείται, συνήθως, αμέσως μετά από την
 | 
						||
mkswap.
 | 
						||
 | 
						||
### [5.1 Ρόλος της sync]{#ss5.1}
 | 
						||
 | 
						||
Κάθε U\*ix έχει φορτωμένο στη μνήμη το super block και τον inode πίνακα και ό,τι δουλειά κάνει πάνω σε αυτά την κάνει στη MNHMH, για ταχύτητα. Περιοδικά τα
 | 
						||
\"κατεβάζει\" και στο δίσκο, για αποφυγή απρόσμενων γεγονότων. To sync είναι ακριβώς η εντολή που κάνει το \"κατέβασμα\". Με αυτόν τον τρόπο μπορεί κάποιος να
 | 
						||
βεβαιωθεί ότι ολά έχουν γραφτεί με ασφάλεια.
 | 
						||
 | 
						||
Στα περισσότερα UNIX συστήματα, υπάρχει ένα πρόγραμμα ου λέγεται update και τρέχει στο background κάνοντας ένα sync κάθε 30 δευτερόλεπτα, οπότε συνήθως δεν
 | 
						||
είναι απαραίτητο να χρησιμοποιήσετε την sync. Το Linux έχει έναν επιπρόσθετο δαίμονα (daemon), τον bdflush, ο οποίος κάνει ένα πιο ατελές sync πιο συχνά.
 | 
						||
 | 
						||
Κάτω από το Linux, ο bdflush εκκινείται από το update. Δεν υπάρχει συνήθως κανένας λόγος για να ανησυχείτε, αλλά αν ο bdflush πεθάνει για κάποιο λόγο, ο πυρήνας
 | 
						||
θα σας προειδοποιήσει γι\' αυτό, και θα πρέπει να τον ξεκίνησετε μόνοι σας (/sbin/update).
 | 
						||
 | 
						||
 | 
						||
### [6. Χρησιμοποίηση swap συσκευών]{#s6}
 | 
						||
 | 
						||
Εφόσον έχουν ακολουθηθεί τα παραπάνω βήματα για ρύθμιση swap αρχείων/κατατμήσεων, η χρησιμοποίηση αυτών από τον πυρήνα γίνεται με την εντολή swapon.
 | 
						||
 | 
						||
### [6.1 Το αρχείο /etc/fstab]{#ss6.1}
 | 
						||
 | 
						||
FileSystem TABle
 | 
						||
 | 
						||
Το αρχείο /etc/fstab δίνει πληροφορίες για τα διάφορα συστήματα αρχείων στα οποία μπορούμε να έχουμε πρόσβαση.
 | 
						||
 | 
						||
Για μια swap συσκευή θα δείτε μια γράμμη όπως η παρακάτω. Στο σύστημά μου (powered by SuSE) είναι:
 | 
						||
 | 
						||
    /dev/hde3       swap                      swap            defaults   0   0
 | 
						||
 | 
						||
### [6.2 Εξηγήσεις\...]{#ss6.2}
 | 
						||
 | 
						||
-   Το πρώτο πεδίο περιγράφει τη block συσκευή ή το σύστημα αρχείων που θέλουμε να προσαρτήσουμε,
 | 
						||
-   το δεύτερο περιγράφει το σημείο προσάρτησης (για swap κατάτμηση είναι swap),
 | 
						||
-   το τρίτο περιγράφει τον τύπο του συστήματος αρχείων (δείτε cat /proc/filesystems για αυτά που υποστηρίζονται από τον τρέχοντα πυρήνα σας),
 | 
						||
-   το τέταρτο περιγράφει τις παραμέτρους προσάρτησης,
 | 
						||
-   το πέμπτο χρησιμοποιείται από την εντολή dump (στην περίπτωσή μας είναι 0, δεν χρειάζεται),
 | 
						||
-   το έκτο καθορίζει τη σειρά προτεραιότητας με την οποία τα συστήματα αρχείων ελέγχονται κατά την εκκίνηση του Linux (στην περίπτωση μας είναι 0, δεν είναι
 | 
						||
    απαραίτητο).
 | 
						||
 | 
						||
### [6.3 Παράμετροι στην swapon]{#ss6.3}
 | 
						||
 | 
						||
-a: διαβάζει το /etc/fstab και κάνει διαθέσιμες τις συσκευές/αρχεία που προορίζονται για swapping.
 | 
						||
 | 
						||
-p: θέτει προτεραίοτητα στο swapon, 0 \< p \< 32767 από το /etc/fstab, όπου pri=\"τιμή\".
 | 
						||
 | 
						||
### [6.4 Αυτόματη χρησιμοποιήση swap συσκευών]{#ss6.4}
 | 
						||
 | 
						||
Επεξεργαστείτε το αρχείο /etc/fstab και δημιουργήστε ένα νέο πεδίο για κάθε συσκευή που θέλετε να χρησιμοποιήσετε.
 | 
						||
 | 
						||
Τα script εκκίνησης θα τρέξουν την εντολή swapon -a χρησιμοποιώντας όσες swap συσκευές έχουν καταχωριθεί στο /etc/fstab. Επομένως, η εντολή swapon
 | 
						||
χρησιμοποιείται μόνο όταν χρειάζεται περισσότερος χώρος swap.
 | 
						||
 | 
						||
### [6.5 Μή χρησιμοποίηση swap συσκευών]{#ss6.5}
 | 
						||
 | 
						||
Μία περιοχή swap μπορεί να μην χρησιμοποιηθεί με χρήση της εντολής swapoff. Δεν είναι συνήθως απαραίτητο να το κάνετε, εκτός από προσωρινούς χώρους swap. Όλες
 | 
						||
οι σελίδες που χρησιμοποιούνται στο χώρο swap αντιγράφονται στη μνήμη πρώτα. Αν δεν υπάρχει αρκετή φυσική μνήμη να τις κρατήσει, Θα αντιγραφούν τότε σε κάποιον
 | 
						||
άλλο χώρο. Αν δεν υπάρχει αρκετή εικονική μνήμη να κρατήσει όλες τις σελίδες, το Linux θα αρχίσει να thrash (πιθανότατα, θα αρχίσει να παραπονιέται ο σκληρός,
 | 
						||
όσο σκληρός και αν είναι\...). Ύστερα από λίγο, θα πρέπει να γίνει recover, αλλά ενδιάμεσα το σύστημα θα είναι μη χρησιμοποιήσιμο. Θα πρέπει να ελέγξτε (π.χ.,
 | 
						||
με free) αν υπάρχει αρκετή ελεύθερη μνήμη πριν απομακρύνετε ένα χώρο swap από χρήση.
 | 
						||
 | 
						||
Όλες οι περιοχές swap που χρησιμοποιούνται αυτόματα με swapon -a μπορούν αν απομακρυνθούν με swapoff -a. Διαβάζει το αρχείο /etc/fstab για να βρει τί να
 | 
						||
απομακρύνει. Όσες περιοχές swap έχουν χρησιμοποιηθεί manually θα παραμείνουν σε χρήση.
 | 
						||
 | 
						||
Μερικές φορές πολύς χώρος swap μπορεί να χρησιμοποιείται ακόμη και αν υπάρχει αρκετή πραγματική μνήμη διαθέσιμη. Αυτό μπορεί να συμβεί για παράδειγμα αν σε
 | 
						||
κάποιο σημείο υπάρχει ανάγκη για swap, αλλά αργότερα μια μεγάλη διεργασία που καταλάμβανε μεγάλο μέρος της φυσικής μνήμης τερματίζεται και ελευθερώνει τη μνήμη.
 | 
						||
Τα swapped-out δεδομένα δεν αντιγράφονται αυτόματα στη μνήμη έως ότου χρειάζεται, έτσι η φυσική μνήμη μπορεί να παραμείνει ελεύθερη για ένα μεγάλο χρονικό
 | 
						||
διάστημα. Δεν υπάρχει καμία ανάγκη να ανησυχείτε γι\'αυτό, αλλά μπορεί να σας ανακουφίζει το γεγονός αν γνωρίζετε τι συμβαίνει.
 | 
						||
 | 
						||
 | 
						||
### [7. Έλεγχος χρήσης swap συσκευών]{#s7}
 | 
						||
 | 
						||
Έχοντας μια swap συσκευή μπορείτε να δείτε πόση από αυτή χρησιμοποιείται. Απλώς δώστε:
 | 
						||
 | 
						||
### [7.1 free]{#ss7.1}
 | 
						||
 | 
						||
                 total       used       free     shared    buffers     cached
 | 
						||
    Mem:         63092      61604       1488      12684       7664      43396
 | 
						||
    -/+ buffers/cache:      10544      52548
 | 
						||
    Swap:       136512        376     136136
 | 
						||
 | 
						||
Η πρώτη γραμμή Mem εμφανίζει τη φυσική μνήμη.
 | 
						||
 | 
						||
-   Η στήλη total ΔΕΝ εμφανίζει τη φυσική μνήμη που χρησιμοποιείται από τον πυρήνα, που είναι περίπου 1-2MB.
 | 
						||
-   Η στήλη used εμφανίζει το μέγεθος της μνήμης που χρησιμοποιείται (η δεύτερη γραμμή δεν μετράει buffers).
 | 
						||
-   Η στήλη free εμφανίζει το μέγεθος της αχρησιμοποίητης μνήμης.
 | 
						||
-   Η στήλη shared εμφανίζει το μέγεθος της μνήμης που μοιράζεται από διάφορες διεργασίες, όσο περισσότερη, τόσο καλύτερη.
 | 
						||
-   Η στήλη buffers εμφανίζει το τρέχον μέγεθος buffer cache του δίσκου.
 | 
						||
 | 
						||
Η τελευταία γραμμή Swap εμφανίζει παρόμοιες πληροφορίες για τις περιοχές swap. Αν αυτή η γραμμή είναι όλο μηδενικά, ο swap χώρος σας δεν έχει ενεργοποιηθει.
 | 
						||
 | 
						||
### [7.2 cat /proc/meminfo]{#ss7.2}
 | 
						||
 | 
						||
            total:    used:    free:  shared: buffers:  cached:
 | 
						||
    Mem:  64606208 63078400  1527808 12877824  7847936 44437504
 | 
						||
    Swap: 139788288   385024 139403264
 | 
						||
    MemTotal:     63092 kB
 | 
						||
    MemFree:       1492 kB
 | 
						||
    MemShared:    12576 kB
 | 
						||
    Buffers:       7664 kB
 | 
						||
    Cached:       43396 kB
 | 
						||
    BigTotal:         0 kB
 | 
						||
    BigFree:          0 kB
 | 
						||
    SwapTotal:   136512 kB
 | 
						||
    SwapFree:    136136 kB
 | 
						||
 | 
						||
### [7.3 cat /proc/swaps]{#ss7.3}
 | 
						||
 | 
						||
    Filename                        Type            Size    Used    Priority
 | 
						||
    /dev/hde4                       partition       136512  376     -1
 | 
						||
 | 
						||
### [7.4 top]{#ss7.4}
 | 
						||
 | 
						||
    Mem:   63092K av,  61544K used,   1548K free,  13116K shrd,   7516K buff
 | 
						||
    Swap: 136512K av,    376K used, 136136K free                 43372K cached
 | 
						||
 | 
						||
### [7.5 procinfo]{#ss7.5}
 | 
						||
 | 
						||
    Memory:     Total       Used        Free     Shared    Buffers     Cached
 | 
						||
    Mem:        63092      61488        1604      12796       7516      43372
 | 
						||
    Swap:      136512        376      136136
 | 
						||
 | 
						||
 | 
						||
### [8. Ιδέες\...]{#s8}
 | 
						||
 | 
						||
### [8.1 Συνδυασμός swap και /tmp]{#ss8.1}
 | 
						||
 | 
						||
Η ιδέα υπάρχει από το tmpfs στα \*BSD και το Solaris, καθώς και από το swapfs σε NeXT συστήματα.
 | 
						||
 | 
						||
Η λογική είναι ότι αυτά χρησιμοποιούνται για προσωρινή αποθήκευση που υπό κανονικές συνθήκες δεν απαιτούν πάρα πολύ χωρό. Έτσι συνδυάζοντας τα swap και /tmp δε
 | 
						||
χρειάζεται να κρατάτε ξεχωριστό χώρο για αυτά τα δύο, όπως κανονικά θα έπρεπε. Αυτό το ειδικευμένο σύστημα αρχείων είναι ένας swappable RAM δίσκος, που
 | 
						||
τοποθετεί τα προσωρινά αρχεία στην swap κατάτμηση. Σημαντικό μειονέκτημα είναι ότι για να κερδίσετε αποθηκευτικό χώρο, χάνετε ταχύτητα (μειώνεται λίγο η απόδοση
 | 
						||
του συστήματος), αφού δεν μπορείτε να έχετε και τα δυο σε παραλληλία, γεγονός που ξεπερνιέται με χρήση πολλαπλών δίσκων (interleaving). Με αυτόν τον τρόπο
 | 
						||
μπορείτε να μοιράσετε σε διάφορους δίσκους το φόρτωμα του εν λόγω συστήματος αρχείων και να πετύχετε παραλληλία.
 | 
						||
 | 
						||
### [8.2 Swap κατ\' απαίτηση με loopback device]{#ss8.2}
 | 
						||
 | 
						||
Εφόσον έχετε υποστήριξη για loopback devices στον πυρήνα, γράψτε ένα shell script ώστε να εκχωρείται δυναμικά ο χώρος του swap σε αρχείο βέβαια, χωρίς ξεχωριστή
 | 
						||
κατάτμηση\.....κτλ, κτλ
 | 
						||
 | 
						||
 | 
						||
### [9. Ίδιος χώρος swap με άλλα λειτουργικά συστήματα]{#s9}
 | 
						||
 | 
						||
### [9.1 FreeBSD]{#ss9.1}
 | 
						||
 | 
						||
Δεν έχω (ακόμα\...) δεν έχω δοκιμάσει. Δείτε το Linux+FreeBSD mini HOWTO.
 | 
						||
 | 
						||
### [9.2 Microsoft Windows]{#ss9.2}
 | 
						||
 | 
						||
Έχω (ακόμα\...), δεν έχω δοκιμάσει. Δείτε το Tips-HOWTO και το Swap-Space mini HOWTO, που πλέον συντηρείται. Το ονομα είναι παραπλανητικό\... αναφέρεται σε
 | 
						||
ειδικό θέμα ενώ το όνομά του παραπέμπει αλλού.
 | 
						||
 | 
						||
 | 
						||
### [10. Σχετικά]{#s10}
 | 
						||
 | 
						||
### [10.1 No time\...]{#ss10.1}
 | 
						||
 | 
						||
Τα τρία τελευταία κομμάτια, για loopback και για μοίρασμα χώρου swap με άλλα OS θα μπορούσα να τα αναλύσω περισσότερο. Έδωσα, πάντως, κάποιους κατευθυντήριους
 | 
						||
άξονες για κάθε ενδιαφερόμενο. Ήθελα να δώσω το στοιχείο της πληρότητας αλλά αν το έκανα σε κάθε πιθανή γωνία του παρόντος θα κατέληγα σε πληρέστατο HOWTO, που
 | 
						||
θα απαιτούσε πολύ χρόνο\...
 | 
						||
 | 
						||
### [10.2 Πηγές]{#ss10.2}
 | 
						||
 | 
						||
Για τη σύνταξη του παραπάνω χρησιμοποιήθηκαν διάφορες πηγές, από HOWTOs, από το SAG, από ερωτήσεις/απαντήσεις διάφορων mailining lists/newsgroups, από σχετικές
 | 
						||
man pages, εγχειρίδια διανομών, βιβλία για το Linux κτλ, κτλ.
 | 
						||
 |