Next Previous Contents

4. Ρυθμίζοντας τον NFS client

Πρώτα θα χρειαστείτε έναν πυρήνα με το NFS filesystem είτε compiled μέσα του, ή διαθέσιμο σαν module. Αυτό κανονίζεται πριν κάνετε compile στον πυρήνα. Εάν ποτέ δεν έχετε κάνει compile έναν πυρήνα, πιθανόν να χρειαστεί να διαβάσετε και να κατανοήσετε το Kernel HOWTO. Αν χρησιμοποιείτε κάποια cool distribution (σαν την RedHat) και ποτέ δεν ανακατευτήκατε με τον πυρήνα, ή με τα modules (και άρα δεν την καταστρέψατε ;-) ), το nfs πολύ πιθανόν να είναι αυτόματα διαθέσιμο.

Μπορείτε τώρα, στο root prompt, να δώσετε μιά κατάλληλη εντολή mount, και θα εμφανιστεί το filesystem. Συνεχίζοντας το παράδειγμα της προηγούμενης ενότητας, θέλουμε να κάνουμε mount το directory /mn/eris/local από τον Η/Υ eris. Αυτό γίνεται με την εξής εντολή :


mount -o rsize=1024,wsize=1024 eris:/mn/eris/local /mnt

(Θα επιστρέψουμε στις παραμέτρους rsize και wsize.) Το filesystem είναι τώρα διαθέσιμο στο dir /mnt , και μπορείτε να κάνετε cd σ' αυτό, και μετά ls , και να δείτε τα αρχεία ένα-ένα. Θα παρατηρήσετε ότι το nfs δεν είναι τόσο γρήγορο, όσο ένα τοπικό file system, αλλά είναι πολύ βολικότερο από το ftp. Εάν, αντί να κάνετε επιτυχές mount στο filesystem, το mount δίνει ένα μήνυμα λάθους, σαν αυτό : mount: eris:/mn/eris/local failed, reason given by server: Permission denied , τότε ή το αρχείο exports έχει λάθη, ή ξεχάσατε να τρέξετε το exportfs αφού διορθώσατε το αρχείο exports. Αν το μήνυμα λέει : mount clntudp_create: RPC: Program not registered , αυτό σημαίνει ότι ο nfsd ή ο mountd δεν τρέχουνε στον server. 'Η, ότι έχετε το πρόβλημα που αναφέραμε παραπάνω, με τα αρχεία hosts.{allow,deny} .

Γιά ν' απαλλαγείτε από το filesystem, μπορείτε να δώσετε :


umount /mnt

Γιά να κάνει ο Η/Υ mount ένα nfs filesystem με το bootάρισμα, διορθώστε το /etc/fstab με τον συνηθισμένο τρόπο. Στο παράδειγμά μας, απαιτείται μιά γραμμή όπως η παρακάτω :


# device      mountpoint     fs-type     options       dump fsckorder
...
eris:/mn/eris/local  /mnt    nfs        rsize=1024,wsize=1024 0    0
...

Σχεδόν τελειώσαμε. Όμως, θα παρακαλούσα να συνεχίσετε το διάβασμα.

4.1 Επιλογές στο mount

Υπάρχουν μερικές επιλογές, που πρέπει να σκεφθείτε αν θα τις προσθέσετε. Αυτές ρυθμίζουν τον τρόπο, με τον οποίο ένας NFS client χειρίζεται ένα κρασάρισμα του server, ή μιά ξαφνική πτώση του δικτύου. Ένα από τα όμορφα πράγματα σχετικά με το NFS, είναι ότι μπορεί άνετα να χειριστεί τέτοιες καταστάσεις, αν ρυθμίσετε σωστά τους clients. Υπάρχουν δύο διαφορετικοί τρόποι χειρισμού σφάλματος :

soft

Ο NFS client θα δώσει μήνυμα λάθους στη διεργασία (process) που πάει να διαβάσει ένα αρχείο σ' ένα NFS filesystem. Μερικά προγράμματα το χειρίζονται αυτό με ψυχραιμία, μερικά όχι. Δεν μπορώ να σας συστήσω να χρησιμοποιήσετε τη συγκεκριμένη ρύθμιση, διότι είναι συνταγή γιά να πάρετε χαλασμένα αρχεία και χαμένα δεδομένα. Αυτή τη ρύθμιση πρέπει να την αποφεύγετε ειδικά σε δίσκους e-mail servers - εννοώ, αν εκτιμάτε τα e-mails σας.

hard

Το πρόγραμμα που πάει να διαβάσει ένα αρχείο σε NFS filesystem, θα κρεμάσει, όταν κρασάρει ο server. Η διεργασία αυτή δεν μπορεί να διακοπεί, ή να της κάνετε kill, εκτός κι αν επίσης προσδιορίσετε το intr. Τη στιγμή που ο NFS server επανέλθει on-line, το πρόγραμμα θα συνεχίσει απερίσπαστο από εκεί, όπου ήταν, και πιθανότατα αυτό είναι ό,τι ακριβώς επιθυμείτε. Συνιστώ να χρησιμοποιείτε hard,intr σε όλα τα NFS filesystems.

Συνεχίζοντας με το προηγούμενο παράδειγμα, η νέα γραμμή στο fstab σας είναι κάπως έτσι :


# device      mountpoint     fs-type    options    dump fsckorder
...
eris:/mn/eris/local  /mnt    nfs        rsize=1024,wsize=1024,hard,intr 0 0
...

4.2 Βελτιστοποιώντας το NFS

Συνήθως, αν δεν καθορίζονται οι παράμετροι rsize και wsize, το NFS διαβάζει και γράφει σε κομμάτια των 4096 ή 8192 bytes. Μερικοί συνδυασμοί πυρήνων Linux και καρτών δικτύου δεν μπορούν να χειριστούν τόσο μεγάλα κομμάτια, και σε κάποιες περιπτώσεις αυτή μπορεί απλά να μην είναι η βέλτιστη ρύθμιση. Έτσι, πρέπει να πειραματιστούμε, γιά να βρούμε τα rsize και wsize που δουλεύουνε, και είναι τα ταχύτερα δυνατά. Μπορείτε να δοκιμάσετε την ταχύτητα των ρυθμίσεών σας με μερικές απλές εντολές. Με δεδομένα την παραπάνω εντολή mount, και το ότι μπορείτε να γράψετε στον δίσκο, μπορείτε να κάνετε το εξής γιά δοκιμή της απόδοσης σειριακής εγγραφής :


time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096

Αυτό παράγει ένα αρχείο 64MB με μηδενικά bytes (αρκετά μεγάλο, ώστε το κρασάρισμα να μη συνεισφέρει σημαντικά στην απόδοση που μετράμε - χρησιμοποιείστε μεγαλύτερο αρχείο, αν έχετε πολλή μνήμη). Επαναλάβετε μιά-δυο (5-10;) φορές, και βγάλτε τον μέσο όρο των χρόνων. Εδώ μας ενδιαφέρει περισσότερο ο "ωρολογιακός" χρόνος που πέρασε. Αμέσως μετά, μπορείτε να δοκιμάσετε την απόδοση ανάγνωσης, διαβάζοντας το ίδιο αρχείο :


time dd if=/mnt/testfile of=/dev/null bs=16k

Επαναλάβετε καναδυό φορές, και βγάλτε μέσο όρο. Μετά κάντε umount, και mount ξανά με μεγαλύτερα rsize και wsize. Πιθανότατα πρέπει να είναι πολλαπλάσια του 1024 και όχι μεγαλύτερα των 16384 bytes, αφού αυτό είναι το μέγιστο μέγεθος στη version 2 του NFS. Αμέσως μετά το mount με μεγαλύτερες τιμές, κάντε cd στο mounted filesystem, και κάντε πχ ls. Εξερευνήστε λιγάκι το filesystem, γιά να βεβαιωθείτε ότι όλα είναι όπως πρέπει. Αν τα rsize/wsize είναι πολύ μεγάλα, τα συμπτώματα είναι πολύ παράξενα, και όχι 100% εμφανή. Ένα τυπικό σύμπτωμα είναι οι μη πλήρεις λίστες αρχείων όταν κάνουμε ls, και ταυτόχρονα κανένα μήνυμα λάθους. 'Η, να αποτυγχάνει μυστηριωδώς η ανάγνωση αρχείων, πάλι χωρίς μήνυμα λάθους. Αφού βεβαιωθείτε ότι τα συγκεκριμένα rsize/wsize δουλεύουν απροβλημάτιστα, μπορείτε να ξανακάνετε τις δοκιμές ταχύτητας. Οι διαφορετικές πλατφόρμες server είναι πιθανό να έχουν διαφορετικές βέλτιστες τιμές. Το SunOS και το Solaris φημίζονται ότι είναι πολύ ταχύτερα με κομμάτια των 4096 bytes, παρά με ο,τιδήποτε άλλο.

Οι νεώτεροι πυρήνες του Linux (από τον 1.3 και μετά) κάνουν προανάγνωση γιά rsizes μεγαλύτερα ή ίσα με τη "σελίδα" μνήμης του Η/Υ. (Σε CPUs της Intel, το μέγεθος σελίδας μνήμης είναι 4096 bytes.) Η προανάγνωση αυξάνει σημαντικά την απόδοση ανάγνωσης του NFS. Αρα, σε Η/Υ με CPU Intel, θα χρειαστείτε - εάν αυτό, βέβαια, είναι δυνατόν - rsize των 4096 bytes.

Θυμηθείτε να διορθώσετε το /etc/fstab , ώστε να περάσετε μέσα τα βέλτιστα rsize/wsize που βρήκατε.

Ένα κολπάκι γιά ν' αυξήσετε την απόδοση εγγραφής του NFS, είναι να απενεργοποιήσετε τις σύγχρονες (synchronous) εγγραφές στον server. Οι προδιαγραφές του NFS λένε ότι οι απαιτήσεις γιά κατά NFS εγγραφές δεν θεωρούνται τελειωμένες, πριν τα εγγραφόμενα δεδομένα βρεθούν σε μέσο που τα κρατάει διαρκώς (συνήθως τον δίσκο). Αυτό περιορίζει κάπως την απόδοση εγγραφής, άρα οι ασύγχρονες (asynchronous) εγγραφές θα επιταχύνουν λιγάκι τη διαδικασία της κατά NFS εγγραφής. Ο nfsd του Linux δεν κάνει σύγχρονες εγγραφές, επειδή δεν του το επιτρέπει το filesystem του Linux. Όμως, σε servers που δεν στηρίζονται στο Linux, μπορείτε ν' αυξήσετε την απόδοση μ' αυτόν τον τρόπο, εισάγοντας στο exports αρχείο σας τη γραμμή :


/dir    -async,access=linuxbox

ή κάποια παρόμοια. Παρακαλώ, διαβάστε την τεκμηρίωση (ίσως στη σελίδα man;) του Η/Υ σας γιά το exports. Μόνο σημειώστε ότι έτσι αυξάνεται και ο κίνδυνος απώλειας δεδομένων.


Next Previous Contents