Εγκατάσταση και διαμόρφωση διακομιστή NFS. Ανταλλαγή δεδομένων μεταξύ πελάτη και διακομιστή NFS. Μέτρα ασφαλείας

Για τη διανομή αρχείων εντός ενός τοπικού δικτύου, μπορούν να διακριθούν οι ακόλουθες τεχνολογίες (λαμβάνονται υπόψη τα συστήματα που βασίζονται σε Linux):

  • Σύστημα αρχείων δικτύου (NFS) - πρωτόκολλο πρόσβασης δικτύου για συστήματα αρχείων.
  • Τα αρχεία που μεταφέρονται μέσω του πρωτοκόλλου Shell (FISH) είναι ένα πρωτόκολλο δικτύου που χρησιμοποιεί ή RSHγια μεταφορά αρχείων μεταξύ υπολογιστών.
  • Secure SHell FileSystem (SSHFS) - πελάτης συστήματος αρχείων για την τοποθέτηση συσκευών δίσκου σε απομακρυσμένα συστήματα, που χρησιμοποιείται για αλληλεπίδραση με το απομακρυσμένο σύστημα SFTP;
  • Το Samba είναι ένα πακέτο λογισμικού που σας επιτρέπει να έχετε πρόσβαση σε μονάδες δίσκου δικτύου και εκτυπωτές σε διάφορα λειτουργικά συστήματα μέσω του πρωτοκόλλου SMB/CIFS.

Σε αυτό το σημείωμα θα μιλήσουμε για NFS.

NFS (Σύστημα αρχείων δικτύου)χρήσιμο όταν χρειάζεται να διανείμετε αρχεία/καταλόγους σε όλους στο δίκτυο. Πρόσβαση στη διαφάνεια με NFSεπιτρέπει στους πελάτες να προσαρτήσουν ένα απομακρυσμένο σύστημα αρχείων ως τοπικό κατάλογο και τα συστήματα αρχείων μπορεί να είναι διαφορετικών τύπων. Αυτό σημαίνει ότι κάθε εφαρμογή πελάτη που μπορεί να λειτουργήσει με ένα τοπικό αρχείο μπορεί εξίσου εύκολα να λειτουργήσει με ένα αρχείο που είναι συνδεδεμένο μέσω NFS, χωρίς καμία τροποποίηση στο ίδιο το πρόγραμμα.

Στα οφέλη NFSμπορεί να αποδοθεί:

  • μείωση του φορτίου στον επεξεργαστή.
  • εμφάνιση κοινόχρηστων πόρων ως κανονικών καταλόγων στο σύστημα.
  • Επί του παρόντος διαθέσιμο NFS v4.1, το οποίο εισήγαγε μια νέα δυνατότητα pNFSεπιτρέποντάς σας να παραλληλίσετε την υλοποίηση της κοινής χρήσης αρχείων. Υπάρχει επίσης μια επέκταση για NFS 2 και 3 - WebNFS, που επιτρέπουν την ευκολότερη ενσωμάτωση σε προγράμματα περιήγησης ιστού και τη δυνατότητα εργασίας μέσω τείχους προστασίας.

    Σχέδιο εργασίας NFSπρωτόκολλο.

    Εγκατάσταση και διαμόρφωση διακομιστή NFS σε Linux

    Ας ελέγξουμε αν το σύστημα υποστηρίζει NFS

    Cat /proc/Filesystems | grep nfs

    Κάτω από Arch Linuxδιακομιστής και πελάτης βρίσκονται στο ίδιο πακέτο

    Yaourt -S nfs-utils

    Για να εγκαταστήσετε τον διακομιστή ( nfs-kernel-server) και πελάτη ( nfs-common) κάτω από Ubuntuαπαιτούνται πακέτα

    Sudo apt-get install nfs-kernel-server nfs-common portmap

    Περαιτέρω σε αυτήν τη σημείωση, η IP θα χρησιμοποιηθεί για τον διακομιστή 192.168.1.100 . Για να εκχωρείται πάντα η ίδια IP στον διακομιστή, είναι απαραίτητο να ορίσετε στον διακομιστή DHCP (συνήθως δρομολογητή) τη διανομή μιας συγκεκριμένης IP σε μια συγκεκριμένη διεύθυνση MAC. Ή αυξήστε τον τοπικό σας διακομιστή DNS. Για παράδειγμα ή.

    Η διεύθυνση MAC μπορεί να βρεθεί χρησιμοποιώντας το ifconfig (πεδίο αιθέρας V Arch Linux).

    NFSv4προϋποθέτει ότι υπάρχει ένας ριζικός κατάλογος, μέσα στον οποίο βρίσκονται ήδη αρχεία για διανομή. Για παράδειγμα, /srv/nfs- ρίζα, /srv/nfs/audio- κατάλογος για τη διανομή μουσικής. Εάν δεν ακολουθήσετε αυτήν τη νέα καθοδήγηση στην έκδοση 4 , τότε ενδέχεται να λάβετε ένα σφάλμα κατά τη σύνδεση από τον πελάτη:

    Mount.nfs: δεν επιτρέπεται η πρόσβαση από τον διακομιστή κατά την προσάρτηση 192.168.1.100:/home/proft/torrents

    Εάν εξακολουθείτε να θέλετε να χρησιμοποιήσετε την προσέγγιση στον διακομιστή χωρίς ριζικό κατάλογο για NFS, τότε κατά την προσάρτηση από τον πελάτη, πρέπει να καθορίσετε ρητά την έκδοση 3

    # για την εντολή mount mount -o "vers=3" 192.168.1.100:/home/proft/torrents /home/proft/nfs/torrents # για fstab 192.168.1.100:/home/proft/torrents /home/proft/nfs / torrents nfs soft,nfsvers=3 0 0

    θα χρησιμοποιήσω NFSv4με ριζικό κατάλογο μέσα /srv/nfs/και τοποθέτηση υποκαταλόγων χρησιμοποιώντας mount --bind .

    Ας υποθέσουμε ότι θέλουμε

    • διανομή καταλόγου ~/torrentsΜε rwπρόσβαση για Ολοιεντός του τοπικού δικτύου·
    • διανομή καταλόγου ~/φωτογραφίεςΜε roπρόσβαση για κεντρικό υπολογιστή με IP 192.168.1.101 ;

    Αρχικά, ας δημιουργήσουμε έναν ριζικό κατάλογο και τους απαραίτητους υποκαταλόγους.

    Sudo mkdir -p /srv/nfs/(torrents, φωτογραφίες)

    Προσάρτηση υπαρχόντων καταλόγων torrents, φωτογραφίες V /srv/nfs.

    # sudo vim /etc/fstab /home/proft/torrents /srv/nfs/torrents none bind 0 0 /home/proft/photos /srv/nfs/photos none bind 0 0

    Ας επεξεργαστούμε /etc/exports, το οποίο περιγράφει όλους τους κοινόχρηστους καταλόγους

    # sudo vim /etc/exports # μορφή αρχείου: directory allow-hosts(options) /srv/nfs/torrents 192.168.1.1/24(rw,async) /srv/nfs/photos 192.168.1.101(ro,async)

    Σημειώστε ότι δεν υπάρχει κενό μεταξύ επιτρεπόμενοι-οικοδεσπότεςΚαι (επιλογές). Η παρουσία ενός χώρου εισάγει μια διαφορετική ερμηνεία των κανόνων.

    Διαθέσιμες Επιλογές:

    • ro (rw) - επιτρέπεται η πρόσβαση μόνο για ανάγνωση (ανάγνωση/εγγραφή).
    • subtree_check (no_subtree_check) - σε ορισμένες περιπτώσεις είναι απαραίτητο να εξαγάγετε όχι ολόκληρη την ενότητα, αλλά μόνο μέρος της. Σε αυτήν την περίπτωση, ο διακομιστής NFSπρέπει να πραγματοποιήσει πρόσθετους ελέγχους σε αιτήματα πελατών για να διασφαλίσει ότι προσπαθούν μόνο να αποκτήσουν πρόσβαση σε αρχεία που βρίσκονται στους κατάλληλους υποκαταλόγους. Αυτός ο έλεγχος υποδέντρου ( έλεγχοι υποδέντρων) επιβραδύνει κάπως την αλληλεπίδραση με τους πελάτες, αλλά εάν το αρνηθείτε, μπορεί να προκαλέσει προβλήματα με την ασφάλεια του συστήματος. Μπορείτε να ακυρώσετε τον έλεγχο ενός υποδέντρου χρησιμοποιώντας την επιλογή no_subtree_check. Επιλογή subtree_check, που περιλαμβάνει τέτοιο έλεγχο, θεωρείται από προεπιλογή. Ο έλεγχος υποδέντρου μπορεί να παραλειφθεί εάν ο εξαγόμενος κατάλογος είναι ίδιος με ένα διαμέρισμα δίσκου.
    • sync (async) - καθορίζει ότι ο διακομιστής θα πρέπει να ανταποκρίνεται σε αιτήματα μόνο αφού οι αλλαγές που έγιναν από αυτά τα αιτήματα έχουν εγγραφεί στο δίσκο. Επιλογή ασυγχρονισμόςλέει στον διακομιστή να μην περιμένει να εγγραφούν πληροφορίες στο δίσκο, κάτι που βελτιώνει την απόδοση αλλά μειώνει την αξιοπιστία επειδή σε περίπτωση αποτυχίας σύνδεσης ή αποτυχίας εξοπλισμού, μπορεί να προκληθεί απώλεια δεδομένων.
    • noaccess - αρνείται την πρόσβαση στον καθορισμένο κατάλογο. Μπορεί να είναι χρήσιμο εάν έχετε ορίσει προηγουμένως την πρόσβαση για όλους τους χρήστες του δικτύου σε έναν συγκεκριμένο κατάλογο και τώρα θέλετε να περιορίσετε την πρόσβαση στον υποκατάλογο μόνο σε ορισμένους χρήστες.
    • no_root_squash – προεπιλεγμένος χρήστης ρίζαστον υπολογιστή-πελάτη δεν θα έχει τα ίδια δικαιώματα στον κατάλογο του διακομιστή. Αυτή η επιλογή καταργεί αυτόν τον περιορισμό.
    • nohide- NFSδεν εμφανίζει αυτόματα μη τοπικούς πόρους (για παράδειγμα, έχουν προσαρτηθεί χρησιμοποιώντας mount --bind), αυτή η επιλογή επιτρέπει την εμφάνιση τέτοιων πόρων.
    • ανασφαλής - χρήση μη προνομιούχων θυρών (> 1024);

    Εκκίνηση του διακομιστή NFS

    # under archlinux sudo systemctl start rpc-idmapd.service rpc-mountd.service # under ubuntu sudo /etc/init.d/nfs-kernel-server start

    Στο μέλλον, κατά την αλλαγή του αρχείου ρυθμίσεων, απλώς διαβάστε το ξανά με την εντολή:

    Σούντο εξαγωγφς -ραβ

    Εντολή rpcinfo -p | Το grep nfs σάς επιτρέπει να ελέγξετε εάν ο διακομιστής ξεκίνησε με επιτυχία.

    Πελάτης για Linux

    Εγκατάσταση

    # under archlinux yaourt -S nfs-utils # under ubuntu sudo apt-get install portmap nfs-common

    Ας δημιουργήσουμε καταλόγους για την προσάρτηση πόρων δικτύου χείμαρροιΚαι φωτογραφίες

    Mkdir -p ~/nfs/(torrents,φωτογραφίες)

    Για χειροκίνητη τοποθέτηση θα κάνουμε

    Sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/nfs/torrents /home/proft/nfs/torrents sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/toss/nfs/ /proft/nfs/photos

    Επιλογή μαλακόςκαθορίζει την αθόρυβη ακύρωση των προσπαθειών σύνδεσης του κοινόχρηστου στοιχείου μετά από ορισμένο χρονικό διάστημα (ο χρόνος καθορίζεται από την επιλογή retrans). Περισσότερες λεπτομέρειες στο άνθρωπος nfs.

    Αυτή η μέθοδος δεν είναι πολύ βολική, καθώς κάθε φορά μετά από μια επανεκκίνηση θα πρέπει να εκτελείτε αυτές τις εντολές. Ας κάνουμε την εγκατάσταση αυτόματη.

    Για αυτόματη προσάρτηση, επεξεργαστείτε το αρχείο /etc/fstab

    # sudo vim /etc/fstab 192.168.1.100:/srv/nfs/torrents /home/proft/net/torrents nfs rw,soft 0 0 192.168.1.100:/srv/nfs/photos /home/photosnf/home/proft/ ro, μαλακό 0 0

    Αλλά αυτή η μέθοδος έχει επίσης τα μειονεκτήματά της, για παράδειγμα, εάν ο διακομιστής δεν είναι διαθέσιμος, η φόρτωση του πελάτη μπορεί να παγώσει λόγω προσπαθειών σύνδεσης με τον διακομιστή NFS. Για να το διορθώσετε, δείτε παρακάτω σχετικά AutoFS.

    AutoFS - αυτόματη σύνδεση πόρων δικτύου

    Είναι δυνατή η προσάρτηση ενός απομακρυσμένου πόρου χρησιμοποιώντας AutoFSκατά την πρώτη πρόσβαση και αυτόματα αποπροσάρτηση όταν δεν υπάρχει δραστηριότητα.

    AutoFSχρησιμοποιεί πρότυπα που βρίσκονται στο /etc/autofs. Το κύριο πρότυπο ονομάζεται auto.master, μπορεί να δείχνει ένα ή περισσότερα άλλα μοτίβα για συγκεκριμένους τύπους μέσων.

    Εγκατάσταση

    # under archlinux yaourt -S autofs # under ubuntu sudo apt-get install autofs

    Υπάρχουν διάφοροι τρόποι για να καθορίσετε μεθόδους αυτόματης προσάρτησης. Χρησιμοποιώ αυτό: in /home/proft/nfsΔημιουργείται αυτόματα ένας κατάλογος με το όνομα του διακομιστή NFS, στον οποίο δημιουργούνται αυτόματα προσβάσιμοι κατάλογοι στο διακομιστή.

    # sudo vim /etc/autofs/auto.master /home/proft/nfs /etc/autofs/auto.nfs --timeout=60

    Πρόσθετη παράμετρος τέλος χρόνουορίζει τον αριθμό των δευτερολέπτων μετά τα οποία θα αποσυναρμολογηθεί η συσκευή. Παράμετρος φάντασμακαθορίζει ότι οι ρυθμισμένοι πόροι θα εμφανίζονται πάντα και όχι μόνο όταν είναι διαθέσιμοι (αυτή η επιλογή είναι ενεργοποιημένη από προεπιλογή στο AutoFS 5)

    Θα περιγράψουμε στο /etc/autofs/auto.nfsΔιακομιστής NFS και ριζικός κατάλογος.

    # sudo vim /etc/autofs/auto.nfs nfsserver 192.168.1.100:/srv/nfs

    Τώρα στην πρώτη κλήση /home/proft/nfs/torrentsΟ πόρος NFS θα προσαρτηθεί αυτόματα.

    Ας επανεκκινήσουμε την υπηρεσία autofs:

    # κάτω από το archlinux sudo systemctl επανεκκίνηση autofs # κάτω από το ubuntu sudo /etc/init.d/autofs επανεκκίνηση

    Μπορείτε επίσης να καθορίσετε το χρόνο αναμονής για να γίνει διαθέσιμος ένας πόρος NFS. Για να γίνει αυτό πρέπει να αλλάξετε τις τιμές MOUNT_WAIT.

    # under archlinux # sudo vim /etc/conf.d/autofs MOUNT_WAIT=5 # under ubuntu sudo /etc/default/autofs MOUNT_WAIT=5

    Επιβολή χρήσης του NFS v3

    Σε ορισμένες περιπτώσεις NFSv4μπορεί να λειτουργήσει αργά. Για να το διορθώσετε, μπορείτε να το αναγκάσετε να χρησιμοποιήσει την τρίτη έκδοση.

    Όταν μιλάμε για δίκτυα υπολογιστών, μπορείτε συχνά να ακούσετε αναφορά για το NFS. Τι σημαίνει αυτή η συντομογραφία;

    Είναι ένα πρωτόκολλο κατανεμημένου συστήματος αρχείων που αναπτύχθηκε αρχικά από τη Sun Microsystems το 1984, επιτρέποντας σε έναν χρήστη σε έναν υπολογιστή-πελάτη να έχει πρόσβαση σε αρχεία μέσω δικτύου, παρόμοια με την πρόσβαση στην τοπική αποθήκευση. Το NFS, όπως και πολλά άλλα πρωτόκολλα, βασίζεται στο σύστημα Open Network Computing Remote Procedure Call (ONC RPC).

    Με άλλα λόγια, τι είναι το NFS; Είναι ένα ανοιχτό πρότυπο, που ορίζεται από το Request for Comments (RFC), το οποίο επιτρέπει σε οποιονδήποτε να εφαρμόσει το πρωτόκολλο.

    Εκδόσεις και παραλλαγές

    Ο εφευρέτης χρησιμοποίησε μόνο την πρώτη έκδοση για τους δικούς του πειραματικούς σκοπούς. Όταν η ομάδα ανάπτυξης πρόσθεσε σημαντικές αλλαγές στο αρχικό NFS και το κυκλοφόρησε εκτός του δημιουργού της Sun, όρισε τη νέα έκδοση ως v2, ώστε να μπορούν να δοκιμάσουν τη διαλειτουργικότητα μεταξύ των διανομών και να δημιουργήσουν μια εναλλακτική.

    NFS v2

    Η έκδοση 2 αρχικά λειτουργούσε μόνο μέσω του πρωτοκόλλου User Datagram Protocol (UDP). Οι προγραμματιστές του ήθελαν να διατηρήσουν την πλευρά του διακομιστή χωρίς αποκλεισμό που εφαρμόζεται εκτός του κύριου πρωτοκόλλου.

    Η διεπαφή εικονικού συστήματος αρχείων επιτρέπει μια αρθρωτή υλοποίηση που αντικατοπτρίζεται σε ένα απλό πρωτόκολλο. Μέχρι τον Φεβρουάριο του 1986, είχαν επιδειχθεί λύσεις για λειτουργικά συστήματα όπως το System V έκδοση 2, το DOS και το VAX/VMS χρησιμοποιώντας το Eunice. Το NFS v2 επέτρεψε την ανάγνωση μόνο των πρώτων 2 GB ενός αρχείου λόγω περιορισμών στα 32 bit.

    NFS v3

    Η πρώτη πρόταση για την ανάπτυξη της έκδοσης 3 του NFS στη Sun Microsystems ανακοινώθηκε λίγο μετά την κυκλοφορία της δεύτερης διανομής. Το κύριο κίνητρο ήταν να προσπαθήσουμε να μετριάσουμε το πρόβλημα απόδοσης της σύγχρονης εγγραφής. Μέχρι τον Ιούλιο του 1992, οι πρακτικές βελτιώσεις είχαν επιλύσει πολλές από τις αδυναμίες της έκδοσης 2 του NFS, αφήνοντας μόνο ανεπαρκή υποστήριξη αρχείων (μεγέθη αρχείων 64-bit και μετατοπίσεις αρχείων).

    • υποστήριξη για μεγέθη αρχείων 64-bit και μετατοπίσεις για χειρισμό δεδομένων μεγαλύτερα από 2 gigabyte (GB).
    • υποστήριξη για ασύγχρονη εγγραφή στον διακομιστή για βελτίωση της απόδοσης.
    • πρόσθετα χαρακτηριστικά αρχείου σε πολλές απαντήσεις για να αποφύγετε την εκ νέου ανάκτησή τους.
    • Λειτουργία READDIRPLUS για τη λήψη δεδομένων και χαρακτηριστικών μαζί με ονόματα αρχείων κατά τη σάρωση ενός καταλόγου.
    • πολλές άλλες βελτιώσεις.

    Κατά την εισαγωγή της έκδοσης 3, η υποστήριξη για το TCP ως πρωτόκολλο επιπέδου μεταφοράς άρχισε να αυξάνεται. Η χρήση του TCP ως μέσου μεταφοράς δεδομένων, που εκτελείται με χρήση NFS μέσω WAN, άρχισε να επιτρέπει τη μεταφορά μεγάλων μεγεθών αρχείων για προβολή και εγγραφή. Χάρη σε αυτό, οι προγραμματιστές μπόρεσαν να ξεπεράσουν τα όρια των 8 KB που επιβλήθηκαν από το Πρωτόκολλο Δεδομένων Χρήστη (UDP).

    Τι είναι το NFS v4;

    Η έκδοση 4, επηρεασμένη από το Endres File System (AFS) και το μπλοκ μηνυμάτων διακομιστή (SMB, που ονομάζεται επίσης CIFS), περιλαμβάνει βελτιώσεις απόδοσης, παρέχει καλύτερη ασφάλεια και εισάγει ένα πρωτόκολλο συμμόρφωσης.

    Η έκδοση 4 ήταν η πρώτη διανομή που αναπτύχθηκε από το Internet Engineering Task Force (IETF) αφού η Sun Microsystems ανέθεσε σε εξωτερικούς συνεργάτες την ανάπτυξη πρωτοκόλλου.

    Η έκδοση 4.1 του NFS στοχεύει στην παροχή υποστήριξης πρωτοκόλλου για τη μόχλευση αναπτύξεων συμπλεγματοποιημένων διακομιστών, συμπεριλαμβανομένης της δυνατότητας παροχής κλιμακούμενης παράλληλης πρόσβασης σε αρχεία που διανέμονται σε πολλούς διακομιστές (επέκταση pNFS).

    Το νεότερο πρωτόκολλο συστήματος αρχείων, NFS 4.2 (RFC 7862), κυκλοφόρησε επίσημα τον Νοέμβριο του 2016.

    Άλλες επεκτάσεις

    Με την ανάπτυξη του προτύπου, εμφανίστηκαν αντίστοιχα εργαλεία για την εργασία με αυτό. Για παράδειγμα, το WebNFS, μια επέκταση για τις εκδόσεις 2 και 3, επιτρέπει στο Πρωτόκολλο Πρόσβασης Συστήματος Αρχείων Δικτύου να ενσωματώνεται πιο εύκολα σε προγράμματα περιήγησης ιστού και να επιτρέπει την εργασία σε τείχη προστασίας.

    Διάφορα πρωτόκολλα τρίτων έχουν επίσης συσχετιστεί με το NFS. Τα πιο γνωστά από αυτά είναι:

    • Network Lock Manager (NLM) με υποστήριξη πρωτοκόλλου byte (προστέθηκε για την υποστήριξη API κλειδώματος αρχείων UNIX System V).
    • Απομακρυσμένη ποσόστωση (RQUOTAD), η οποία επιτρέπει στους χρήστες του NFS να προβάλλουν ποσοστώσεις αποθήκευσης σε διακομιστές NFS.
    • Το NFS μέσω RDMA είναι μια προσαρμογή του NFS που χρησιμοποιεί απομακρυσμένη άμεση πρόσβαση στη μνήμη (RDMA) ως μέσο μετάδοσης.
    • Ο NFS-Ganesha είναι ένας διακομιστής NFS που εκτελείται στο χώρο χρήστη και υποστηρίζει CephFS FSAL (File System Abstraction Layer) χρησιμοποιώντας libcephfs.

    Πλατφόρμες

    Το Network File System χρησιμοποιείται συχνά με λειτουργικά συστήματα Unix (όπως Solaris, AIX, HP-UX), MacOS της Apple και λειτουργικά συστήματα παρόμοια με το Unix (όπως Linux και FreeBSD).

    Είναι επίσης διαθέσιμο για πλατφόρμες όπως το Acorn RISC OS, OpenVMS, MS-DOS, Microsoft Windows, Novell NetWare και IBM AS/400.

    Εναλλακτικά πρωτόκολλα απομακρυσμένης πρόσβασης αρχείων περιλαμβάνουν το μπλοκ μηνυμάτων διακομιστή (SMB, που ονομάζεται επίσης CIFS), το Πρωτόκολλο μεταφοράς Apple (AFP), το Πρωτόκολλο πυρήνα NetWare (NCP) και το Σύστημα αρχείων διακομιστή OS/400 (QFileSvr.400).

    Αυτό οφείλεται στις απαιτήσεις του NFS, οι οποίες στοχεύουν κυρίως σε «κελύφη» τύπου Unix.

    Ωστόσο, τα πρωτόκολλα SMB και NetWare (NCP) χρησιμοποιούνται συχνότερα από το NFS σε συστήματα που εκτελούν Microsoft Windows. Το AFP είναι πιο συνηθισμένο σε πλατφόρμες Apple Macintosh και το QFileSvr.400 είναι πιο συνηθισμένο στο OS/400.

    Τυπική υλοποίηση

    Υποθέτοντας ένα τυπικό σενάριο τύπου Unix στο οποίο ένας υπολογιστής (ο πελάτης) χρειάζεται πρόσβαση σε δεδομένα που είναι αποθηκευμένα σε έναν άλλο (τον διακομιστή NFS):

    • Ο διακομιστής εφαρμόζει διεργασίες συστήματος αρχείων δικτύου, που εκτελούνται από προεπιλογή ως nfsd, για να κάνει τα δεδομένα του δημόσια διαθέσιμα στους πελάτες. Ο διαχειριστής του διακομιστή καθορίζει τον τρόπο εξαγωγής ονομάτων και ρυθμίσεων καταλόγου, χρησιμοποιώντας συνήθως το αρχείο διαμόρφωσης /etc/exports και την εντολή exportfs.
    • Η διαχείριση της ασφάλειας διακομιστή διασφαλίζει ότι μπορεί να αναγνωρίσει και να εγκρίνει έναν πιστοποιημένο πελάτη. Η διαμόρφωση του δικτύου του διασφαλίζει ότι οι κατάλληλοι πελάτες μπορούν να διαπραγματευτούν μαζί του μέσω οποιουδήποτε συστήματος τείχους προστασίας.
    • Το μηχάνημα πελάτη ζητά πρόσβαση στα εξαγόμενα δεδομένα, συνήθως με την έκδοση μιας εντολής. Υποβάλλει ερώτημα στον διακομιστή (rpcbind) που χρησιμοποιεί τη θύρα NFS και στη συνέχεια συνδέεται σε αυτήν.
    • Εάν όλα γίνονται χωρίς σφάλματα, οι χρήστες στον υπολογιστή-πελάτη θα μπορούν να προβάλλουν και να αλληλεπιδρούν με τα εγκατεστημένα συστήματα αρχείων στο διακομιστή εντός των επιτρεπόμενων παραμέτρων.

    Θα πρέπει επίσης να σημειωθεί ότι μπορεί επίσης να πραγματοποιηθεί αυτοματοποίηση της διαδικασίας του Συστήματος Αρχείων Δικτύου - ίσως χρησιμοποιώντας etc/fstab ή/και άλλα παρόμοια εργαλεία.

    Ανάπτυξη μέχρι σήμερα

    Μέχρι τον 21ο αιώνα, τα ανταγωνιστικά πρωτόκολλα DFS και AFS δεν είχαν επιτύχει καμία σημαντική εμπορική επιτυχία σε σύγκριση με το σύστημα αρχείων δικτύου. Η IBM, η οποία προηγουμένως είχε αποκτήσει όλα τα εμπορικά δικαιώματα για τις παραπάνω τεχνολογίες, δώρισε το μεγαλύτερο μέρος του πηγαίου κώδικα AFS στην κοινότητα του ελεύθερου λογισμικού το 2000. Το έργο Open AFS υπάρχει ακόμα και σήμερα. Στις αρχές του 2005, η IBM ανακοίνωσε το τέλος των πωλήσεων των AFS και DFS.

    Με τη σειρά του, τον Ιανουάριο του 2010, ο Panasas πρότεινε το NFS v 4.1 βασισμένο σε τεχνολογία που βελτιώνει τις δυνατότητες παράλληλης πρόσβασης δεδομένων. Το πρωτόκολλο Network File System v 4.1 ορίζει μια μέθοδο για τον διαχωρισμό των μεταδεδομένων του συστήματος αρχείων από τη θέση συγκεκριμένων αρχείων. Έτσι, υπερβαίνει τον απλό διαχωρισμό ονόματος/δεδομένων.

    Τι είναι το NFS αυτής της έκδοσης στην πράξη; Το παραπάνω χαρακτηριστικό το διακρίνει από το παραδοσιακό πρωτόκολλο, το οποίο περιέχει τα ονόματα των αρχείων και τα δεδομένα τους σε μία σύνδεση με τον διακομιστή. Με το Network File System v 4.1, ορισμένα αρχεία μπορούν να κοινοποιηθούν σε διακομιστές πολλών κόμβων, αλλά η συμμετοχή του πελάτη στην κοινή χρήση μεταδεδομένων και δεδομένων είναι περιορισμένη.

    Κατά την υλοποίηση της τέταρτης διανομής του πρωτοκόλλου, ο διακομιστής NFS είναι ένα σύνολο πόρων ή στοιχείων διακομιστή. Υποτίθεται ότι ελέγχονται από τον διακομιστή μεταδεδομένων.

    Ο πελάτης εξακολουθεί να έρχεται σε επαφή με έναν μόνο διακομιστή μεταδεδομένων για να διασχίσει ή να αλληλεπιδράσει με τον χώρο ονομάτων. Καθώς μετακινεί αρχεία προς και από τον διακομιστή, μπορεί να αλληλεπιδράσει απευθείας με ένα σύνολο δεδομένων που ανήκουν σε μια ομάδα NFS.

    Λοιπόν τι ακολουθεί? Πώς να παρακολουθήσετε ταινίες και να ακούσετε αρχεία μουσικής που έχετε κατεβάσει; Είναι πραγματικά απαραίτητο να τα κάψετε σε δίσκους και έτσι να τα μεταφέρετε σε υπολογιστή με GUI; Ή θα πρέπει να τα αντιγράψω μέσω αργού SFTP; Οχι! Το NFS έρχεται στη διάσωση! Όχι, δεν πρόκειται για μια σειρά από παιχνίδια αγώνων, αλλά για ένα Σύστημα Αρχείων Δικτύου.
    Το Σύστημα Αρχείων Δικτύου (NFS) είναι ένα σύστημα αρχείων δικτύου που επιτρέπει στους χρήστες να έχουν πρόσβαση σε αρχεία και καταλόγους που βρίσκονται σε απομακρυσμένους υπολογιστές σαν αυτά τα αρχεία και οι κατάλογοι να ήταν τοπικοί. Το κύριο πλεονέκτημα ενός τέτοιου συστήματος είναι ότι οι μεμονωμένοι σταθμοί εργασίας μπορούν να χρησιμοποιούν λιγότερο χώρο στο δίσκο τους, καθώς τα κοινόχρηστα δεδομένα αποθηκεύονται σε ξεχωριστό μηχάνημα και είναι διαθέσιμα σε άλλα μηχανήματα στο δίκτυο. Το NFS είναι μια εφαρμογή πελάτη-διακομιστή. Δηλαδή, ένας πελάτης NFS πρέπει να εγκατασταθεί στο σύστημα του χρήστη και ένας διακομιστής NFS πρέπει να εγκατασταθεί σε υπολογιστές που παρέχουν χώρο στο δίσκο τους.

    Εγκατάσταση και διαμόρφωση διακομιστή NFS (192.168.1.2)

    1. Εγκαταστήστε. Έχοντας συνδεθεί μέσω SSH στον υπολογιστή διακομιστή ή απλά στην κονσόλα του, πληκτρολογήστε:

    Sudo apt-get install nfs-kernel-server nfs-common portmap

    Αυτό θα εγκαταστήσει τον διακομιστή NFS καθώς και το απαιτούμενο πακέτο portmap.

    2. Ρύθμιση. Για να διαμορφώσουμε τη λίστα των καταλόγων που θέλουμε να ανοίξουμε και τη λίστα με τους οποίους θέλουμε να τους ανοίξουμε, θα επεξεργαστούμε το αρχείο /etc/exports :

    Sudo nano /etc/exports /data 192.168.1.1/24(rw,no_root_squash,async)

    Στο παραπάνω παράδειγμα, ανοίξαμε έναν κατάλογο στον διακομιστή /δεδομένα και τους υποκαταλόγους του για κοινή χρήση από όλους τους υπολογιστές με IP: 192.168.1.1 - 192.168.1.255 με δικαιώματα ανάγνωσης και εγγραφής.

    Ενα άλλο παράδειγμα:

    /home/serg/ 192.168.1.34 (ro,async)

    Αυτό το παράδειγμα καθιστά τον αρχικό κατάλογο του χρήστη serg διαθέσιμο σε λειτουργία μόνο για ανάγνωση σε έναν υπολογιστή με IP 192.168.1.34. Όλοι οι άλλοι υπολογιστές στο δίκτυο δεν θα έχουν πρόσβαση σε αυτόν τον κατάλογο.

    Διαθέσιμες Επιλογές:

    • ro - δικαιώματα μόνο για ανάγνωση. Δεν χρειάζεται να το καθορίσετε, καθώς είναι εγκατεστημένο από προεπιλογή.
    • rw - δίνει στους πελάτες άδεια εγγραφής.
    • no_root_squash - από προεπιλογή, ο χρήστης root στον υπολογιστή-πελάτη δεν θα έχει πρόσβαση σε ανοιχτούς καταλόγους στο διακομιστή. Με αυτήν την επιλογή αφαιρούμε αυτόν τον περιορισμό. Για λόγους ασφαλείας, είναι καλύτερα να μην το κάνετε αυτό.
    • noaccess - αρνείται την πρόσβαση στον καθορισμένο κατάλογο. Μπορεί να είναι χρήσιμο εάν έχετε ορίσει προηγουμένως την πρόσβαση για όλους τους χρήστες του δικτύου σε έναν συγκεκριμένο κατάλογο και τώρα θέλετε να περιορίσετε την πρόσβαση στον υποκατάλογο μόνο σε ορισμένους χρήστες.

    Τώρα πρέπει να κάνετε επανεκκίνηση του nfs-kernel-server:

    Επανεκκίνηση του Sudo /etc/init.d/nfs-kernel-server

    Εάν μετά από αυτό θέλετε να αλλάξετε κάτι στο αρχείο /etc/exports , τότε για να τεθούν σε ισχύ οι αλλαγές, απλώς εκτελέστε την ακόλουθη εντολή:

    Sudo exportfs -α

    Ολα. Ο διακομιστής NFS έχει εγκατασταθεί και ρυθμιστεί. Μπορείτε να μεταβείτε στον πελάτη NFS.

    Εγκατάσταση και διαμόρφωση προγράμματος-πελάτη NFS

    1. Εγκατάσταση. Εκτελούμε τα εξής στο τερματικό του υπολογιστή, το οποίο θα συνδεθεί:

    Sudo apt-get εγκατάσταση portmap nfs-common

    2. Ρύθμιση. Αρχικά, ας δημιουργήσουμε έναν κατάλογο στον οποίο θα τοποθετηθεί ο απομακρυσμένος φάκελος:

    Δεδομένα Cd ~ mkdir

    Μπορείτε να προσαρτήσετε με δύο τρόπους - μη αυτόματα κάθε φορά ή γράφοντας επιλογές προσάρτησης σε ένα αρχείο /etc/fstab.

    Μέθοδος 1: Χειροκίνητη τοποθέτηση
    Δημιουργήστε ένα αρχείο κειμένου στην επιφάνεια εργασίας ή σε κάποιον άλλο φάκελο:

    Nano ~/Desktop/nfs-server-connect

    Γράφουμε σε αυτό:

    #! /bin/bash sudo mount -t nfs -o ro,soft,intr 192.168.1.2:/data ~/data

    Ας το κάνουμε εκτελέσιμο:

    Chmod +x ~/Desktop/nfs-server-connect

    Τώρα, όταν πρέπει να συνδεθώ στον διακομιστή, εκτελώ αυτό το σενάριο στο τερματικό για να μπορώ να εισάγω τον κωδικό πρόσβασης για το sudo.

    Μέθοδος 2: Προσθήκη στο /etc/fstab
    Ανοίξτε το /etc/fstab:

    Sudo nano /etc/fstab

    Και προσθέστε μια γραμμή στο τέλος του αρχείου:

    192.168.1.2:/data ~/data nfs rw,hard,intr 0 0

    Προσοχή! Αντί για 192.168.1.2:/data, εισαγάγετε την IP ή το όνομα διακομιστή και τη διαδρομή προς τον κοινόχρηστο κατάλογο. Οι επιλογές τοποθέτησης μπορούν να αλλάξουν.

    Επιλογή σκληράδεσμεύει αυστηρά τον κατάλογο του προγράμματος-πελάτη με τον διακομιστή και εάν ο διακομιστής πέσει, ο υπολογιστής σας μπορεί επίσης να παγώσει. Επιλογή μαλακός, όπως υποδηλώνει το όνομά του, δεν είναι τόσο κατηγορηματικό.

    Αφού αποθηκεύσετε το αρχείο, μπορείτε να προσαρτήσετε τον απομακρυσμένο φάκελο.

    Κεφάλαιο 29 NFS: Σύστημα αρχείων δικτύου

    Εισαγωγή

    Σε αυτό το κεφάλαιο, θα εξετάσουμε το Network File System (NFS), μια δημοφιλή εφαρμογή που παρέχει στις εφαρμογές-πελάτες διαφανή πρόσβαση στα αρχεία. Ο ακρογωνιαίος λίθος του NFS είναι το Sun RPC: Remote Procedure Call, το οποίο θα καλύψουμε πρώτα.

    Το πρόγραμμα πελάτη δεν απαιτεί ειδικά εργαλεία για να εκμεταλλευτεί το NFS. Ο πυρήνας ανιχνεύει ότι το αρχείο βρίσκεται σε διακομιστή NFS και δημιουργεί αυτόματα μια κλήση RPC για πρόσβαση στο αρχείο.

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

    Κλήση διαδικασίας Sun Remote

    Στις περισσότερες περιπτώσεις, τα προβλήματα προγραμματισμού δικτύου επιλύονται γράφοντας προγράμματα εφαρμογών που καλούν λειτουργίες που παρέχονται από το σύστημα για την εκτέλεση συγκεκριμένων λειτουργιών δικτύου. Για παράδειγμα, μια συνάρτηση εκτελεί ενεργό ανοιχτό TCP, μια άλλη ανοιχτό παθητικό TCP, μια τρίτη στέλνει δεδομένα μέσω σύνδεσης TCP, μια τέταρτη ορίζει συγκεκριμένες επιλογές πρωτοκόλλου (ενεργοποιεί το χρονόμετρο TCP "stay alive") και ούτω καθεξής. Στην ενότητα Διασυνδέσεις προγραμματισμού εφαρμογών του Κεφαλαίου 1, αναφέραμε ότι υπάρχουν δύο δημοφιλή σύνολα λειτουργιών προγραμματισμού δικτύου (διεπαφές προγραμματισμού εφαρμογών, API): υποδοχές και TLI. Το API που χρησιμοποιείται από τον πελάτη και το API που χρησιμοποιείται από τον διακομιστή ενδέχεται να διαφέρουν, όπως και τα λειτουργικά συστήματα που εκτελούνται από τον πελάτη και τον διακομιστή. Τα πρωτόκολλα επικοινωνίας και εφαρμογής είναι αυτά που καθορίζουν εάν ένας συγκεκριμένος πελάτης μπορεί να επικοινωνήσει με τον διακομιστή. Ένας πελάτης Unix γραμμένος σε C χρησιμοποιώντας υποδοχές ως διεπαφή προγραμματισμού και TCP ως πρωτόκολλο επικοινωνίας μπορεί να επικοινωνήσει με έναν κεντρικό υπολογιστή γραμμένο σε COBOL χρησιμοποιώντας διαφορετικά API και TCP εάν και οι δύο κεντρικοί υπολογιστές είναι συνδεδεμένοι στο δίκτυο και έχουν και οι δύο υλοποίηση TCP.

    Συνήθως, ο πελάτης στέλνει εντολές στον διακομιστή και ο διακομιστής στέλνει απαντήσεις στον πελάτη. Όλες οι εφαρμογές που εξετάσαμε - Ping, Traceroute, δαίμονες δρομολόγησης, πελάτες και διακομιστές DNS, TFTP, BOOTP, SNMP, Telnet, FTP, SMTP - είναι όλες κατασκευασμένες με αυτόν τον τρόπο.

    Το RPC, κλήση απομακρυσμένης διαδικασίας, εφαρμόζει μια διαφορετική προσέγγιση στον προγραμματισμό δικτύου. Το πρόγραμμα πελάτη απλώς καλεί συναρτήσεις στο πρόγραμμα διακομιστή. Αυτό λοιπόν αποφασίζεται από τη σκοπιά του προγραμματιστή, αλλά στην πραγματικότητα λαμβάνει χώρα η ακόλουθη σειρά ενεργειών.

    1. Όταν ένας πελάτης καλεί μια απομακρυσμένη διαδικασία, καλείται μια συνάρτηση στον τοπικό κεντρικό υπολογιστή που δημιουργείται από το πακέτο RPC. Αυτή η συνάρτηση ονομάζεται στέλεχος πελάτη. Το στέλεχος πελάτη συσκευάζει τα ορίσματα της διαδικασίας σε ένα μήνυμα δικτύου και στέλνει το μήνυμα στον διακομιστή.
    2. Το στέλεχος διακομιστή στον κεντρικό υπολογιστή διακομιστή λαμβάνει το μήνυμα δικτύου. Τα ορίσματα ανακτώνται από το μήνυμα δικτύου και γίνεται κλήση στη διαδικασία διακομιστή που έχει γραφτεί από τον προγραμματιστή της εφαρμογής.
    3. Η συνάρτηση διακομιστή επιστρέφει τον έλεγχο στο στέλεχος διακομιστή, ο οποίος με τη σειρά του λαμβάνει τις ληφθείσες τιμές, τις συσκευάζει σε ένα μήνυμα δικτύου και στέλνει το μήνυμα πίσω στο στέλεχος πελάτη.
    4. Το στέλεχος πελάτη επιστρέφει τιμές από ένα μήνυμα δικτύου στην εφαρμογή πελάτη.

    Ο προγραμματισμός δικτύου χρησιμοποιώντας στελέχη και ρουτίνες RPC βιβλιοθήκης χρησιμοποιεί API (υποδοχές ή TLI), αλλά οι εφαρμογές χρήστη (το πρόγραμμα πελάτη και οι διαδικασίες διακομιστή που καλούνται από τον πελάτη) δεν έχουν ποτέ πρόσβαση στο API. Η εφαρμογή πελάτη χρειάζεται μόνο να καλέσει τη διαδικασία διακομιστή, ενώ όλες οι λεπτομέρειες υλοποίησης κρύβονται από το πακέτο RPC, το απόκομμα πελάτη και το στέλεχος διακομιστή.

    Τα πακέτα RPC έχουν τα ακόλουθα πλεονεκτήματα.

    • Ο προγραμματισμός γίνεται ευκολότερος επειδή δεν χρειάζεται να λύσετε προβλήματα προγραμματισμού δικτύου (και αν το κάνετε, είναι πολύ λίγο). Οι προγραμματιστές εφαρμογών απλώς γράφουν το πρόγραμμα πελάτη και τις διαδικασίες διακομιστή που καλεί ο πελάτης.
    • Εάν χρησιμοποιείται ένα αναξιόπιστο πρωτόκολλο όπως το UDP, όλες οι λεπτομέρειες, δηλαδή τα χρονικά όρια και οι αναμεταδόσεις, αντιμετωπίζονται από το πακέτο RPC. Αυτό με τη σειρά του απλοποιεί την εφαρμογή του χρήστη.
    • Η βιβλιοθήκη RPC χειρίζεται την απαραίτητη μετατροπή ορισμάτων και τιμών επιστροφής. Για παράδειγμα, εάν τα ορίσματα αποτελούνται από ακέραιους και αριθμούς κινητής υποδιαστολής, το πακέτο RPC θα χειριστεί τυχόν διαφορές μεταξύ της αναπαράστασης ακεραίων και αριθμών κινητής υποδιαστολής στον πελάτη και στο διακομιστή. Αυτό απλοποιεί την υλοποίηση των πελατών και των διακομιστών ώστε να λειτουργούν σε ετερογενή περιβάλλοντα.

    Ο προγραμματισμός RPC καλύπτεται λεπτομερώς στο Κεφάλαιο 18. Τα δύο πιο δημοφιλή πακέτα RPC είναι το Sun RPC και το πακέτο RPC στο Κατανεμημένο Υπολογιστικό Περιβάλλον του Open Software Foundation (OSF). Θα εξετάσουμε πώς ονομάζεται η διαδικασία, πώς φαίνεται το μήνυμα επιστροφής και πώς σχετίζεται αυτό στο πακέτο Sun RPC, καθώς αυτό το πακέτο χρησιμοποιείται στην έκδοση 2 της Sun RPC, η οποία περιγράφεται στο RFC 1057 [Sun Microsystems 1988a].

    Υπάρχουν δύο τύποι Sun RPC. Η μία έκδοση έχει δημιουργηθεί χρησιμοποιώντας το API υποδοχών και λειτουργεί με TCP και UDP. Το άλλο ονομάζεται TI-RPC (transport ανεξάρτητα), κατασκευασμένο με χρήση του TLI API και λειτουργεί με οποιαδήποτε επίπεδα μεταφοράς παρέχονται από τον πυρήνα. Από την άποψή μας, δεν υπάρχει διαφορά μεταξύ τους, αφού σε αυτό το κεφάλαιο εξετάζουμε μόνο το TCP και το UDP.

    Το σχήμα 29.1 δείχνει τη μορφή ενός μηνύματος κλήσης διαδικασίας RPC χρησιμοποιώντας UDP.

    Εικόνα 29.1 Μηνύματα κλήσης διαδικασίας RPC σε μορφή UDP datagram.

    Οι τυπικές κεφαλίδες IP και UDP εμφανίζονται νωρίτερα (Εικόνα 3.1 και Εικόνα 11.2). Όλα όσα ακολουθούν την κεφαλίδα UDP καθορίζονται από το πακέτο RPC.

    Το αναγνωριστικό συναλλαγής (XID - αναγνωριστικό συναλλαγής) ορίζεται από τον πελάτη και επιστρέφεται από τον διακομιστή. Όταν ο πελάτης λαμβάνει μια απάντηση, συγκρίνει το XID που επιστράφηκε από τον διακομιστή με το XID του αιτήματος που εστάλη. Εάν δεν ταιριάζουν, ο πελάτης απορρίπτει το μήνυμα και περιμένει να φτάσει το επόμενο. Κάθε φορά που ο πελάτης εκδίδει ένα νέο RPC, αλλάζει το XID. Ωστόσο, εάν ο πελάτης επαναμεταδώσει το RPC (αν δεν ελήφθη απάντηση), το XID δεν αλλάζει.

    Η μεταβλητή κλήσης είναι 0 για μια κλήση και 1 για μια απάντηση. Η τρέχουσα έκδοση RPC είναι 2. Οι επόμενες τρεις μεταβλητές, αριθμός προγράμματος, αριθμός έκδοσης και αριθμός διαδικασίας, προσδιορίζουν τη συγκεκριμένη διαδικασία που θα κληθεί στον διακομιστή.

    Τα διαπιστευτήρια προσδιορίζουν τον πελάτη. Σε ορισμένα παραδείγματα αυτό το πεδίο παραμένει κενό, ενώ σε άλλα μπορείτε να δείτε το ψηφιακό αναγνωριστικό του χρήστη και το αναγνωριστικό ομάδας στην οποία ανήκει. Ο διακομιστής μπορεί να εξετάσει τα διαπιστευτήρια και να αποφασίσει εάν θα επεξεργαστεί το αίτημα ή όχι. Ο επαληθευτής χρησιμοποιείται για το Secure RPC, το οποίο χρησιμοποιεί κρυπτογράφηση DES. Παρόλο που τα πεδία εξουσιοδότησης και επικύρωσης είναι πεδία μεταβλητού μήκους, το μήκος τους μεταβιβάζεται ως μέρος του πεδίου.

    Ακολουθούν οι παράμετροι της διαδικασίας. Η μορφή τους εξαρτάται από το πώς η εφαρμογή ορίζει την απομακρυσμένη διαδικασία. Πώς γνωρίζει ο δέκτης (απόκομμα διακομιστή) το μέγεθος των παραμέτρων; Εφόσον χρησιμοποιείται το UDP, το μέγεθος των παραμέτρων μπορεί να υπολογιστεί ως το μέγεθος του datagram UDP μείον το μήκος όλων των πεδίων μέχρι το πεδίο ελέγχου. Όταν χρησιμοποιείται TCP αντί για UDP, δεν υπάρχει έννοια σταθερού μήκους, καθώς το TCP είναι μια ροή byte χωρίς οριοθέτες εγγραφής. Σε μια τέτοια περίπτωση, εμφανίζεται ένα πεδίο μήκους 4 byte μεταξύ της κεφαλίδας TCP και του XID, από το οποίο ο δέκτης μαθαίνει το μήκος της κλήσης RPC σε byte. Αυτό επιτρέπει την αποστολή του μηνύματος κλήσης RPC μέσω πολλαπλών τμημάτων TCP, εάν είναι απαραίτητο. (Το DNS χρησιμοποιεί παρόμοια τεχνική· Άσκηση 4 στο Κεφάλαιο 14.)

    Το σχήμα 29.2 δείχνει τη μορφή απόκρισης RPC. Αποστέλλεται από το στέλεχος διακομιστή στο στέλεχος πελάτη όταν τερματιστεί η απομακρυσμένη διαδικασία.

    Εικόνα 29.2 Μορφή μηνύματος απάντησης διαδικασίας RPC ως datagram UDP.

    Η κλήση XID απλώς αντιγράφεται στο XID απόκρισης. Το πεδίο απάντησης περιέχει 1, αυτό το πεδίο κάνει διάκριση μεταξύ πρόκλησης και απάντησης. Το πεδίο κατάστασης περιέχει μια μηδενική τιμή εάν το μήνυμα κλήσης έχει γίνει αποδεκτό. (Το μήνυμα μπορεί να απορριφθεί εάν ο αριθμός έκδοσης RPC δεν είναι 2 ή εάν ο διακομιστής δεν μπορεί να ελέγξει την ταυτότητα του προγράμματος-πελάτη.) Το πεδίο επαλήθευσης χρησιμοποιείται στην περίπτωση ασφαλούς RPC για να υποδείξει τον διακομιστή.

    Το πεδίο κατάστασης αποδοχής περιέχει μηδενική τιμή εάν όλα είναι καλά. Μια μη μηδενική τιμή θα μπορούσε να υποδεικνύει, για παράδειγμα, έναν λανθασμένο αριθμό έκδοσης ή έναν εσφαλμένο αριθμό διαδικασίας. Εάν χρησιμοποιείται TCP αντί για UDP, τότε, όπως και με το μήνυμα πρόκλησης RPC, αποστέλλεται ένα πεδίο μήκους 4 byte μεταξύ της κεφαλίδας TCP και του XID.

    XDR: Εξωτερική αναπαράσταση δεδομένων

    Η Εξωτερική Αναπαράσταση Δεδομένων (XDR) είναι ένα πρότυπο που χρησιμοποιείται για την κωδικοποίηση τιμών σε μηνύματα κλήσης και απάντησης RPC - πεδία κεφαλίδας RPC (XID, αριθμός προγράμματος, κατάσταση λήψης, κ.λπ.), παραμέτρους διαδικασίας και αποτελέσματα διαδικασίας. Ένας τυπικός τρόπος κωδικοποίησης δεδομένων επιτρέπει σε έναν πελάτη να καλέσει μια διαδικασία σε ένα σύστημα με διαφορετική αρχιτεκτονική. Το XDR ορίζεται στο RFC 1014 [Sun Microsystems 1987].

    Το XDR ορίζει έναν ορισμένο αριθμό τύπων δεδομένων και τον ακριβή τρόπο μεταφοράς τους σε ένα μήνυμα RPC (σειρά bit, σειρά byte κ.λπ.). Ο αποστολέας πρέπει να κατασκευάσει το μήνυμα RPC σε μορφή XDR και, στη συνέχεια, ο παραλήπτης μετατρέπει τη μορφή XDR στην αρχική αναπαράσταση. (Στη μορφή που είναι αποδεκτή για το σύστημά του.) Βλέπουμε, για παράδειγμα, στα σχήματα 29.1 και 29.2, ότι όλες οι ακέραιες τιμές που δείξαμε (XID, κλήση, αριθμός προγράμματος κ.λπ.) είναι ακέραιοι αριθμοί 4 byte . Πράγματι, όλοι οι ακέραιοι αριθμοί στο XDR καταλαμβάνουν 4 byte. Το XDR υποστηρίζει άλλους τύπους δεδομένων, όπως ανυπόγραφους ακέραιους, boolean, κινητής υποδιαστολής, πίνακες σταθερού μήκους, πίνακες μεταβλητού μήκους και δομές.

    Συμμόρφωση λιμένα

    Τα προγράμματα διακομιστή RPC που περιέχουν απομακρυσμένες διαδικασίες χρησιμοποιούν δυναμικά εκχωρημένες θύρες αντί για προ-γνωστές θύρες. Αυτό απαιτεί κάποια μορφή "καταγραφής" προκειμένου να γνωρίζουμε πάντα ποια δυναμικά εκχωρημένη θύρα χρησιμοποιείται από ποιο πρόγραμμα RPC. Στο Sun RPC αυτό το καταγραφικό ονομάζεται χαρτογράφος θυρών. (Ο χαρτογράφος θυρών είναι ένας διακομιστής που μετατρέπει αριθμούς προγραμμάτων RPC σε αριθμούς θυρών πρωτοκόλλου DARPA. Αυτός ο διακομιστής πρέπει να εκτελείται για να πραγματοποιήσει μια κλήση RPC.)

    Ο όρος "θύρα" στο όνομα προέρχεται από τους αριθμούς θυρών TCP και UDP, χαρακτηριστικά της οικογένειας πρωτοκόλλων Διαδικτύου. Δεδομένου ότι το TI-RPC εκτελείται σε οποιαδήποτε επίπεδα μεταφοράς, όχι μόνο σε TCP και UDP, το όνομα αντιστοίχισης θύρας σε συστήματα που χρησιμοποιούν TI-RPC (SVR4 και Solaris 2.2, για παράδειγμα) έχει μετατραπεί σε rpcbind. Ωστόσο, θα συνεχίσουμε να χρησιμοποιούμε τον πιο οικείο χαρτογράφο θυρών.

    Στην πραγματικότητα, η ίδια η συσκευή επίλυσης θυρών πρέπει να έχει μια γνωστή θύρα: τη θύρα UDP 111 και τη θύρα TCP 111. Η συσκευή επίλυσης θυρών είναι απλώς ένα πρόγραμμα διακομιστή RPC. Έχει έναν αριθμό προγράμματος (100000), τον αριθμό έκδοσης (2), τη θύρα TCP 111 και τη θύρα UDP 111. Οι διακομιστές εγγράφουν ο ένας τον άλλον με το πρόγραμμα επίλυσης θυρών χρησιμοποιώντας κλήσεις RPC και οι πελάτες ζητούν το πρόγραμμα επίλυσης θυρών χρησιμοποιώντας κλήσεις RPC. Το πρόγραμμα επίλυσης θυρών παρέχει τέσσερις διαδικασίες διακομιστή:

    1. PMAPPROC_SET. Καλείται από τον διακομιστή RPC κατά την εκκίνηση για να καταχωρήσει τον αριθμό προγράμματος, τον αριθμό έκδοσης και το πρωτόκολλο με το πρόγραμμα επίλυσης θυρών.
    2. PMAPPROC_UNSET. Κλήση από τον διακομιστή για κατάργηση ενός προηγουμένως καταχωρημένου μετασχηματισμού.
    3. PMAPPROC_GETPORT. Καλείται από τον πελάτη RPC κατά την εκκίνηση για να αποκτήσει τον αριθμό θύρας για τον συγκεκριμένο αριθμό προγράμματος, τον αριθμό έκδοσης και το πρωτόκολλο.
    4. PMAPPROC_DUMP. Επιστρέφει όλα τα στοιχεία (αριθμός προγράμματος, αριθμός έκδοσης, πρωτόκολλο και αριθμός θύρας) στη βάση δεδομένων του προγράμματος επίλυσης θυρών.

    Όταν ξεκινά το πρόγραμμα διακομιστή RPC και αργότερα όταν καλείται από το πρόγραμμα-πελάτη RPC, εμφανίζονται τα ακόλουθα βήματα.

    1. Ο μετατροπέας θύρας πρέπει να ξεκινά πρώτα, συνήθως όταν εκκινείται το σύστημα. Αυτό δημιουργεί ένα τελικό σημείο TCP και ανοίγει παθητικά τη θύρα TCP 111. Δημιουργεί επίσης ένα τελικό σημείο UDP που περιμένει να φτάσει ένα datagram UDP στη θύρα UDP 111.
    2. Όταν ξεκινά το πρόγραμμα διακομιστή RPC, δημιουργεί ένα τελικό σημείο TCP και ένα τελικό σημείο UDP για κάθε υποστηριζόμενη έκδοση του προγράμματος. (Ένα πρόγραμμα RPC μπορεί να υποστηρίξει πολλές εκδόσεις. Ο πελάτης καθορίζει την απαιτούμενη έκδοση κατά την κλήση της διαδικασίας διακομιστή.) Ένας δυναμικά εκχωρημένος αριθμός θύρας εκχωρείται σε κάθε τελικό σημείο. (Δεν έχει σημασία αν οι αριθμοί θύρας TCP και UDP είναι ίδιοι ή διαφορετικοί.) Ο διακομιστής καταχωρεί κάθε πρόγραμμα, έκδοση, πρωτόκολλο και αριθμό θύρας πραγματοποιώντας μια απομακρυσμένη κλήση στη διαδικασία επίλυσης θυρών PMAPPROC_SET.
    3. Όταν ξεκινά το πρόγραμμα πελάτη RPC, καλεί τη διαδικασία επίλυσης θυρών PMAPPROC_GETPORT για να αποκτήσει τον δυναμικά εκχωρημένο αριθμό θύρας για το καθορισμένο πρόγραμμα, έκδοση και πρωτόκολλο.
    4. Ο υπολογιστής-πελάτης στέλνει ένα μήνυμα πρόκλησης RPC στον αριθμό θύρας που λαμβάνεται στο βήμα 3. Εάν χρησιμοποιείται UDP, ο πελάτης στέλνει απλώς ένα datagram UDP που περιέχει το μήνυμα πρόκλησης RPC (Εικόνα 29.1) στον αριθμό θύρας UDP του διακομιστή. Σε απόκριση, ο διακομιστής στέλνει ένα datagram UDP που περιέχει ένα μήνυμα απόκρισης RPC (Εικόνα 29.2). Εάν χρησιμοποιείται TCP, ο πελάτης κάνει ένα ενεργό άνοιγμα στον αριθμό θύρας TCP του διακομιστή και στη συνέχεια στέλνει ένα μήνυμα πρόκλησης RPC μέσω της σύνδεσης. Ο διακομιστής απαντά με ένα μήνυμα απόκρισης RPC στη σύνδεση.

    Το πρόγραμμα rpcinfo(8) εκτυπώνει όλες τις τρέχουσες ρυθμίσεις χαρτογράφησης θυρών. (Εδώ ονομάζεται η ρουτίνα χαρτογράφησης θυρών PMAPPROC_DUMP.) Η τυπική έξοδος φαίνεται παρακάτω:

    % ήλιος /usr/etc/rpcinfo -σελ
    πρόγραμμα έναντι θύρας proto
    100005 1 tcp 702 mountd NFS mount daemon
    100005 1 udp 699 τοποθέτηση
    100005 2 tcp 702 μονταρισμένο
    100005 2 udp 699 τοποθέτηση

    100003 2 udp 2049 nfs το ίδιο το NFS

    100021 1 tcp 709 nlockmgr Διαχείριση κλειδαριών NFS
    100021 1 udp 1036 nlockmgr
    100021 2 tcp 721 nlockmgr
    100021 2 udp 1039 nlockmgr
    100021 3 tcp 713 nlockmgr
    100021 3 udp 1037 nlockmgr

    Βλέπουμε ότι ορισμένα προγράμματα υποστηρίζουν πολλαπλές εκδόσεις και κάθε συνδυασμός αριθμού προγράμματος, αριθμού έκδοσης και πρωτοκόλλου έχει τη δική του διάταξη αριθμού θύρας, που εξυπηρετείται από ένα πρόγραμμα επίλυσης θυρών.

    Είναι δυνατή η πρόσβαση και στις δύο εκδόσεις του δαίμονα τοποθέτησης μέσω του ίδιου αριθμού θύρας TCP (702) και του ίδιου αριθμού θύρας UDP (699), ωστόσο κάθε έκδοση του διαχειριστή αποκλεισμού έχει τον δικό της αριθμό θύρας.

    Πρωτόκολλο NFS

    Το NFS παρέχει στους πελάτες διαφανή πρόσβαση στα αρχεία και το σύστημα αρχείων του διακομιστή. Αυτό είναι διαφορετικό από το FTP (Κεφάλαιο 27), το οποίο παρέχει μεταφορά αρχείων. Χρησιμοποιώντας FTP, πραγματοποιείται ένα πλήρες αντίγραφο ενός αρχείου. Το NFS έχει πρόσβαση μόνο σε εκείνα τα μέρη ενός αρχείου στα οποία έχει πρόσβαση μια διεργασία και το κύριο πλεονέκτημα του NFS είναι ότι κάνει αυτή την πρόσβαση διαφανή. Αυτό σημαίνει ότι κάθε εφαρμογή πελάτη που μπορεί να λειτουργήσει με ένα τοπικό αρχείο μπορεί εξίσου εύκολα να λειτουργήσει με ένα αρχείο NFS, χωρίς καμία τροποποίηση στο ίδιο το πρόγραμμα.

    Το NFS είναι μια εφαρμογή πελάτη-διακομιστή που έχει δημιουργηθεί με χρήση Sun RPC. Οι πελάτες NFS έχουν πρόσβαση σε αρχεία σε έναν διακομιστή NFS στέλνοντας αιτήματα RPC στον διακομιστή. Αυτό μπορεί να υλοποιηθεί χρησιμοποιώντας κανονικές διεργασίες χρήστη - δηλαδή, ο πελάτης NFS μπορεί να είναι μια διαδικασία χρήστη που πραγματοποιεί συγκεκριμένες κλήσεις RPC στον διακομιστή, που μπορεί επίσης να είναι μια διαδικασία χρήστη. Ωστόσο, το NFS συνήθως υλοποιείται διαφορετικά για δύο λόγους. Πρώτον, η πρόσβαση στα αρχεία NFS πρέπει να είναι διαφανής στον πελάτη. Επομένως, οι κλήσεις πελατών NFS πραγματοποιούνται από το λειτουργικό σύστημα πελάτη για λογαριασμό της διαδικασίας χρήστη του πελάτη. Δεύτερον, οι διακομιστές NFS υλοποιούνται εντός του λειτουργικού συστήματος για τη βελτίωση της αποτελεσματικότητας του διακομιστή. Εάν ο διακομιστής NFS ήταν μια διαδικασία χρήστη, κάθε αίτημα πελάτη και απόκριση διακομιστή (συμπεριλαμβανομένων των δεδομένων προς ανάγνωση ή εγγραφή) θα έπρεπε να περάσει από ένα διαχωριστικό μεταξύ του πυρήνα και της διαδικασίας χρήστη, το οποίο είναι γενικά αρκετά ακριβό.

    Σε αυτήν την ενότητα, θα εξετάσουμε την έκδοση 2 του NFS όπως τεκμηριώνεται στο RFC 1094 [Sun Microsystems 1988b]. Η καλύτερη περιγραφή των Sun RPC, XDR και NFS δίνεται στο [X/Open 1991]. Λεπτομέρειες για τη χρήση και τη χορήγηση του NFS δίνονται στο [Stern 1991]. Οι προδιαγραφές του πρωτοκόλλου NFS έκδοση 3 εφαρμόστηκαν το 1993, τις οποίες θα συζητήσουμε σε μια ενότητα αυτού του κεφαλαίου.

    Το σχήμα 29.3 δείχνει τυπικές ρυθμίσεις πελάτη NFS και διακομιστή NFS. Σε αυτό το σχήμα, πρέπει να δώσετε προσοχή στα ακόλουθα.

    1. Ο υπολογιστής-πελάτης δεν ενδιαφέρεται αν έχει πρόσβαση σε ένα τοπικό αρχείο ή σε ένα αρχείο NFS. Ο πυρήνας το εντοπίζει όταν το αρχείο είναι ανοιχτό. Μετά το άνοιγμα του αρχείου, ο πυρήνας μεταβιβάζει όλη την πρόσβαση σε τοπικά αρχεία στο πλαίσιο με την ένδειξη "τοπική πρόσβαση αρχείων" και όλοι οι σύνδεσμοι προς αρχεία NFS μεταβιβάζονται στο πλαίσιο "Πελάτης NFS".
    2. Ο πελάτης NFS στέλνει αιτήματα RPC στον διακομιστή NFS μέσω της μονάδας TCP/IP. Το NFS χρησιμοποιεί συνήθως UDP, ωστόσο νεότερες υλοποιήσεις μπορεί να χρησιμοποιούν TCP.
    3. Ο διακομιστής NFS λαμβάνει αιτήματα από τον υπολογιστή-πελάτη ως γραφήματα δεδομένων UDP στη θύρα 2049. Παρόλο που το NFS μπορεί να λειτουργήσει με ένα πρόγραμμα επίλυσης θυρών, το οποίο επιτρέπει στον διακομιστή να χρησιμοποιεί δυναμικά εκχωρημένες θύρες, η θύρα UDP 2049 κωδικοποιείται σκληρά στο NFS στις περισσότερες υλοποιήσεις.

    Εικόνα 29.3 Τυπικές ρυθμίσεις πελάτη NFS και διακομιστή NFS.

  • Όταν ο διακομιστής NFS λαμβάνει ένα αίτημα από έναν πελάτη, μεταβιβάζεται σε μια ρουτίνα πρόσβασης σε τοπικό αρχείο, η οποία παρέχει πρόσβαση στον τοπικό δίσκο του διακομιστή.
  • Ο διακομιστής μπορεί να χρειαστεί χρόνο για να επεξεργαστεί αιτήματα πελατών. Ακόμη και η πρόσβαση στο τοπικό σύστημα αρχείων μπορεί να πάρει κάποιο χρόνο. Κατά τη διάρκεια αυτής της περιόδου, ο διακομιστής δεν θέλει να αποκλείσει αιτήματα από άλλους πελάτες που πρέπει επίσης να εξυπηρετηθούν. Για να αντιμετωπίσετε αυτήν την κατάσταση, οι περισσότεροι διακομιστές NFS ξεκινούν πολλές φορές, πράγμα που σημαίνει ότι υπάρχουν πολλοί διακομιστές NFS μέσα στον πυρήνα. Οι συγκεκριμένες μέθοδοι λύσης εξαρτώνται από το λειτουργικό σύστημα. Οι περισσότεροι πυρήνες Unix δεν «ζουν» πολλαπλούς διακομιστές NFS, αλλά αντίθετα ξεκινούν πολλαπλές διεργασίες χρήστη (συνήθως ονομάζονται nfsd) που πραγματοποιούν μία κλήση συστήματος και παραμένουν μέσα στον πυρήνα ως διεργασία πυρήνα.
  • Ομοίως, ένας πελάτης NFS χρειάζεται χρόνο για να επεξεργαστεί ένα αίτημα από μια διεργασία χρήστη στον κεντρικό υπολογιστή πελάτη. Το RPC εκδίδεται στον κεντρικό υπολογιστή διακομιστή, μετά από το οποίο αναμένεται απόκριση. Για να διασφαλιστεί ότι οι διεργασίες χρήστη στον κεντρικό υπολογιστή-πελάτη μπορούν να εκμεταλλευτούν το NFS ανά πάσα στιγμή, υπάρχουν αρκετοί πελάτες NFS που εκτελούνται μέσα στον πυρήνα του πελάτη. Η συγκεκριμένη υλοποίηση εξαρτάται και από το λειτουργικό σύστημα. Τα συστήματα Unix χρησιμοποιούν συνήθως μια τεχνική που θυμίζει διακομιστή NFS: μια διεργασία χρήστη που ονομάζεται biod πραγματοποιεί μια κλήση συστήματος και παραμένει μέσα στον πυρήνα ως διεργασία πυρήνα.
  • Οι περισσότεροι κεντρικοί υπολογιστές Unix μπορούν να λειτουργήσουν ως πελάτης NFS και διακομιστής NFS ή και τα δύο ταυτόχρονα. Οι περισσότερες υλοποιήσεις PC (MS-DOS) έχουν μόνο υλοποιήσεις πελάτη NFS. Οι περισσότεροι μεγάλοι υπολογιστές IBM παρέχουν μόνο λειτουργικότητα διακομιστή NFS.

    Το NFS είναι στην πραγματικότητα κάτι περισσότερο από το πρωτόκολλο NFS. Το σχήμα 29.4 δείχνει τα διάφορα προγράμματα RPC που χρησιμοποιούνται με το NFS.

    Εφαρμογή

    Αριθμός προγράμματος

    Αριθμός έκδοσης

    Αριθμός διαδικασιών

    μετατροπέας θυρών
    NFS
    πρόγραμμα προσάρτησης
    διαχειριστής αποκλεισμού
    παρακολούθηση κατάστασης

    Εικόνα 29.4 Διάφορα προγράμματα RPC που χρησιμοποιούνται στο NFS.

    Οι εκδόσεις που δείξαμε σε αυτό το σχήμα ως μονάδες βρίσκονται σε συστήματα όπως το SunOS 4.1.3. Οι νέες υλοποιήσεις παρέχουν νεότερες εκδόσεις ορισμένων προγραμμάτων. Το Solaris 2.2, για παράδειγμα, υποστηρίζει επίσης τις εκδόσεις 3 και 4 του προγράμματος ανάλυσης θυρών και την έκδοση 2 του mount daemon. Το SVR4 υποστηρίζει επίσης την έκδοση 3 του μετατροπέα θύρας.

    Ο δαίμονας προσάρτησης καλείται στον κεντρικό υπολογιστή NFS του πελάτη προτού ο πελάτης μπορεί να έχει πρόσβαση στο σύστημα αρχείων του διακομιστή. Περιγράφουμε αυτή τη διαδικασία παρακάτω.

    Ο διαχειριστής αποκλεισμού και η παρακολούθηση κατάστασης επιτρέπουν στον πελάτη να αποκλείσει ορισμένα αρχεία που βρίσκονται στον διακομιστή NFS. Αυτά τα δύο προγράμματα είναι ανεξάρτητα από το πρωτόκολλο NFS επειδή ο αποκλεισμός απαιτεί έλεγχο ταυτότητας πελάτη τόσο στον κεντρικό υπολογιστή πελάτη όσο και στον διακομιστή και το ίδιο το NFS είναι "ουδέτερο". (Θα μιλήσουμε για την αδιαφορία του NFS με περισσότερες λεπτομέρειες παρακάτω.) Τα κεφάλαια 9, 10 και 11 [X/Open 1991] καταγράφουν τις διαδικασίες που χρησιμοποιούνται από τον διαχειριστή κλειδώματος και την παρακολούθηση κατάστασης για το κλείδωμα στο NFS.

    Περιγραφείς αρχείων

    Ένα από τα θεμελιώδη στοιχεία του NFS υλοποιείται από περιγραφείς αρχείων. Για την πρόσβαση σε ένα αρχείο ή κατάλογο στον διακομιστή αντικειμένων, χρησιμοποιείται το αδιαφανές. Ο όρος αδιαφανές σημαίνει ότι ο διακομιστής δημιουργεί μια λαβή αρχείου, την επιστρέφει στον πελάτη, τον οποίο χρησιμοποιεί στη συνέχεια όταν έχει πρόσβαση στο αρχείο. Ο πελάτης δεν κοιτάζει ποτέ τα περιεχόμενα του περιγραφέα αρχείου - τα περιεχόμενά του ενδιαφέρουν μόνο τον διακομιστή.

    Ο πελάτης NFS λαμβάνει μια λαβή αρχείου κάθε φορά που ανοίγει ένα αρχείο που βρίσκεται στην πραγματικότητα στον διακομιστή NFS. Όταν ένας πελάτης NFS διαβάζει ή γράφει σε αυτό το αρχείο (εκ μέρους μιας διεργασίας χρήστη), μια λαβή στο αρχείο επιστρέφεται στον διακομιστή. Αυτό υποδηλώνει ότι έχει γίνει πρόσβαση στο αρχείο.

    Συνήθως η διαδικασία χρήστη δεν λειτουργεί με περιγραφείς αρχείων. Οι περιγραφείς αρχείων ανταλλάσσονται μεταξύ του πελάτη NFS και του διακομιστή NFS. Στην έκδοση 2 του NFS, ο περιγραφέας αρχείου είναι 32 byte και στην έκδοση 3 έχει αυξηθεί στα 64 byte.

    Οι διακομιστές Unix συνήθως αποθηκεύουν τις ακόλουθες πληροφορίες στον περιγραφικό αρχείου: αναγνωριστικό συστήματος αρχείων (κύριοι και δευτερεύοντες αριθμοί συσκευών συστήματος αρχείων), αριθμός inode (i-node) (ένας μοναδικός αριθμός εντός του συστήματος αρχείων), αριθμός δημιουργίας inode (ένας αριθμός που αλλάζει κάθε φορά που το inode επαναχρησιμοποιείται για άλλο αρχείο).

    Πρωτόκολλο προσάρτησης

    Ο πελάτης χρησιμοποιεί το πρωτόκολλο προσάρτησης NFS για να προσαρτήσει το σύστημα αρχείων του διακομιστή πριν αποκτήσει πρόσβαση στα αρχεία NFS. Αυτό συμβαίνει συνήθως όταν ο πελάτης φορτώνει. Ως αποτέλεσμα, ο πελάτης λαμβάνει μια λαβή αρχείου στο σύστημα αρχείων του διακομιστή.

    Το σχήμα 29.5 περιγράφει την ακολουθία ενεργειών ενός πελάτη Unix κατά την εκτέλεση της εντολής mount(8).

    Εικόνα 29.5 Πρωτόκολλο τοποθέτησης που χρησιμοποιείται από την εντολή Unix mount.

    Σε αυτή την περίπτωση, εκτελούνται τα ακόλουθα βήματα.

    1. Όταν ο διακομιστής εκκινεί, ο μετατροπέας θύρας ξεκινά σε αυτόν.
    2. Μετά το πρόγραμμα επίλυσης θυρών, ο δαίμονας προσάρτησης (mountd) ξεκινά στον διακομιστή. Δημιουργεί ένα τελικό σημείο TCP και ένα τελικό σημείο UDP και εκχωρεί σε καθένα έναν δυναμικά εκχωρημένο αριθμό θύρας. Στη συνέχεια, καταχωρεί αυτούς τους αριθμούς στον αντιστοιχιστή θυρών.
    3. Ο υπολογιστής-πελάτης εκτελεί την εντολή προσάρτησης, η οποία εκδίδει μια κλήση RPC στο πρόγραμμα επίλυσης θυρών του διακομιστή για να αποκτήσει έναν αριθμό θύρας από τον δαίμονα προσάρτησης στον διακομιστή. Τόσο το TCP όσο και το UDP μπορούν να χρησιμοποιηθούν για επικοινωνία μεταξύ του προγράμματος-πελάτη και του προγράμματος ανάλυσης θυρών, αλλά συνήθως χρησιμοποιείται το UDP.
    4. Το πρόγραμμα επίλυσης θυρών αναφέρει τον αριθμό θύρας.
    5. Η εντολή mount εκδίδει μια κλήση RPC στον δαίμονα προσάρτησης για να προσαρτήσει το σύστημα αρχείων του διακομιστή. Και πάλι, μπορεί να χρησιμοποιηθεί είτε TCP είτε UDP, ωστόσο συνήθως χρησιμοποιείται UDP. Ο διακομιστής μπορεί τώρα να επικυρώσει έναν πελάτη με βάση τη διεύθυνση IP και τον αριθμό θύρας του για να δει εάν ο πελάτης μπορεί να προσαρτήσει το καθορισμένο σύστημα αρχείων.
    6. Ο δαίμονας προσάρτησης αποκρίνεται με μια λαβή αρχείου στο καθορισμένο σύστημα αρχείων.
    7. Η εντολή mount του πελάτη εκδίδει την κλήση συστήματος προσάρτησης για να συσχετίσει τη λαβή αρχείου που ελήφθη στο βήμα 5 με το τοπικό σημείο προσάρτησης στον κεντρικό υπολογιστή του πελάτη. Η λαβή αρχείου αποθηκεύεται στον κώδικα NFS του πελάτη και από τώρα και στο εξής οποιαδήποτε πρόσβαση από τις διεργασίες χρήστη σε αρχεία στο σύστημα αρχείων του διακομιστή θα χρησιμοποιεί τη λαβή αρχείων ως σημείο εκκίνησης.

    Αυτή η υλοποίηση αφήνει ολόκληρη τη διαδικασία προσάρτησης, εκτός από την κλήση συστήματος προσάρτησης στον πελάτη, στις διεργασίες του χρήστη και όχι στον πυρήνα. Τα τρία προγράμματα που δείξαμε - η εντολή mount, το port solver και το mount daemon - είναι διεργασίες χρήστη.

    Σε αυτό το παράδειγμα, στον κεντρικό υπολογιστή (πελάτη NFS), εκτελέστηκε η εντολή

    ήλιος # mount -t nfs bsdi:/usr /nfs/bsdi/usr

    Αυτή η εντολή προσαρτά τον κατάλογο /usr στον κεντρικό υπολογιστή bsdi (διακομιστής NFS) ως το τοπικό σύστημα αρχείων /nfs/bsdi/usr. Το Σχήμα 29.6 δείχνει το αποτέλεσμα.

    Εικόνα 29.6 Προσάρτηση του καταλόγου bsdi:/usr ως /nfs/bsdi/usr στον κεντρικό ήλιο.

    Μετά από αυτό, κατά την πρόσβαση στο αρχείο /nfs/bsdi/usr/rstevens/hello.c στον υπολογιστή-πελάτη Sun, γίνεται πρόσβαση στο αρχείο /usr/rstevens/hello.c στον διακομιστή bsdi.

    Διαδικασίες NFS

    Ο διακομιστής NFS παρέχει 15 διαδικασίες, τις οποίες θα περιγράψουμε τώρα. (Οι αριθμοί που χρησιμοποιούνται σε αυτήν την περιγραφή δεν είναι οι ίδιοι με τους αριθμούς διαδικασίας NFS, καθώς τους έχουμε ομαδοποιήσει κατά λειτουργικότητα.) Αν και το NFS σχεδιάστηκε για να λειτουργεί σε λειτουργικά συστήματα, όχι μόνο σε συστήματα Unix, ορισμένες από τις διαδικασίες βασίζονται ειδικά στη λειτουργία Unix , το οποίο, με τη σειρά του, ενδέχεται να μην υποστηρίζεται από άλλα λειτουργικά συστήματα (για παράδειγμα, σκληροί σύνδεσμοι, συμβολικοί σύνδεσμοι, ομαδική χρήση, δικαιώματα πρόσβασης εκτέλεσης κ.λπ.). Το Κεφάλαιο 4 περιέχει περισσότερες πληροφορίες σχετικά με τα χαρακτηριστικά των συστημάτων αρχείων, μερικά από τα οποία χρησιμοποιεί το NFS.

    1. GETATTR. Επιστρέφει χαρακτηριστικά αρχείου: τύπο αρχείου (κανονικό αρχείο, κατάλογος κ.λπ.), δικαιώματα πρόσβασης, μέγεθος αρχείου, κάτοχος αρχείου, χρόνος τελευταίας πρόσβασης κ.λπ.
    2. SETATTR. Ορίζει χαρακτηριστικά αρχείου. Μόνο ένα συγκεκριμένο σύνολο χαρακτηριστικών μπορεί να οριστεί: δικαιώματα πρόσβασης, κάτοχος, ιδιοκτησία ομάδας, μέγεθος, χρόνος τελευταίας πρόσβασης και χρόνος τελευταίας τροποποίησης.
    3. STATFS. Επιστρέφει την κατάσταση του συστήματος αρχείων: ποσότητα ελεύθερου χώρου, βέλτιστο μέγεθος για μεταφορά και ούτω καθεξής. Χρησιμοποιείται, για παράδειγμα, από την εντολή Unix df.
    4. ΨΑΧΝΩ. "Αξιολογεί" το αρχείο. Αυτή η διαδικασία καλείται από τον πελάτη κάθε φορά που μια διεργασία χρήστη ανοίγει ένα αρχείο που βρίσκεται στον διακομιστή NFS. Επιστρέφεται μια λαβή αρχείου, μαζί με τα χαρακτηριστικά του αρχείου.
    5. ΑΝΑΓΝΩΣΗ. Διαβάζει από ένα αρχείο. Ο πελάτης καθορίζει μια λαβή αρχείου, μια αρχική μετατόπιση byte και τον μέγιστο αριθμό byte προς ανάγνωση (έως 8192).
    6. ΓΡΑΦΩ. Γράφει σε ένα αρχείο. Ο υπολογιστής-πελάτης καθορίζει τη λαβή του αρχείου, την αρχική μετατόπιση σε byte, τον αριθμό των byte προς εγγραφή και τα δεδομένα που θα γραφούν.

      Οι εγγραφές NFS πρέπει να είναι σύγχρονες (με αναμονή). Ο διακομιστής δεν μπορεί να απαντήσει ΟΚ έως ότου τα δεδομένα εγγραφούν με επιτυχία (και οποιαδήποτε άλλη πληροφορία αρχείου που χρειάζεται να ενημερωθεί) στο δίσκο.

    7. ΔΗΜΙΟΥΡΓΩ. Δημιουργεί ένα αρχείο.
    8. ΑΦΑΙΡΩ. Διαγράφει ένα αρχείο.
    9. ΜΕΤΟΝΟΜΑΖΩ. Μετονομάζει το αρχείο.
    10. ΣΥΝΔΕΣΜΟΣ. Δημιουργεί μια σκληρή σύνδεση με το αρχείο. Ένας σκληρός σύνδεσμος είναι μια έννοια Unix που προσδιορίζει ότι ένα δεδομένο αρχείο στο δίσκο μπορεί να έχει οποιοδήποτε αριθμό σημείων εισόδου (ονόματα, που ονομάζονται επίσης σκληροί σύνδεσμοι) που οδηγούν σε αυτό το αρχείο.
    11. SYMLINK. Δημιουργεί έναν συμβολικό σύνδεσμο προς ένα αρχείο. Ένας συμβολικός σύνδεσμος είναι ένα αρχείο που περιέχει το όνομα ενός άλλου αρχείου. Οι περισσότερες λειτουργίες που εκτελούνται σε έναν συμβολικό σύνδεσμο (για παράδειγμα, άνοιγμα) εκτελούνται στην πραγματικότητα στο αρχείο στο οποίο οδηγεί ο συμβολικός σύνδεσμος.
    12. ΔΙΑΒΑΣΤΕ ΣΥΝΔΕΣΜΟ. Η ανάγνωση ενός συμβολικού συνδέσμου επιστρέφει το όνομα του αρχείου στο οποίο επισημαίνεται ο συμβολικός σύνδεσμος.
    13. MKDIR. Δημιουργεί έναν κατάλογο.
    14. RMDIR. Διαγράφει έναν κατάλογο.
    15. READDIR. Διαβάζει τον κατάλογο. Χρησιμοποιείται, για παράδειγμα, από την εντολή Unix ls.

    Στην πραγματικότητα, τα ονόματα διαδικασιών που εμφανίζονται ξεκινούν με το πρόθεμα NFSPROC_, το οποίο έχουμε παραλείψει.

    UDP ή TCP;

    Το NFS γράφτηκε αρχικά για να χρησιμοποιεί UDP και όλοι οι προμηθευτές παρέχουν αυτή τη δυνατότητα. Ωστόσο, νεότερες υλοποιήσεις υποστηρίζουν επίσης το TCP. Η υποστήριξη TCP χρησιμοποιείται για τη λειτουργία σε παγκόσμια δίκτυα, τα οποία γίνονται πιο γρήγορα. Επομένως, η χρήση του NFS δεν περιορίζεται πλέον στα τοπικά δίκτυα.

    Τα όρια μεταξύ τοπικών και παγκόσμιων δικτύων θολώνουν και όλα αυτά συμβαίνουν πολύ γρήγορα. Οι χρόνοι επιστροφής ποικίλλουν σε πολύ μεγάλο εύρος και η υπερχείλιση εμφανίζεται όλο και πιο συχνά. Αυτά τα χαρακτηριστικά των παγκόσμιων δικτύων οδηγούν στο γεγονός ότι χρησιμοποιούν όλο και περισσότερο τους αλγόριθμους που εξετάσαμε για το TCP - αργή εκκίνηση και αποφυγή συμφόρησης. Εφόσον το UDP δεν παρέχει τίποτα παρόμοιο με αυτούς τους αλγόριθμους, αυτοί ή παρόμοιοι πρέπει να είναι ενσωματωμένοι στον πελάτη και διακομιστή NFS, διαφορετικά πρέπει να χρησιμοποιηθεί το TCP.

    NFS μέσω TCP

    Η υλοποίηση του Berkeley Net/2 NFS υποστηρίζει τόσο το UDP όσο και το TCP. [Macklem 1991] περιγράφει αυτήν την υλοποίηση. Ας δούμε πώς διαφέρει η χρήση του NFS κατά την εκτέλεση μέσω TCP.

    1. Όταν ο διακομιστής εκκινεί, ξεκινά τον διακομιστή NFS, ο οποίος ανοίγει ενεργά στη θύρα TCP 2049, περιμένοντας να φτάσει ένα αίτημα σύνδεσης από τον πελάτη. Αυτό γίνεται συνήθως επιπλέον του κανονικού NFS UDP, το οποίο ακούει τα εισερχόμενα datagrams στη θύρα UDP 2049.
    2. Όταν ένας πελάτης προσαρτά το σύστημα αρχείων ενός διακομιστή χρησιμοποιώντας TCP, ανοίγει ενεργά στη θύρα TCP 2049 στο διακομιστή. Αυτό δημιουργεί μια σύνδεση TCP μεταξύ του πελάτη και του διακομιστή για αυτό το σύστημα αρχείων. Εάν ο ίδιος πελάτης προσαρτήσει άλλο σύστημα αρχείων στον ίδιο διακομιστή, δημιουργείται μια άλλη σύνδεση TCP.
    3. Τόσο ο πελάτης όσο και ο διακομιστής ορίζουν την επιλογή TCP "stay alive" στα άκρα της σύνδεσης (Κεφάλαιο 23). Αυτό σας επιτρέπει να προσδιορίσετε τη στιγμή αποτυχίας ή επανεκκίνησης ενός ή άλλου συμμετέχοντος ανταλλαγής.
    4. Όλες οι εφαρμογές στον υπολογιστή-πελάτη που χρησιμοποιούν το σύστημα αρχείων του διακομιστή μοιράζονται την ίδια σύνδεση TCP με αυτό το σύστημα αρχείων. Για παράδειγμα, αν υπήρχε στο Σχήμα 29.6, θα υπήρχε ένας άλλος κατάλογος στο bsdi, ονόματι smith, κάτω από τον κατάλογο /usr, οι προσβάσεις στα αρχεία στο /nfs/bsdi/usr/rstevens και το /nfs/bsdi/usr/smith θα μοιράζονταν το ίδιο πράγμα ίδια σύνδεση TCP.
    5. Εάν ο υπολογιστής-πελάτης διαπιστώσει ότι ο διακομιστής έχει καταρρεύσει ή επανεκκινηθεί (αφού λάβει ένα σφάλμα TCP "η σύνδεση έληξε" ή "η σύνδεση έκλεισε από τον κεντρικό υπολογιστή"), επιχειρεί να επανασυνδεθεί στον διακομιστή. Ο πελάτης εκτελεί ένα άλλο ενεργό άνοιγμα για να αποκαταστήσει τη σύνδεση TCP για αυτό το σύστημα αρχείων. Οποιοδήποτε αίτημα από έναν πελάτη που έληξε σε προηγούμενη σύνδεση επανεκδίδεται σε νέα σύνδεση.
    6. Εάν ένας πελάτης αποτύχει, το ίδιο κάνουν και οι εφαρμογές που εκτελούνταν πριν από την αποτυχία. Όταν ο υπολογιστής-πελάτης κάνει επανεκκίνηση, μπορεί να επανατοποθετήσει το σύστημα αρχείων του διακομιστή χρησιμοποιώντας TCP, χρησιμοποιώντας διαφορετική σύνδεση TCP με τον διακομιστή. Η προηγούμενη σύνδεση μεταξύ του πελάτη και του διακομιστή για αυτό το σύστημα αρχείων είναι σε μισάνοιχτη κατάσταση (ο διακομιστής πιστεύει ότι είναι ακόμα ανοιχτή), ωστόσο, εφόσον ο διακομιστής έχει ορίσει την επιλογή "stay alive", αυτή η μισάνοιχτη σύνδεση θα είναι έκλεισε όταν ο διακομιστής TCP στείλει το επόμενο probe."

    Με την πάροδο του χρόνου, άλλοι προμηθευτές σχεδιάζουν να υποστηρίξουν το NFS μέσω TCP.

    Παραδείγματα NFS

    Ας χρησιμοποιήσουμε το tcpdump για να δούμε ποιες ρουτίνες NFS καλούνται από τον πελάτη για κανονικές λειτουργίες αρχείων. Όταν το tcpdump καθορίζει ότι ένα datagram UDP περιέχει μια κλήση RPC (η κλήση είναι 0 στο Σχήμα 29.1) με τη θύρα προορισμού 2049, αποκωδικοποιεί το datagram ως αίτημα NFS. Ομοίως, εάν ένα datagram UDP περιέχει μια απόκριση RPC (η απάντηση είναι 1 στο Σχήμα 29.2) με θύρα πηγής 2049, αποκωδικοποιεί το datagram ως απόκριση NFS.

    Απλό παράδειγμα: ανάγνωση ενός αρχείου

    Στο πρώτο παράδειγμα, θα αντιγράψουμε ένα αρχείο που βρίσκεται στον διακομιστή NFS στο τερματικό χρησιμοποιώντας την εντολή cat(1):

    % ήλιος cat /nfs/bsdi/usr/rstevens/hello.cαντιγραφή ενός αρχείου στο τερματικό
    κύριος()
    {
    printf("γεια, κόσμος\n");
    }

    Το σύστημα αρχείων /nfs/bsdi/usr στον κεντρικό υπολογιστή Sun (πελάτης NFS) είναι στην πραγματικότητα το σύστημα αρχείων /usr στον κεντρικό υπολογιστή bsdi (διακομιστής NFS), όπως φαίνεται στην Εικόνα 29.6. Ο πυρήνας του ήλιου το εντοπίζει όταν η γάτα ανοίγει ένα αρχείο και χρησιμοποιεί το NFS για πρόσβαση στο αρχείο. Το σχήμα 29.7 δείχνει την έξοδο της εντολής tcpdump.

    1 0,0 sun.7aa6 > bsdi.nfs: 104 getattr
    2 0,003587 (0,0036) bsdi.nfs > sun.7aa6: απάντηση εντάξει 96

    3 0.005390 (0.0018) sun.7aa7 > bsdi.nfs: 116 αναζήτηση "rstevens"
    4 0.009570 (0.0042) bsdi.nfs > sun.7aa7: απάντηση εντάξει 128

    5 0.011413 (0.0018) sun.7aa8 > bsdi.nfs: 116 αναζήτηση "hello.c"
    6 0.015512 (0.0041) bsdi.nfs > sun.7aa8: απάντηση εντάξει 128

    7 0.018843 (0.0033) κυρ.7aa9 > bsdi.nfs: 104 getattr
    8 0.022377 (0.0035) bsdi.nfs > sun.7aa9: απάντηση εντάξει 96

    9 0,027621 (0,0052) ήλιος.7aaa > bsdi.nfs: 116 ανάγνωση 1024 byte @ 0
    10 0.032170 (0.0045) bsdi.nfs > sun.7aaa: απάντηση εντάξει 140

    Εικόνα 29.7 Λειτουργία NFS κατά την ανάγνωση ενός αρχείου.

    Η εντολή tcpdump αποκωδικοποιεί το αίτημα ή την απόκριση NFS και εκτυπώνει επίσης το πεδίο XID για τον πελάτη αντί για τον αριθμό θύρας. Το πεδίο XID στις γραμμές 1 και 2 είναι 0x7aa6.

    Το όνομα αρχείου /nfs/bsdi/usr/rstevens/hello.c επεξεργάζεται από την ανοιχτή συνάρτηση στον πυρήνα πελάτη ένα στοιχείο ονόματος κάθε φορά. Όταν η ανοιχτή συνάρτηση φτάσει στο /nfs/bsdi/usr, προσδιορίζει ότι πρόκειται για σημείο προσάρτησης συστήματος αρχείων NFS.

    Στη γραμμή 1, ο πελάτης καλεί το GETATTR για να λάβει τα χαρακτηριστικά του καταλόγου διακομιστή που προσάρτησε ο πελάτης (/usr). Αυτό το αίτημα RPC περιέχει 104 byte δεδομένων, επιπλέον των κεφαλίδων IP και UDP. Η απάντηση στη γραμμή 2 επιστρέφει ΟΚ και περιέχει 96 byte δεδομένων, επιπλέον των κεφαλίδων IP και UDP. Μπορούμε να δούμε σε αυτό το σχήμα ότι το ελάχιστο μήνυμα NFS περιέχει περίπου 100 byte δεδομένων.

    Στη γραμμή 3, ο πελάτης καλεί το LOOKUP στο αρχείο rstevens και λαμβάνει μια απάντηση ΟΚ στη γραμμή 4. LOOKUP καθορίζει το όνομα του αρχείου rstevens και μια λαβή στο αρχείο που αποθηκεύτηκε από τον πυρήνα κατά την προσάρτηση του απομακρυσμένου συστήματος αρχείων. Η απάντηση περιέχει μια νέα λαβή αρχείου που χρησιμοποιείται στο επόμενο βήμα.

    Στη γραμμή 5, ο πελάτης αναζητά το αρχείο hello.c χρησιμοποιώντας τη λαβή αρχείου από τη γραμμή 4. Λαμβάνει μια διαφορετική λαβή αρχείου στη γραμμή 6. Αυτή η νέα λαβή αρχείου είναι ακριβώς αυτό που χρησιμοποιεί ο πελάτης στις γραμμές 7 και 9 για πρόσβαση στο αρχείο / nfs /bsdi/usr/rstevens/hello.c. Βλέπουμε ότι ο πελάτης εκτελεί μια αναζήτηση σε κάθε στοιχείο ονόματος στη διαδρομή προς το αρχείο που ανοίγει.

    Στη γραμμή 7, ο πελάτης εκτελεί ξανά το GETATTR, ακολουθούμενο από το READ στη γραμμή 9. Ο πελάτης ζητά 1024 byte ξεκινώντας από τη μετατόπιση 0, αλλά λαμβάνει λιγότερα από 1024 byte δεδομένων. (Μετά την αφαίρεση των μεγεθών των πεδίων RPC και άλλων τιμών που επιστρέφονται με τη διαδικασία READ, 38 byte δεδομένων επιστρέφονται στη γραμμή 10. Αυτό είναι ακριβώς το μέγεθος του αρχείου hello.c.)

    Σε αυτό το παράδειγμα, η διαδικασία χρήστη δεν γνωρίζει τίποτα για αυτά τα αιτήματα και τις απαντήσεις NFS που εκτελούνται από τον πυρήνα. Η εφαρμογή απλώς καλεί τη συνάρτηση ανοιχτού πυρήνα, η οποία προκαλεί την ανταλλαγή 3 αιτημάτων και 3 απαντήσεων (γραμμές 1-6) και στη συνέχεια καλεί τη συνάρτηση ανάγνωσης πυρήνα, η οποία καλεί 2 αιτήματα και 2 αποκρίσεις (γραμμές 7-10). Για την εφαρμογή πελάτη, το αρχείο που βρίσκεται στον διακομιστή NFS είναι διαφανές.

    Απλό παράδειγμα: δημιουργία καταλόγου

    Ως άλλο παράδειγμα, ας αλλάξουμε τον κατάλογο εργασίας σε έναν κατάλογο που βρίσκεται στον διακομιστή NFS και, στη συνέχεια, ας δημιουργήσουμε έναν νέο κατάλογο:

    % ήλιος cd /nfs/bsdi/usr/rstevensαλλάξτε τον κατάλογο εργασίας
    ήλιος% mkdir Mailδημιουργήστε έναν κατάλογο

    Το σχήμα 29.8 δείχνει την έξοδο της εντολής tcpdump.

    1 0,0 sun.7ad2 > bsdi.nfs: 104 getattr
    2 0.004912 (0.0049) bsdi.nfs > sun.7ad2: απάντηση εντάξει 96

    3 0.007266 (0.0024) sun.7ad3 > bsdi.nfs: 104 getattr
    4 0.010846 (0.0036) bsdi.nfs > sun.7ad3: απάντηση εντάξει 96

    5 35.769875 (35.7590) sun.7ad4 > bsdi.nfs: 104 getattr
    6 35.773432 (0.0036) bsdi.nfs > sun.7ad4: απάντηση εντάξει 96

    7 35.775236 (0.0018) sun.7ad5 > bsdi.nfs: 112 αναζήτηση "Mail"
    8 35.780914 (0.0057) bsdi.nfs > sun.7ad5: απάντηση εντάξει 28

    9 35.782339 (0.0014) sun.7ad6 > bsdi.nfs: 144 mkdir "Mail"
    10 35.992354 (0.2100) bsdi.nfs > sun.7ad6: απάντηση εντάξει 128

    Εικόνα 29.8 Λειτουργία NFS κατά την αλλαγή καταλόγου (cd) σε κατάλογο NFS και στη συνέχεια δημιουργία καταλόγου (mkdir).

    Κατά την αλλαγή καταλόγου, ο πελάτης καλεί το GETATTR δύο φορές (γραμμές 1-4). Όταν δημιουργούμε έναν νέο κατάλογο, ο πελάτης καλεί το GETATTR (γραμμές 5 και 6), μετά το LOOKUP (γραμμές 7 και 8 για να ελέγξει ότι ο κατάλογος δεν υπάρχει) και μετά το MKDIR για να δημιουργήσει τον κατάλογο (γραμμές 9 και 10). Η απάντηση ΟΚ στη γραμμή 8 δεν σημαίνει ότι υπάρχει ο κατάλογος. Σημαίνει απλώς ότι η διαδικασία επέστρεψε κάποια τιμή. Το tcpdump δεν ερμηνεύει την τιμή που επιστρέφεται από τις διαδικασίες NFS. Η εντολή απλώς εκτυπώνει OK και τον αριθμό των byte δεδομένων στην απόκριση.

    Αδιαφορία

    Ένα από τα χαρακτηριστικά του NFS (οι επικριτές του NFS το αποκαλούν κονδυλώματα, όχι χαρακτηριστικό) είναι ότι ο διακομιστής NFS είναι αδιάφορος. Ο διακομιστής δεν ενδιαφέρεται ποιοι πελάτες έχουν πρόσβαση σε ποια αρχεία. Σημειώστε ότι η λίστα των διαδικασιών NFS που παρουσιάστηκε νωρίτερα δεν περιλαμβάνει διαδικασία ανοίγματος ή κλεισίματος. Η διαδικασία LOOKUP είναι παρόμοια με μια ανοιχτή, αλλά ο διακομιστής δεν γνωρίζει ποτέ εάν ο πελάτης έχει πρόσβαση στο αρχείο μετά την πραγματοποίηση του LOOKUP.

    Ο λόγος για αυτήν τη «συμπεριφορά μη σε νοιάζει» είναι για να διευκολυνθεί η ανάκτηση από μια αποτυχία διακομιστή μετά τη διακοπή λειτουργίας και την επανεκκίνηση.

    Παράδειγμα: αποτυχία διακομιστή

    Στο παρακάτω παράδειγμα, διαβάζουμε ένα αρχείο από έναν διακομιστή NFS όταν ο διακομιστής διακόπτεται και επανεκκινείται. Αυτό θα δείξει πώς η "αδιαφορία" του διακομιστή επιτρέπει στον πελάτη να "δεν γνωρίζει" ότι ο διακομιστής απέτυχε. Καθ' όλη τη διάρκεια της διακοπής λειτουργίας του διακομιστή και της επανεκκίνησης, ο πελάτης δεν γνωρίζει το πρόβλημα και η εφαρμογή πελάτη λειτουργεί όπως πριν.

    Στο πρόγραμμα-πελάτη Sun, εκτελέσαμε το cat με ένα πολύ μεγάλο αρχείο ως όρισμα (/usr/share/lib/termcap στον διακομιστή svr4 NFS), αποσυνδέσαμε το καλώδιο Ethernet κατά τη διάρκεια της μεταφοράς, τερματίσαμε και επανεκκινήσαμε τον διακομιστή και, στη συνέχεια, επανασυνδέσαμε το καλώδιο . Ο υπολογιστής-πελάτης έχει ρυθμιστεί ώστε να διαβάζει 1024 byte ανά ανάγνωση NFS. Το σχήμα 29.9 δείχνει την έξοδο του tcpdump.

    Οι γραμμές 1-10 αντιστοιχούν στον πελάτη που ανοίγει το αρχείο. Αυτή η λειτουργία είναι παρόμοια με αυτή που φαίνεται στο Σχήμα 29.7. Στη γραμμή 11 βλέπουμε την πρώτη ανάγνωση (READ) από το αρχείο των 1024 byte δεδομένων. η απόκριση επέστρεψε στη γραμμή 12. Αυτό συνεχίζεται μέχρι τη γραμμή 129 (διαβάζοντας 1024 byte READ και μετά απαντώντας OK).

    Στις γραμμές 130 και 131 βλέπουμε δύο αιτήματα που λήγουν και υποβάλλονται ξανά στις γραμμές 132 και 133. Πρώτη ερώτηση: βλέπουμε δύο αιτήματα ανάγνωσης, το ένα ξεκινά από μετατόπιση 65536 και το άλλο ξεκινά από μετατόπιση 73728, γιατί; Ο πυρήνας πελάτη προσδιόρισε ότι η εφαρμογή πελάτη διάβαζε διαδοχικά και προσπάθησε να λάβει μπλοκ δεδομένων εκ των προτέρων. (Οι περισσότεροι πυρήνες Unix το κάνουν αυτό εκ των προτέρων.) Ο πυρήνας πελάτη εκτελεί επίσης αρκετούς δαίμονες εισόδου/εξόδου (I/O) μπλοκ NFS (διεργασίες biod) που προσπαθούν να δημιουργήσουν πολλαπλά αιτήματα RPC για λογαριασμό του πελάτη. Ένας δαίμονας διαβάζει 8192 byte, ξεκινώντας από 65536 (σε αλυσίδες 1024 byte) και οι άλλοι διαβάζουν 8192 byte, ξεκινώντας από 73728.

    Οι αναμεταδόσεις πελατών εμφανίζονται στις γραμμές 130-168. Στη γραμμή 169 βλέπουμε ότι ο διακομιστής έχει επανεκκινήσει και έχει στείλει ένα αίτημα ARP πριν απαντήσει στο αίτημα NFS του πελάτη στη γραμμή 168. Η απάντηση στη γραμμή 168 αποστέλλεται στη γραμμή 171. Τα αιτήματα READ του πελάτη συνεχίζονται.

    1 0,0 sun.7ade > svr4.nfs: 104 getattr
    2 0.007653 (0.0077) svr4.nfs > sun.7ade: απάντηση εντάξει 96

    3 0.009041 (0.0014) sun.7adf > svr4.nfs: 116 αναζήτηση "κοινή χρήση"
    4 0.017237 (0.0082) svr4.nfs > sun.7adf: απάντηση εντάξει 128

    5 0.018518 (0.0013) sun.7ae0 > svr4.nfs: 112 αναζήτηση "lib"
    6 0.026802 (0.0083) svr4.nfs > sun.7ae0: απάντηση εντάξει 128

    7 0.028096 (0.0013) sun.7ae1 > svr4.nfs: 116 αναζήτηση "termcap"
    8 0.036434 (0.0083) svr4.nfs > sun.7ae1: απάντηση εντάξει 128

    9 0.038060 (0.0016) sun.7ae2 > svr4.nfs: 104 getattr
    10 0.045821 (0.0078) svr4.nfs > sun.7ae2: απάντηση εντάξει 96

    11 0.050984 (0.0052) sun.7ae3 > svr4.nfs: 116 ανάγνωση 1024 byte @ 0
    12 0.084995 (0.0340) svr4.nfs > sun.7ae3: απάντηση εντάξει 1124

    ΑΝΑΓΝΩΣΗ

    128 3.430313 (0.0013) sun.7b22 > svr4.nfs: 116 ανάγνωση 1024 byte @ 64512
    129 3.441828 (0.0115) svr4.nfs > sun.7b22: απάντηση εντάξει 1124

    130 4.125031 (0.6832) κυρ.7b23 >
    131 4.868593 (0.7436) κυρ.7b24 >

    132 4.993021 (0.1244) sun.7b23 > svr4.nfs: 116 ανάγνωση 1024 byte @ 65536
    133 5.732217 (0.7392) sun.7b24 > svr4.nfs: 116 ανάγνωση 1024 byte @ 73728

    134 6.732084 (0.9999) sun.7b23 > svr4.nfs: 116 ανάγνωση 1024 byte @ 65536
    135 7.472098 (0.7400) sun.7b24 > svr4.nfs: 116 ανάγνωση 1024 byte @ 73728

    136 10.211964 (2.7399) κυρ.7b23 >
    137 10.951960 (0.7400) κυρ.7b24 >

    138 17.171767 (6.2198) sun.7b23 > svr4.nfs: 116 ανάγνωση 1024 byte @ 65536
    139 17.911762 (0.7400) sun.7b24 > svr4.nfs: 116 ανάγνωση 1024 byte @ 73728

    140 31.092136 (13.1804) sun.7b23 > svr4.nfs: 116 ανάγνωση 1024 byte @ 65536
    141 31.831432 (0.7393) sun.7b24 > svr4.nfs: 116 ανάγνωση 1024 byte @ 73728

    142 51.090854 (19.2594) sun.7b23 > svr4.nfs: 116 ανάγνωση 1024 byte @ 65536
    143 51.830939 (0.7401) sun.7b24 > svr4.nfs: 116 ανάγνωση 1024 byte @ 73728

    144 71.090305 (19.2594) sun.7b23 > svr4.nfs: 116 ανάγνωση 1024 byte @ 65536
    145 71.830155 (0.7398) sun.7b24 > svr4.nfs: 116 ανάγνωση 1024 byte @ 73728

    Αναμεταδόσεις

    167 291.824285 (0.7400) sun.7b24 > svr4.nfs: 116 ανάγνωση 1024 byte @ 73728
    168 311.083676 (19.2594) sun.7b23 > svr4.nfs: 116 ανάγνωση 1024 byte @ 65536

    Ο διακομιστής επανεκκινήθηκε

    169 311.149476 (0.0658) arp who-has sun tell svr4
    170 311.150004 (0.0005) arp απάντηση ήλιος είναι-στις 8:0:20:3:f6:42

    171 311.154852 (0.0048) svr4.nfs > sun.7b23: απάντηση εντάξει 1124

    172 311.156671 (0.0018) sun.7b25 > svr4.nfs: 116 ανάγνωση 1024 byte @ 66560
    173 311.168926 (0.0123) svr4.nfs > sun.7b25: απάντηση εντάξει 1124
    ΑΝΑΓΝΩΣΗ

    Εικόνα 29.9 Ο πελάτης διαβάζει ένα αρχείο όταν διακόπτεται η λειτουργία του διακομιστή NFS και γίνεται επανεκκίνηση.

    Η εφαρμογή-πελάτης δεν θα μάθει ποτέ ότι ο διακομιστής κατέρρευσε και έκανε επανεκκίνηση, εκτός από το ότι υπήρξε παύση 5 λεπτών μεταξύ των γραμμών 129 και 171, επομένως το σφάλμα διακομιστή είναι διαφανές στον πελάτη.

    Για να υπολογίσετε τη διάρκεια των χρονικών ορίων αναμετάδοσης σε αυτό το παράδειγμα, φανταστείτε ότι υπάρχουν δύο δαίμονες πελατών, ο καθένας με τα δικά του χρονικά όρια. Τα διαστήματα για τον πρώτο δαίμονα (ανάγνωση από τη μετατόπιση 65536) είναι περίπου ως εξής (στρογγυλοποιημένα σε δύο δεκαδικά ψηφία): 0,68; 0,87; 1.74; 3.48; 6.96; 13,92; 20,0; 20,0; 20.0 και ούτω καθεξής. Τα διαστήματα για τον δεύτερο δαίμονα (ανάγνωση από το offset 73728) είναι ακριβώς τα ίδια. Αυτό σημαίνει ότι αυτοί οι πελάτες NFS χρησιμοποιούν χρονικά όρια που είναι πολλαπλάσια των 0,875 δευτερολέπτων, με ανώτατο όριο τα 20 δευτερόλεπτα. Μετά από κάθε timeout, το διάστημα αναμετάδοσης διπλασιάζεται: 0,875; 1,75; 3.5; 7.0 και 14.0.

    Πόσος χρόνος θα χρειαστεί για να πραγματοποιήσει αναμετάδοση ο πελάτης; Ο πελάτης έχει δύο επιλογές που μπορούν να το επηρεάσουν. Πρώτον, εάν το σύστημα αρχείων του διακομιστή είναι στερεωμένο, ο πελάτης θα εκπέμπει ξανά για πάντα, αλλά εάν το σύστημα αρχείων του διακομιστή είναι soft-mounted, ο πελάτης θα σταματήσει να προσπαθεί μετά από έναν σταθερό αριθμό αναμεταδόσεων. Επίσης, στην περίπτωση σκληρής προσάρτησης, ο πελάτης έχει τη δυνατότητα να επιτρέψει στον χρήστη να ματαιώσει τις αποτυχημένες αναμεταδόσεις ή να μην ακυρώσει. Εάν, κατά την προσάρτηση του συστήματος αρχείων του διακομιστή, ο κεντρικός υπολογιστής πελάτη υποδεικνύει ότι μπορεί να διακοπεί και αν δεν θέλουμε να περιμένουμε 5 λεπτά για να επανεκκινηθεί ο διακομιστής μετά τη συντριβή, μπορούμε να εισάγουμε ένα σύμβολο διακοπής για να τερματίσουμε την εφαρμογή πελάτη.

    Αρκετές ίδιες διαδικασίες

    Οι διαδικασίες RPC μπορούν να εκτελεστούν από τον διακομιστή αρκετές φορές, αλλά εξακολουθούν να επιστρέφουν το ίδιο αποτέλεσμα. Για παράδειγμα, η διαδικασία ανάγνωσης NFS. Όπως είδαμε στο Σχήμα 29.9, ο πελάτης απλώς επανεκδίδει την κλήση READ εφόσον λαμβάνει απάντηση. Στο παράδειγμά μας, ο λόγος για την αναμετάδοση ήταν ότι ο διακομιστής ήταν εκτός λειτουργίας. Εάν ο διακομιστής δεν έχει αποτύχει και τα μηνύματα που περιέχουν αποκρίσεις RPC έχουν χαθεί (καθώς το UDP είναι ένα αναξιόπιστο πρωτόκολλο), ο πελάτης απλώς αναμεταδίδει και ο διακομιστής κάνει ξανά την ίδια ΑΝΑΓΝΩΣΗ. Το ίδιο τμήμα του ίδιου αρχείου διαβάζεται ξανά και αποστέλλεται στον πελάτη.

    Αυτό λειτουργεί επειδή κάθε αίτημα ανάγνωσης READ περιέχει μια αρχική μετατόπιση. Εάν η διαδικασία NFS ζητούσε από τον διακομιστή να διαβάσει τα επόμενα N byte του αρχείου, δεν θα λειτουργούσε. Εάν ο διακομιστής δεν ήταν αδιάφορος (αυτό είναι το αντίθετο του αδιάφορου) και η απόκριση χανόταν και ο πελάτης επανέκδοση READ για τα επόμενα N byte, το αποτέλεσμα θα ήταν διαφορετικό. Αυτός είναι ο λόγος για τον οποίο οι διαδικασίες READ και WRITE NFS έχουν μια αρχική μετατόπιση. Είναι ο πελάτης που διατηρεί την κατάσταση (την τρέχουσα μετατόπιση για κάθε αρχείο), όχι ο διακομιστής.

    Δυστυχώς, δεν μπορούν να εκτελεστούν όλες οι λειτουργίες του συστήματος αρχείων πολλές φορές. Για παράδειγμα, φανταστείτε τα ακόλουθα βήματα: ο πελάτης NFS εκδίδει ένα αίτημα REMOVE για την κατάργηση ενός αρχείου. Ο διακομιστής NFS διαγράφει το αρχείο και απαντά ΟΚ. η απάντηση διακομιστή χάθηκε. Ο πελάτης NFS λήγει και αναμεταδίδει το αίτημα. Ο διακομιστής NFS δεν μπορεί να βρει το αρχείο και επιστρέφει ένα σφάλμα. Η εφαρμογή πελάτη λαμβάνει ένα σφάλμα που δηλώνει ότι το αρχείο δεν υπάρχει. Αυτό το σφάλμα επιστρέφεται στην εφαρμογή πελάτη και αυτό το σφάλμα περιέχει εσφαλμένες πληροφορίες - το αρχείο δεν υπήρχε και διαγράφηκε.

    Ακολουθεί μια λίστα διαδικασιών NFS που μπορούν να εκτελεστούν πολλές φορές: GETATTR, STATFS, LOOKUP, READ, WRITE, READLINK και READDIR. Διαδικασίες που δεν μπορούν να εκτελεστούν πολλές φορές: CREATE, REMOVE, RENAME, LINK, SYMLINK, MKDIR και RMDIR. Το SETATTR εκτελείται συνήθως πολλές φορές, εκτός εάν χρησιμοποιήθηκε για την περικοπή ενός αρχείου.

    Επειδή είναι πάντα πιθανό να προκύψουν ορφανές αποκρίσεις κατά τη χρήση του UDP, οι διακομιστές NFS πρέπει να έχουν έναν τρόπο χειρισμού λειτουργιών που δεν μπορούν να εκτελεστούν πολλές φορές. Οι περισσότεροι διακομιστές διαθέτουν μια πρόσφατη κρυφή μνήμη απόκρισης στην οποία αποθηκεύουν τις τελευταίες ληφθείσες απαντήσεις για τέτοιες λειτουργίες. Κάθε φορά που ο διακομιστής λαμβάνει ένα αίτημα, εξετάζει πρώτα την κρυφή μνήμη του και, εάν βρεθεί μια αντιστοίχιση, επιστρέφει την προηγούμενη απάντηση αντί να καλεί ξανά τη διαδικασία NFS. [Juszczak 1989] περιγράφει τις λεπτομέρειες αυτών των τύπων κρυφής μνήμης.

    Αυτή η προσέγγιση στις διαδικασίες διακομιστή ισχύει για όλες τις εφαρμογές που βασίζονται σε UDP, όχι μόνο για το NFS. Το DNS, για παράδειγμα, παρέχει μια υπηρεσία που μπορεί να χρησιμοποιηθεί πολλές φορές χωρίς πόνο. Ο διακομιστής DNS μπορεί να ρωτήσει τον αναλυτή πολλές φορές, κάτι που δεν θα οδηγήσει σε αρνητικά αποτελέσματα (ίσως, εκτός από το ότι οι πόροι του δικτύου θα είναι κατειλημμένοι).

    NFS έκδοση 3

    Κατά τη διάρκεια του 1994, κυκλοφόρησαν οι προδιαγραφές για την έκδοση 3 του πρωτοκόλλου NFS [Sun Microsystems 1993]. Οι υλοποιήσεις αναμένεται να είναι διαθέσιμες εντός του 1994.

    Ακολουθεί μια γρήγορη περιγραφή των βασικών διαφορών μεταξύ των εκδόσεων 2 και 3. Θα τις ονομάσουμε V2 και V3.

    1. Οι περιγραφείς αρχείων στο V2 είναι ένας πίνακας σταθερού μεγέθους 32 byte. Στο V3 είναι ένας πίνακας μεταβλητού μεγέθους με μέγεθος έως 64 byte. Ένας πίνακας μεταβλητού μήκους στο XDR ορίζεται από έναν μετρητή 4 byte ακολουθούμενος από πραγματικά byte. Αυτό μειώνει το μέγεθος του περιγραφικού αρχείου σε υλοποιήσεις όπως το Unix, όπου απαιτούνται μόνο περίπου 12 byte, αλλά επιτρέπει σε εφαρμογές που δεν είναι Unix να ανταλλάσσουν πρόσθετες πληροφορίες.
    2. Το V2 περιορίζει τον αριθμό των byte ανά διαδικασία READ ή WRITE RPC σε 8192 byte. Αυτός ο περιορισμός δεν ισχύει στο V3, το οποίο με τη σειρά του σημαίνει ότι χρησιμοποιώντας το UDP το όριο θα είναι μόνο το μέγεθος του datagram IP (65535 byte). Αυτό επιτρέπει τη χρήση μεγάλων πακέτων για ανάγνωση και εγγραφή σε γρήγορα δίκτυα.
    3. Τα μεγέθη αρχείων και οι μετατοπίσεις των αρχικών byte για τις διαδικασίες READ και WRITE έχουν επεκταθεί από 32 σε 64 bit, επιτρέποντας τη διαχείριση μεγαλύτερων μεγεθών αρχείων.
    4. Τα χαρακτηριστικά αρχείου επιστρέφονται σε κάθε κλήση που μπορεί να επηρεάσει τα χαρακτηριστικά. Αυτό μειώνει τον αριθμό των κλήσεων GETATTR που απαιτούνται από τον πελάτη.
    5. Τα Writes (WRITEs) μπορούν να είναι ασύγχρονα, ενώ στο V2 υποτίθεται ότι είναι σύγχρονα. Αυτό μπορεί να βελτιώσει την απόδοση της διαδικασίας WRITE.
    6. Μία διαδικασία αφαιρέθηκε (STATFS) και προστέθηκαν επτά: ACCESS (έλεγχος αδειών αρχείου), MKNOD (δημιουργία ειδικού αρχείου Unix), READDIRPLUS (επιστρέφει τα ονόματα των αρχείων σε έναν κατάλογο μαζί με τα χαρακτηριστικά τους), FSINFO (επιστρέφει στατιστικές πληροφορίες σχετικά με το σύστημα αρχείων ), το FSSTAT (επιστρέφει πληροφορίες δυναμικού συστήματος αρχείων), το PATHCONF (επιστρέφει πληροφορίες αρχείου POSIX.1) και το COMMIT (δεσμεύει προηγουμένως ασύγχρονες εγγραφές σε μόνιμη αποθήκευση).

    Σύντομα συμπεράσματα

    Το RPC είναι ένας τρόπος δημιουργίας μιας εφαρμογής πελάτη-διακομιστή με τέτοιο τρόπο ώστε ο πελάτης απλώς να καλεί διαδικασίες στον διακομιστή. Όλες οι λεπτομέρειες δικτύου είναι κρυμμένες σε στελέχη πελάτη και διακομιστή, τα οποία δημιουργούνται για εφαρμογές από το πακέτο RPC και σε ρουτίνες βιβλιοθήκης RPC. Δείξαμε τη μορφή των μηνυμάτων κλήσης και απάντησης RPC και αναφέραμε ότι το XDR χρησιμοποιείται για την κωδικοποίηση τιμών, επιτρέποντας σε πελάτες και διακομιστές RPC να εκτελούνται σε διαφορετικές αρχιτεκτονικές μηχανών.

    Μία από τις πιο ευρέως χρησιμοποιούμενες εφαρμογές RPC είναι το Sun NFS, ένα ετερογενές πρωτόκολλο πρόσβασης αρχείων που χρησιμοποιείται ευρέως σε κεντρικούς υπολογιστές σχεδόν όλων των μεγεθών. Εξετάσαμε το NFS και πώς χρησιμοποιεί το UDP ή το TCP. Το πρωτόκολλο NFS Version 2 ορίζει 15 διαδικασίες.

    Η πρόσβαση του πελάτη σε έναν διακομιστή NFS ξεκινά με ένα πρωτόκολλο προσάρτησης, μετά το οποίο επιστρέφεται μια λαβή αρχείου στον πελάτη. Ο πελάτης μπορεί στη συνέχεια να αποκτήσει πρόσβαση σε αρχεία στο σύστημα αρχείων του διακομιστή χρησιμοποιώντας αυτόν τον χειρισμό αρχείων. Τα ονόματα αρχείων αναζητούνται στον διακομιστή ένα στοιχείο ονόματος κάθε φορά, επιστρέφοντας μια νέα λαβή αρχείου για κάθε στοιχείο. Το τελικό αποτέλεσμα είναι μια λαβή για το αρχείο στο οποίο έγινε πρόσβαση και το οποίο χρησιμοποιείται για διαδοχικές αναγνώσεις και εγγραφές.

    Το NFS προσπαθεί να κάνει όλες τις διαδικασίες του ανεξάρτητες από τον αριθμό των εκτελέσεων, έτσι ώστε ο πελάτης να μπορεί απλώς να επανεκδώσει το αίτημα εάν χαθεί η απάντηση. Έχουμε δει παραδείγματα αυτού όπου ένας πελάτης διάβαζε ένα αρχείο ενώ ο διακομιστής κατέρρευσε και επανεκκινούσε.

    Γυμνάσια

    Στην Εικόνα 29.7, είδαμε ότι το tcpdump ερμηνεύει τα πακέτα ως αιτήματα και αποκρίσεις NFS και εκτυπώνει το XID. Μπορεί το tcpdump να το κάνει αυτό για τυχόν αιτήματα ή απαντήσεις RPC;
  • Γιατί πιστεύετε ότι το πρόγραμμα διακομιστή RPC σε συστήματα Unix χρησιμοποιεί δυναμικά εκχωρημένες θύρες αντί για προγνωστικές;
  • Ο πελάτης RPC κάλεσε δύο διαδικασίες διακομιστή. Η πρώτη διαδικασία χρειάστηκε 5 δευτερόλεπτα για να ολοκληρωθεί και η δεύτερη - 1 δευτερόλεπτο. Ο πελάτης έχει timeout 4 δευτερολέπτων. Σχεδιάστε ένα διάγραμμα χρονισμού του τι ανταλλάσσεται μεταξύ του πελάτη και του διακομιστή. (Φανταστείτε ότι δεν ξοδεύτηκε χρόνος για τη μετάδοση ενός μηνύματος από πελάτη σε διακομιστή και αντίστροφα.)
  • Στο παράδειγμα της Εικόνας 29.9, τι θα συνέβαινε εάν η κάρτα Ethernet του διακομιστή NFS καταργηθεί ενώ ο διακομιστής NFS ήταν απενεργοποιημένος;
  • Όταν ο διακομιστής έκανε επανεκκίνηση στην Εικόνα 29.9, επεξεργάστηκε το αίτημα ξεκινώντας από το offset 65536 (γραμμές 168 και 171) και στη συνέχεια επεξεργάστηκε το επόμενο αίτημα ξεκινώντας από το offset 66560 (γραμμές 172 και 173). Τι συμβαίνει με το ερώτημα που ξεκινά από το offset 73728 (γραμμή 167);
  • Όταν περιγράψαμε διαδικασίες ανεξάρτητες από τον αριθμό των εκτελέσεων NFS, δείξαμε ένα παράδειγμα απόκρισης REMOVE που χάθηκε στο δίκτυο. Τι συμβαίνει σε αυτήν την περίπτωση εάν χρησιμοποιείται TCP αντί για UDP;
  • Εάν ο διακομιστής NFS χρησιμοποιεί μια δυναμικά εκχωρημένη θύρα αντί για τη θύρα 2049, τι συμβαίνει με τον πελάτη NFS όταν ο διακομιστής διακόπτεται και επανεκκινείται;
  • Υπάρχουν πολύ, πολύ λίγοι δεσμευμένοι αριθμοί θύρας (Κεφάλαιο 1, ενότητα "Αριθμοί θυρών"), με μέγιστο αριθμό 1023 ανά κεντρικό υπολογιστή. Εάν ένας διακομιστής NFS απαιτεί από τους πελάτες του να έχουν δεσμευμένες θύρες (κάτι που συνήθως κάνουν) και ένας πελάτης NFS που χρησιμοποιεί TCP προσαρτά N συστήματα αρχείων σε N διαφορετικούς διακομιστές, χρειάζεται ο πελάτης να έχει διαφορετικούς δεσμευμένους αριθμούς θύρας για κάθε σύνδεση;
  • Προτού συνεχίσετε να διαβάζετε αυτό το έγγραφο, θα χρειαστεί να εκτελέσετε με επιτυχία μια λειτουργία telnet μεταξύ των μηχανημάτων που θα χρησιμοποιείτε ως διακομιστή και πελάτη. Εάν κάτι δεν λειτουργεί, πρέπει να διαβάσετε το NET-3 HOWTO και να διαμορφώσετε σωστά το δίκτυο.

    Το πρώτο βήμα

    Για να μπορέσουμε να κάνουμε οτιδήποτε πρέπει να ρυθμίσουμε έναν διακομιστή NFS. Εάν ανήκετε σε δίκτυο τμήματος ή πανεπιστημίου, τότε πιθανότατα έχετε διαμορφώσει αρκετούς διακομιστές NFS. Φυσικά, εάν σας επιτρέπουν να έχετε πρόσβαση σε αυτά και εάν διαβάζετε αυτό το έγγραφο για να αποκτήσετε πρόσβαση σε ένα από αυτά, τότε δεν χρειάζεται να διαβάσετε αυτήν την ενότητα και μπορείτε απλώς να μεταβείτε στην ενότητα Εγκατάσταση του προγράμματος-πελάτη NFS.

    Εάν πρέπει να διαμορφώσετε ένα μηχάνημα εκτός Linux ως διακομιστή, τότε θα χρειαστεί να διαβάσετε το εγχειρίδιο για το επιθυμητό σύστημα για να προσδιορίσετε τον τρόπο ενεργοποίησης του διακομιστή NFS και εξαγωγής του συστήματος αρχείων μέσω NFS. Μια περιγραφή του πώς να το κάνετε αυτό σε διαφορετικές πλατφόρμες περιλαμβάνεται σε ξεχωριστή ενότητα. Αφού προσδιορίσετε όλα όσα χρειάζεστε, μπορείτε να συνεχίσετε να διαβάζετε την επόμενη ενότητα αυτού του εγγράφου. Ή διαβάστε περαιτέρω σε αυτήν την ενότητα, γιατί για ορισμένα από τα πράγματα για τα οποία θα μιλήσω, δεν έχει σημασία τι είδους μηχανή χρησιμοποιείτε ως διακομιστή.

    Εάν βιάζεστε, ανατρέξτε στην ενότητα Linux 2.2 προτού συνεχίσετε να διαβάζετε αυτό.

    Αυτό που θα διαβάσετε θα απαιτήσει να ρυθμίσετε πολλά προγράμματα.

    Portmapper

    Το Portmapper στο Linux ονομάζεται είτε portmap είτε rpc.portmap. Η σελίδα man στο σύστημά μου λέει ότι είναι ένας "μετατροπέας αριθμού θύρας DARPA σε κατάλληλες κλήσεις προγράμματος RPC". Αυτή είναι η πρώτη τρύπα ασφαλείας που θα ανακαλύψετε διαβάζοντας αυτό το έγγραφο. Μια περιγραφή για το πώς να κλείσετε μία από αυτές τις τρύπες βρίσκεται στην ενότητα ασφαλείας, την οποία σας συμβουλεύω να διαβάσετε.

    Εκτελέστε το portmapper. Ονομάζεται είτε portmap είτε rpc.portmap και πρέπει να βρίσκεται στον κατάλογο /usr/sbin (που ονομάζεται rpcbind σε ορισμένα μηχανήματα). Μπορείτε να το εκτελέσετε χειροκίνητα τώρα, αλλά πρέπει να εκτελείται κάθε φορά που εκκινείτε το μηχάνημά σας, επομένως θα πρέπει να δημιουργήσετε/επεξεργαστείτε σενάρια rc. Τα περιεχόμενα των σεναρίων rc σας εξηγούνται λεπτομερέστερα στη σελίδα του init man. Συνήθως βρίσκονται στους καταλόγους /etc/rc.d, /etc/init.d ή /etc/rc.d/init.d. Εάν υπάρχει ένα σενάριο που ονομάζεται inet, τότε θα το επεξεργαστούμε. Αλλά τι πρέπει να γραφτεί σε αυτό ή τι άλλο πρέπει να γίνει ξεφεύγει από το πεδίο εφαρμογής αυτού του εγγράφου. Εκκινήστε το portmap και ελέγξτε ότι εκτελείται με την εντολή ps aux και μετά rpcinfo -p. Εγινε? Πρόστιμο.

    Ενα πράγμα. Η απομακρυσμένη πρόσβαση στο πρόγραμμα portmapper καθορίζεται από τα περιεχόμενα των αρχείων /etc/hosts.allow και /etc/hosts.deny. Εάν το rpcinfo -p δεν λειτουργεί, αλλά το portmapper σας εκτελείται, τότε ελέγξτε τα καθορισμένα αρχεία. Δείτε την ενότητα ασφαλείας για μια λεπτομερή περιγραφή αυτών των αρχείων.

    Mountd και nfsd

    Τα επόμενα προγράμματα που πρέπει να τρέξουμε είναι τα mountd και nfsd. Αλλά πρώτα θα επεξεργαστούμε ένα άλλο αρχείο. Αυτό είναι το αρχείο /etc/exports. Ας υποθέσουμε ότι θέλω το σύστημα αρχείων /mn/eris/local, που βρίσκεται στη μηχανή eris, να είναι προσβάσιμο σε ένα μηχάνημα που ονομάζεται apollon. Στη συνέχεια, πρέπει να βάλω τις ακόλουθες γραμμές στο αρχείο /etc/exports στον υπολογιστή eris:

    /mn/eris/local apollon(rw)

    Οι παραπάνω γραμμές δίνουν στο μηχάνημα apollon άδεια ανάγνωσης/εγγραφής στον κατάλογο /mn/eris/local. Αντί για rw μπορούμε να πούμε ro, που σημαίνει πρόσβαση μόνο για ανάγνωση (αν δεν βάλετε τίποτα, η προεπιλογή θα είναι πρόσβαση μόνο για ανάγνωση. Υπάρχουν άλλες επιλογές που μπορείτε να ορίσετε εδώ και θα εξετάσω μερικές από Όλα αυτά σχετίζονται με το πρόβλημα αργότερα με την ασφάλεια ομάδες δικτύου εάν χρησιμοποιείτε σύστημα NIS (ή NYS) (το NIS είναι επίσης γνωστό ως YP) και χρησιμοποιείτε πάντα μπαλαντέρ τομέων και υποδικτύων IP ως λίστες μηχανημάτων που επιτρέπεται να προσαρτήσουν κάτι πρόσβαση στον διακομιστή με μη εξουσιοδοτημένο τρόπο, εάν χρησιμοποιείτε μια τέτοια ολοκληρωμένη εξουσιοδότηση.

    Σημείωση: Αυτό το αρχείο εξαγωγής δεν έχει την ίδια σύνταξη που χρησιμοποιούν άλλα συστήματα Unix. Αυτό το έγγραφο έχει μια ξεχωριστή ενότητα σχετικά με τα αρχεία εξαγωγής άλλων συστημάτων Unix.

    Τώρα είμαστε έτοιμοι να εκτελέσουμε τα προγράμματα mountd (το οποίο μπορεί επίσης να ονομάζεται rpc.mountd) και nfsd (το οποίο μπορεί να ονομάζεται rpc.nfsd). Και τα δύο αυτά προγράμματα διαβάζουν δεδομένα από το αρχείο εξαγωγών.

    Εάν έχετε επεξεργαστεί το αρχείο /etc/exports, πρέπει να βεβαιωθείτε ότι το nfsd και το mountd γνωρίζουν ότι το αρχείο έχει τροποποιηθεί. Ο παραδοσιακός τρόπος για να γίνει αυτό είναι να εκτελέσετε το πρόγραμμα exportfs. Πολλές διανομές Linux δεν διαθέτουν το πρόγραμμα exportfs. Εάν ναι, τότε μπορείτε να δημιουργήσετε ένα σενάριο όπως αυτό στον υπολογιστή σας:

    #!/bin/sh
    killall -HUP /usr/sbin/rpc.mountd
    killall -HUP /usr/sbin/rpc.nfsd
    επαναεξαγόμενα συστήματα αρχείων echo

    Αποθηκεύστε το σε ένα αρχείο, πείτε /usr/sbin/exportfs και μην ξεχάσετε να chmod a+rx σε αυτό. Τώρα που έχετε τροποποιήσει το αρχείο εξαγωγών, θα πρέπει να εκτελέσετε το πρόγραμμα exportfs με δικαιώματα διαχειριστή.

    Θα πρέπει τώρα να ελέγξετε ότι το mountd και το nfsd εκτελούνται σωστά. Αυτό γίνεται αρχικά χρησιμοποιώντας την εντολή rpcinfo -p. Η έξοδος του προγράμματος θα πρέπει να δείχνει κάτι παρόμοιο με το ακόλουθο:

    πρόγραμμα έναντι θύρας proto
    100000 2 tcp 111 portmapper
    100000 2 udp 111 portmapper
    100005 1 udp 745 τοποθέτηση
    100005 1 tcp 747 μονταρισμένο
    100003 2 udp 2049 nfs
    100003 2 tcp 2049 nfs

    Όπως μπορείτε να δείτε, το portmapper ανακοίνωσε τις υπηρεσίες του και ότι το mountd και το nfsd εκτελούνται.

    Εάν λάβετε το μήνυμα rpcinfo: δεν μπορώ να επικοινωνήσω με το portmapper: RPC: Σφάλμα απομακρυσμένου συστήματος - Η σύνδεση απορρίφθηκε, RPC_PROG_NOT_REGISTERED ή κάτι παρόμοιο, τότε το portmapper δεν εκτελείται. Ή μπορεί να έχετε κάτι γραμμένο στους κεντρικούς υπολογιστές αρχείων /etc/.(επιτρέπεται ,άρνηση) που εμποδίζει το portmapper να ανταποκριθεί, δείτε την ενότητα ασφαλείας για μια λεπτομερή περιγραφή αυτών των αρχείων εκτελείτε το nfsd, το mountd και το portmapper και δοκιμάστε ξανά την αρχική σειρά.

    Αφού επαληθεύσετε ότι το portmapper έχει δηλώσει υπηρεσίες, μπορείτε επίσης να εκτελέσετε μια λειτουργική δοκιμή χρησιμοποιώντας την εντολή ps. Το Portmapper θα συνεχίσει να διαφημίζει τις υπηρεσίες του ακόμα και μετά την ολοκλήρωση της λειτουργίας προγραμμάτων που επεκτείνουν τις δυνατότητές του. Επομένως, ο έλεγχος με το ps μπορεί να είναι απαραίτητος εάν νομίζετε ότι κάτι δεν λειτουργεί.

    Φυσικά θα χρειαστεί να διορθώσετε τα αρχεία rc του συστήματός σας για να εκτελούνται τα mountd και nfsd κατά την εκκίνηση. Είναι πολύ πιθανό αυτά τα σενάρια να υπάρχουν ήδη στον υπολογιστή σας και θα χρειαστεί μόνο να αφαιρέσετε το σχόλιο της επιθυμητής ενότητας ή να ενεργοποιήσετε το σενάριο στο επιθυμητό επίπεδο εκτέλεσης.

    Οι σελίδες man που θα έπρεπε να έχετε ήδη διαβάσει είναι: portmap, mountd, nfsd και exports.

    Εάν κάνατε τα πάντα όπως είπα, τότε θα έπρεπε να έχετε εγκαταστήσει όλα τα απαραίτητα για την εκτέλεση του διακομιστή NFS.

    Ρύθμιση ενός προγράμματος-πελάτη NFS

    Το πρώτο πράγμα που χρειάζεστε είναι ένας πυρήνας με υποστήριξη για το σύστημα αρχείων NFS, είτε μεταγλωττισμένος στον πυρήνα είτε διαθέσιμος ως λειτουργική μονάδα. Αυτό ρυθμίζεται πριν από τη μεταγλώττιση του πυρήνα. Εάν δεν έχετε μεταγλωττίσει ποτέ έναν πυρήνα, ίσως χρειαστεί να διαβάσετε το Rernel HOWTO και να μάθετε πώς να το κάνετε. Εάν χρησιμοποιείτε μια καλή διανομή (όπως το RedHat) και δεν έχετε πειραματιστεί ποτέ με τον πυρήνα ή τις λειτουργικές μονάδες (και έτσι το σπάσατε ;-), τότε είναι πιθανό η υποστήριξη nfs να υπάρχει ήδη στον πυρήνα.

    Τώρα μπορείτε, στη γραμμή εντολών του διαχειριστή, να εισαγάγετε την κατάλληλη εντολή προσάρτησης και το σύστημα αρχείων θα εμφανιστεί σε εσάς. Συνεχίζοντας το παράδειγμα από την προηγούμενη ενότητα, θέλουμε να προσαρτήσουμε το /mn/eris/local από το μηχάνημα eris. Αυτό γίνεται χρησιμοποιώντας την ακόλουθη εντολή:

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

    (Θα επανέλθουμε στις επιλογές rsize και wsize αργότερα.) Το σύστημα αρχείων είναι πλέον διαθέσιμο στο /mnt και μπορείτε να πάτε εκεί και να εκτελέσετε μια εντολή ls εκεί και να δείτε τα μεμονωμένα αρχεία. Θα παρατηρήσετε ότι αυτή η λειτουργία δεν είναι τόσο γρήγορη όσο σε ένα τοπικό σύστημα αρχείων, αλλά είναι πιο βολική από το ftp. Εάν, αντί να προσαρτηθεί το σύστημα αρχείων, η εντολή mount παράγει το μήνυμα σφάλματος mount: eris:/mn/eris/local απέτυχε, ο λόγος που δόθηκε από τον διακομιστή: Η άδεια δεν επιτρέπεται, τότε το αρχείο εξαγωγής είναι λανθασμένο ή ξεχάσατε να εκτελέσετε το exportfs μετά την επεξεργασία το αρχείο εξαγωγών. Εάν η εντολή αναφέρει mount clntudp_create: RPC: Το πρόγραμμα δεν έχει καταχωρηθεί, αυτό σημαίνει ότι το nfsd ή το mountd δεν εκτελείται στον διακομιστή. Ή έχετε πρόβλημα με τους οικοδεσπότες. (επιτρέπεται, αρνείται), το οποίο αναφέρεται παραπάνω.

    Για να σταματήσετε να χρησιμοποιείτε το σύστημα αρχείων, μπορείτε να εκτελέσετε:

    Για να προσαρτήσετε αυτόματα το σύστημα αρχείων nfs στην εκκίνηση, πρέπει να επεξεργαστείτε το αρχείο /etc/fstab όπως θα κάνατε συνήθως. Το παράδειγμά μας απαιτεί την ακόλουθη γραμμή:


    ...
    eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024 0 0
    ...

    Αυτό είναι σχεδόν το μόνο που χρειάζεται. Διαβάστε παρακάτω.

    Επιλογές τοποθέτησης

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

    Ο πελάτης NFS θα αναφέρει ένα σφάλμα σε ένα πρόγραμμα που προσπαθεί να αποκτήσει πρόσβαση σε ένα αρχείο που βρίσκεται σε ένα σύστημα αρχείων που είναι προσαρτημένο στο NFS. Ορισμένα προγράμματα χειρίζονται αρκετά καλά αυτού του είδους τα σφάλματα, αλλά τα περισσότερα προγράμματα δεν το κάνουν. Δεν συνιστώ τη χρήση αυτής της επιλογής μπορεί να οδηγήσει σε κατεστραμμένα αρχεία και απώλεια δεδομένων. Ειδικά δεν πρέπει να χρησιμοποιείτε αυτήν την επιλογή για μονάδες δίσκου που χρησιμοποιούνται για αλληλογραφία, εάν η αλληλογραφία σας σημαίνει κάτι για εσάς.

    Ένα πρόγραμμα που έχει πρόσβαση σε ένα αρχείο σε ένα σύστημα αρχείων που είναι προσαρτημένο σε NFS απλώς θα διακόψει την εκτέλεση όταν χαθεί η σύνδεση με τον διακομιστή. Μια διαδικασία δεν μπορεί να διακοπεί ή να σκοτωθεί εκτός και αν ορίσετε ρητά την επιλογή intr. Όταν ο διακομιστής NFS ξεκινήσει ξανά, το πρόγραμμα θα συνεχίσει να λειτουργεί γαλήνια από το σημείο που διακόπηκε. Αυτό είναι πιθανότατα αυτό που χρειάζεστε. Συνιστώ τη χρήση των επιλογών hard,intr σε όλα τα συστήματα αρχείων που είναι προσαρτημένα μέσω NFS.

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

    # σημείο προσάρτησης συσκευής τύπου fs επιλογές απόρριψη fsckorder
    ...
    eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024,hard,intr 0 0
    ...

    Βελτιστοποίηση NFS

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

    χρόνος dd if=/dev/zero of=/mnt/testfile bs=16k count=4096

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

    χρόνος dd if=/mnt/testfile of=/dev/null bs=16k

    εκτελέστε αυτή τη λειτουργία πολλές φορές και κατά μέσο όρο το αποτέλεσμα. Στη συνέχεια, αποπροσαρτήστε το σύστημα αρχείων και τοποθετήστε το ξανά με αυξημένες τιμές rsize και wsize. Θα πρέπει πιθανώς να είναι πολλαπλάσια του 1024 και όχι περισσότερα από 16384 byte, καθώς αυτό είναι το μέγιστο μέγεθος μπλοκ δεδομένων στην έκδοση NFS 2. Αμέσως μετά την προσάρτηση με τις αυξημένες τιμές, μεταβείτε στο προσαρτημένο σύστημα αρχείων και εκτελέστε μια εντολή όπως ls, εξετάστε το σύστημα αρχείων για να βεβαιωθείτε ότι όλα είναι εντάξει. Εάν οι τιμές rsize/wsize είναι πολύ μεγάλες, τότε τα συμπτώματα είναι πολύ ασυνήθιστα και όχι 100% εμφανή. Ένα τυπικό σύμπτωμα είναι μια ελλιπής λίστα αρχείων κατά την εκτέλεση της εντολής "ls" και χωρίς μηνύματα σφάλματος. Ή η ανάγνωση του αρχείου αποτυγχάνει μυστηριωδώς χωρίς μήνυμα σφάλματος. Αφού διαπιστώσετε ότι οι τιμές rsize/wsize λειτουργούν, μπορείτε να δοκιμάσετε περαιτέρω την απόδοση. Διαφορετικές πλατφόρμες διακομιστών πιθανότατα έχουν διαφορετικά βέλτιστα μεγέθη μπλοκ. Το SunOS και το Solaris γενικά θεωρούνται αρκετά πιο γρήγορα με μέγεθος μπλοκ 4096 byte σε σχέση με άλλες τιμές.

    Οι νεότεροι πυρήνες Linux (από την έκδοση 1.3) εκτελούν εκ των προτέρων ανάγνωση για τιμές rsize μεγαλύτερες ή ίσες με το μέγεθος σελίδας του μηχανήματος. Στους επεξεργαστές Intel, το μέγεθος σελίδας είναι 4096 byte. Η ανάγνωση εκ των προτέρων βελτιώνει σημαντικά την απόδοση ανάγνωσης NFS. Έτσι, σε μηχανήματα Intel μπορεί να θέλετε να χρησιμοποιήσετε μια τιμή rsize 4096 byte.

    Θυμηθείτε ότι πρέπει να επεξεργαστείτε το /etc/fstab για να χρησιμοποιήσετε τις τιμές rsize/wsize που βρέθηκαν.

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

    /dir -async,access=linuxbox

    ή κάτι παρόμοιο. Δείτε τη σελίδα man των εξαγωγών σε αυτό το μηχάνημα. Θυμηθείτε επίσης ότι αυτό αυξάνει τον κίνδυνο απώλειας δεδομένων.

    NFS σε αργές γραμμές

    Οι αργές γραμμές περιλαμβάνουν μόντεμ, ISDN και άλλες συνδέσεις μεγάλων αποστάσεων.

    Αυτή η ενότητα βασίζεται στη γνώση των πρωτοκόλλων που χρησιμοποιούνται και όχι σε πραγματικά πειράματα. Παρακαλώ ενημερώστε με αν το δοκιμάσετε :-)

    Το πρώτο πράγμα που πρέπει να θυμάστε είναι ότι το NFS είναι ένα αργό πρωτόκολλο. Η χρήση του NFS είναι βασικά η ίδια με τη χρήση του πρωτοκόλλου kermit για τη μεταφορά αρχείων. Είναι αργό. Σχεδόν όλα είναι πιο γρήγορα από το NFS. Το FTP είναι πιο γρήγορο. Το HTTP είναι πιο γρήγορο. Το rcp είναι πιο γρήγορο. Το ssh είναι πιο γρήγορο.

    Θέλετε ακόμα να το δοκιμάσετε στη δουλειά; Εντάξει.

    Οι προεπιλεγμένες ρυθμίσεις για το NFS έχουν οριστεί σε αρκετά γρήγορες γραμμές με χαμηλή καθυστέρηση. Εάν χρησιμοποιήσετε αυτές τις ρυθμίσεις για γραμμές με υψηλή καθυστέρηση, θα προκύψουν μηνύματα σφάλματος, διακοπή των λειτουργιών, το σύστημα μπορεί να προσποιηθεί ότι τα αρχεία είναι μικρότερα από ό,τι είναι στην πραγματικότητα και να συμπεριφέρεται παράξενα σε άλλες περιπτώσεις.

    Το πρώτο πράγμα που πρέπει να κάνετε είναι να μην χρησιμοποιήσετε την επιλογή soft mount. Αυτό θα κάνει το λογισμικό να επιστρέψει σήματα σφάλματος όταν προκύψουν χρονικά όρια. Γενικά, το κανονικό λογισμικό δεν χειρίζεται πολύ καλά τέτοια σφάλματα. Αυτός είναι ένας καλός τρόπος για να αντιμετωπίσετε περίεργες δυσλειτουργίες. Χρησιμοποιήστε την επιλογή σκληρής τοποθέτησης. Όταν η επιλογή hard είναι ενεργή, τα χρονικά όρια προκαλούν ατελείωτες προσπάθειες συνέχισης αντί να διακόπτουν τα προγράμματά σας. Αυτό είναι που πραγματικά χρειάζεστε.

    Το επόμενο πράγμα που πρέπει να κάνετε είναι να πειραματιστείτε με τις επιλογές στερέωσης timeo και retrans. Αυτά περιγράφονται στη σελίδα man nfs(5), η οποία παρουσιάζεται εδώ:

    timeo=n Τιμή σε δέκατα του δευτερολέπτου πριν την αποστολή
    πρώτη αναμετάδοση μετά το χρονικό όριο RPC. Με
    από προεπιλογή αυτή η τιμή είναι 7 δέκατα
    δευτερόλεπτα. Μετά το πρώτο τάιμ άουτ, χρόνος λήξης
    διπλασιάζεται μετά από κάθε τάιμ άουτ μέχρι
    θα επιτευχθεί η μέγιστη τιμή χρονικού ορίου
    ίσο με 60 δευτερόλεπτα, ή θα συμβεί αρκετά
    αναμετάδοση, προκαλώντας το κύριο timeout. Τότε αν
    το σύστημα αρχείων είναι προσαρτημένο με την επιλογή hard, τότε
    κάθε νέο τάιμ άουτ συνδυάζεται με
    η αρχική τιμή είναι διπλάσια από ό,τι με
    τον προηγούμενο καταρράκτη, επιπλέον διπλασιάζεται
    κάθε αναμετάδοση. Μέγιστο τάιμ άουτ πάντα
    ισοδυναμεί με 60 δευτερόλεπτα. Καλύτερο συνολικά
    μπορεί να επιτευχθεί απόδοση
    αύξηση του χρονικού ορίου κατά την τοποθέτηση
    απασχολημένο δίκτυο, αργός διακομιστής ή
    μέσω πολλών δρομολογητών.

    retrans=n Αυτή η τιμή καθορίζει τον αριθμό των μη βασικών
    τάιμ άουτ και ρελέ που πρέπει
    προκύψει πριν από το κύριο χρονικό όριο. Με
    Από προεπιλογή αυτή η τιμή είναι 3. Πότε
    κύριο χρονικό όριο, μετά είτε τις λειτουργίες αρχείου
    διακόπτονται ή εκτυπώνεται ένα μήνυμα στην κονσόλα
    "ο διακομιστής δεν ανταποκρίνεται".

    Με άλλα λόγια: Εάν το αίτημα δεν σταλεί εντός του χρονικού ορίου των 0,7 δευτερολέπτων (700 ms), ο πελάτης NFS θα δοκιμάσει ξανά το αίτημα και θα διπλασιάσει το χρονικό όριο σε 1,4 δευτερόλεπτα. Εάν η απάντηση δεν έρθει εντός 1,4 δευτερολέπτων, το αίτημα θα επαναληφθεί ξανά και το χρονικό όριο θα αυξηθεί στα 2,8 δευτερόλεπτα.

    Η ταχύτητα γραμμής μπορεί να μετρηθεί χρησιμοποιώντας την εντολή ping με μέγεθος πακέτου ίσο με την τιμή που ορίζεται από τις επιλογές rsize/wsize.

    $ ping -s 8192 lugulbanda
    PING lugulbanda.uio.no (129.240.222.99): 8192 byte δεδομένων
    8200 byte από 129.240.222.99: icmp_seq=0 ttl=64 χρόνος=15,2 ms
    8200 byte από 129.240.222.99: icmp_seq=1 ttl=64 χρόνος=15,9 ms
    8200 byte από 129.240.222.99: icmp_seq=2 ttl=64 χρόνος=14,9 ms
    8200 byte από 129.240.222.99: icmp_seq=3 ttl=64 χρόνος=14,9 ms
    8200 byte από 129.240.222.99: icmp_seq=4 ttl=64 χρόνος=15,0 ms

    Lugulbanda.uio.no ping στατιστικά ---
    Μεταδόθηκαν 5 πακέτα, ελήφθησαν 5 πακέτα, απώλεια πακέτων 0%.
    μετ' επιστροφής ελάχ./μέσος/μέγιστος = 14,9/15,1/15,9 ms

    Εδώ ο χρόνος δείχνει πόσος χρόνος χρειάζεται για να ταξιδέψει το πακέτο προγράμματος ping προς τη μηχανή lugulbanda. Τα 15 ms είναι αρκετά γρήγορα. Όταν εργάζεστε μέσω ενός μόντεμ με ταχύτητα 28.000 baud, μπορείτε να περιμένετε κάπου περίπου 4000-5000 ms, και εάν η γραμμή φορτωθεί από κάποιον άλλο, τότε ο χρόνος θα είναι ακόμη μεγαλύτερος, ίσως και διπλάσιος. Όταν αυτός ο χρόνος είναι υψηλός, λέμε ότι είναι «υψηλή υστέρηση». Γενικά, για μεγαλύτερα πακέτα και για πιο απασχολημένες γραμμές, η καθυστέρηση θα αυξηθεί. Αυξήστε το χρόνο ανάλογα με τη γραμμή και το φορτίο σας. Και επειδή η καθυστέρηση αυξάνεται όταν χρησιμοποιείτε τη γραμμή για άλλα πράγματα: ακόμα κι αν θέλετε να χρησιμοποιήσετε FTP και NFS ταυτόχρονα, θα πρέπει να προσπαθήσετε να μετρήσετε το timeo ping ενώ χρησιμοποιείτε το FTP για τη μεταφορά αρχείων.

    Ασφάλεια και NFS

    Δεν είμαι σε καμία περίπτωση ειδικός σε θέματα ασφάλειας υπολογιστών. Αλλά έχω μια μικρή συμβουλή για όσους γνωρίζουν το πρόβλημα ασφάλειας. Προσοχή όμως: αυτή η λίστα δεν είναι σε καμία περίπτωση μια πλήρης λίστα προβλημάτων που σχετίζονται με το NFS και αν πιστεύετε ότι είστε ασφαλείς αφού διαβάσετε και κάνετε όλα όσα δίνω εδώ, τότε θέλω να σας προειδοποιήσω.

    Αυτή η ενότητα δεν πρέπει να σας ενοχλεί εάν βρίσκεστε σε ένα κλειστό δίκτυο όπου εμπιστεύεστε όλους τους χρήστες και κανένας που εμπιστεύεστε δεν μπορεί να έχει πρόσβαση σε μηχανήματα στο δίκτυο. Για παράδειγμα, δεν θα πρέπει να υπάρχει σύνδεση μέσω τηλεφώνου σε ένα δίκτυο και δεν θα πρέπει να υπάρχει τρόπος να συνδεθείτε σε ένα δίκτυο όπου έχετε άτομα που δεν εμπιστεύεστε. Νομίζεις ότι είμαι παρανοϊκός; Δεν είμαι παρανοϊκός. Αυτή είναι μια βασική συμβουλή ασφαλείας. Η ασφάλεια απαιτεί έναν προσεκτικό και ενημερωμένο διαχειριστή που ξέρει πού να βρει πληροφορίες σχετικά με τρέχοντα και πιθανά ζητήματα ασφάλειας.

    Το κύριο πρόβλημα με το NFS είναι ότι ο πελάτης, εάν δεν έχει καθοριστεί, θα εμπιστεύεται τον διακομιστή και το αντίστροφο. Αυτό μπορεί να είναι κακό. Αυτό σημαίνει ότι εάν ο λογαριασμός διαχειριστή του διακομιστή NFS παραβιαστεί, ο λογαριασμός διαχειριστή του υπολογιστή-πελάτη μπορεί επίσης εύκολα να παραβιαστεί. Και αντίστροφα. Υπάρχει ένα σύνολο αστυνομικών στρατηγικών για αυτό, θα επανέλθουμε σε αυτές.

    Αυτό που πρέπει να διαβάσετε είναι το συμβουλευτικό υλικό CERT που σχετίζεται με το NFS. Το μεγαλύτερο μέρος του παρακάτω κειμένου σχετίζεται με συμβουλές που γράφτηκαν σε θέματα CERT. Δείτε το ftp.cert.org/01-README για μια ενημερωμένη λίστα συμβουλευτικού υλικού CERT. Ακολουθεί κάποιο συμβουλευτικό υλικό που σχετίζεται με το NFS:

    CA-91:21.SunOS.NFS.Jumbo.and.fsirand 06/12/91
    Ευπάθεια Sun Network File System (NFS).
    Microsystems, Inc. Προγράμματα (Sun) και fsirand. Αυτή η ευπάθεια
    είναι δυνατή σε όλες τις εκδόσεις SunOS 4.1.1, 4.1 και 4.0.3
    αρχιτεκτονικές. Διατίθενται ενημερώσεις κώδικα για το SunOS
    4.1.1. Διατίθεται επίσης μια ενημερωμένη έκδοση κώδικα εκκίνησης για το SunOS 4.1 NFS. Ήλιος
    θα παρέχει πλήρεις ενημερώσεις κώδικα για το SunOS 4.1 και το SunOS 4.0.3 σε μεταγενέστερη ημερομηνία.

    CA-94:15.NFS.Vulnerabilities 19/12/94
    Αυτό το συμβουλευτικό υλικό παρέχει μια μέτρηση
    ασφάλεια για ασφάλεια έναντι κάποιων τρυπών ασφαλείας
    σε σύστημα αρχείων δικτύου (NFS). Αυτό το υλικό κυκλοφόρησε σε σχέση με
    αύξηση των περιπτώσεων πειρατείας μηχανημάτων που χρησιμοποιούν βοηθητικά προγράμματα για
    hacking μέσω ευάλωτων σημείων.

    CA-96.08.pcnfsd 18/04/96
    Αυτό το υλικό περιγράφει προβλήματα ασφαλείας στο πρόγραμμα pcnfsd
    (γνωστό και ως rpc.pcnfsd). Patch για να διορθώσετε το σφάλμα
    επισυνάπτεται.

    Ασφάλεια πελάτη

    Από την πλευρά του πελάτη, μπορεί να αποφασίσουμε ότι δεν θέλουμε να εμπιστευόμαστε υπερβολικά τον διακομιστή. Αυτό γίνεται με διάφορους τρόπους χρησιμοποιώντας τις επιλογές τοποθέτησης. Για παράδειγμα, μπορούμε να αποτρέψουμε την εκτέλεση προγραμμάτων με το σύνολο bit suid σε ένα σύστημα αρχείων NFS χρησιμοποιώντας την επιλογή nosuid mount. Αυτή είναι μια καλή ιδέα και θα πρέπει να σκεφτείτε να χρησιμοποιήσετε συστήματα αρχείων που είναι προσαρτημένα στο NFS. Αυτό σημαίνει ότι ο διαχειριστής του διακομιστή δεν θα μπορεί να δημιουργήσει προγράμματα με τον suid-administrator εγκατεστημένο στο σύστημα αρχείων, στη συνέχεια να συνδεθεί στον υπολογιστή του πελάτη ως τακτικός χρήστης και χρησιμοποιώντας το πρόγραμμα με τον suid-administrator να αποκτήσει επίσης δικαιώματα διαχειριστή στο μηχανή του πελάτη. Μπορούμε επίσης να αποτρέψουμε την εκτέλεση αρχείων σε ένα προσαρτημένο σύστημα αρχείων χρησιμοποιώντας την επιλογή noexec. Αλλά χρησιμοποιείται λιγότερο συχνά από την επιλογή nosuid, καθώς το σύστημα αρχείων μπορεί να περιέχει τουλάχιστον μερικά σενάρια ή προγράμματα που πρέπει να εκτελεστούν. Μπορείτε να εισαγάγετε αυτές τις επιλογές στη στήλη επιλογές μαζί με τις επιλογές rsize και wsize, διαχωρισμένες με κόμματα.

    Ασφάλεια διακομιστή: nfsd

    Από την πλευρά του διακομιστή μπορούμε να αποφασίσουμε ότι δεν θέλουμε να εμπιστευτούμε τον διαχειριστή του πελάτη. Μπορούμε να το κάνουμε αυτό καθορίζοντας την επιλογή root_squash στο αρχείο εξαγωγών:

    /mn/eris/local apollon(rw,root_squash)

    Τώρα, εάν ένας χρήστης με UID 0 στην πλευρά του πελάτη προσπαθήσει να αποκτήσει πρόσβαση (ανάγνωση, εγγραφή, διαγραφή), τότε ο διακομιστής αρχείων θα πραγματοποιήσει μια αντικατάσταση του UID του χρήστη «κανένας» στον διακομιστή δεν μπορείτε να αποκτήσετε πρόσβαση ή να τροποποιήσετε αρχεία στα οποία μπορεί να τροποποιήσει ή να έχει πρόσβαση μόνο ο διαχειριστής του διακομιστή Αυτό είναι καλό και θα πρέπει να χρησιμοποιήσετε την επιλογή root_squash σε όλα τα εξαγόμενα συστήματα αρχείων " εντολή για να συνδεθείτε ως οποιοσδήποτε άλλος χρήστης και να αποκτήσετε πρόσβαση. και να αλλάξετε τυχόν αρχεία χρήστη Η απάντηση σε αυτό είναι: "Ναι, υπάρχει τέτοιος τρόπος και λειτουργεί σε Unix και NFS." Αυτό έχει μια σημαντική επίπτωση: Όλα τα σημαντικά αρχεία και προγράμματα πρέπει να ανήκουν στον χρήστη root, όχι στον χρήστη bin ή άλλο χρήστη μη διαχειριστή, καθώς μόνο ο διαχειριστής πελάτη δεν μπορεί να αποκτήσει πρόσβαση ως διαχειριστής διακομιστή. Υπάρχουν πολλές άλλες παρόμοιες επιλογές από τη σελίδα Man NFSd, ώστε να μπορείτε να αποφασίσετε εάν (δεν) εμπιστεύεστε κανέναν από την πλευρά του πελάτη. Έχετε επίσης επιλογές για να περικόψετε τυχόν εύρη UID και GID. Αυτό περιγράφεται στη σελίδα Man Linux NFSd.

    Η επιλογή root_squash είναι η προεπιλογή για το NFSd στο Linux για να εκχωρήσετε δικαιώματα διαχειριστή για πρόσβαση στο σύστημα αρχείων, χρησιμοποιήστε την επιλογή no_root_squash.

    Ένα άλλο σημαντικό πράγμα που πρέπει να κάνετε είναι να διασφαλίσετε ότι το nfsd ελέγχει ότι όλα τα αιτήματα προέρχονται από μια προνομιακή θύρα. Εάν δέχεται αιτήματα από οποιαδήποτε παλιά θύρα του πελάτη, τότε ένας χρήστης χωρίς ειδικά προνόμια μπορεί να εκτελέσει ένα πρόγραμμα που είναι εύκολα προσβάσιμο μέσω του Διαδικτύου. Μπορεί να "μιλήσει" τη γλώσσα του πρωτοκόλλου nfs και θα προσποιηθεί ότι ο χρήστης είναι όποιος χρήστης θέλει να είναι. Το NFSD στο Linux κάνει αυτόν τον έλεγχο από προεπιλογή, αλλά για άλλα λειτουργικά συστήματα πρέπει να ενεργοποιήσετε αυτόν τον έλεγχο μόνοι σας. Αυτό θα πρέπει να περιγραφεί στη σελίδα man nfsd για το λειτουργικό σας σύστημα.

    Ενα άλλο πράγμα. Ποτέ μην εξάγετε ένα σύστημα αρχείων για μια μηχανή που ονομάζεται "localhost" ή 127.0.0.1. Εμπιστέψου με.

    Ασφάλεια διακομιστή: portmapper

    Το υποκείμενο portmapper, όταν συνδυάζεται με το nfsd, έχει ένα πρόβλημα σχεδιασμού που καθιστά δυνατή τη λήψη αρχείων από διακομιστές NFS χωρίς κανένα δικαίωμα. Ευτυχώς, το portmapper που χρησιμοποιείται στις περισσότερες διανομές Linux είναι σχετικά ασφαλές έναντι μιας τέτοιας επίθεσης και μπορεί να γίνει πιο ασφαλές ορίζοντας μια λίστα πρόσβασης σε δύο αρχεία.

    Δεν δημιουργούνται όλες οι διανομές Linux ίσες. Ορισμένες διανομές που φαίνεται να είναι σύγχρονες δεν περιλαμβάνουν ασφαλή έκδοση του προγράμματος portmapper, ακόμη και τώρα, πολλά χρόνια αφότου έγιναν γνωστά τα τρωτά σημεία του. Τουλάχιστον μία διανομή περιλαμβάνει ακόμη και μια σελίδα man για ένα πιο ασφαλές portmapper, αλλά το portmapper του δεν είναι στην πραγματικότητα ασφαλές. Ο ευκολότερος τρόπος για να ελέγξετε εάν το portmapper σας είναι καλό ή όχι είναι να εκτελέσετε το πρόγραμμα strings(1) και να παρακολουθήσετε την έξοδο του για τα αρχεία /etc/hosts.deny και /etc/hosts.allow. Υποθέτοντας ότι το portmapper σας είναι /usr/sbin/portmap, μπορείτε να το ελέγξετε εκτελώντας την ακόλουθη εντολή: strings /usr/sbin/portmap | grep οικοδεσπότες. Στο μηχάνημά μου αυτό έτρεξε με τα ακόλουθα αποτελέσματα:

    /etc/hosts.allow
    /etc/hosts.deny
    @(#) hosts_ctl.c 1.4 94/12/28 17:42:27
    @(#) hosts_access.c 1.20 96/02/11 17:01:27

    Πρώτα θα επεξεργαστούμε το αρχείο /etc/hosts.deny. Θα πρέπει να περιέχει τη γραμμή

    που θα απαγορεύσει την πρόσβαση σε όλους. Εφόσον αυτό έχει απενεργοποιήσει την πρόσβαση για όλους, εκτελέστε το rpcinfo -p απλώς για να επαληθεύσετε ότι το portmapper σας διαβάζει αυτό το αρχείο και εκτελεί τις οδηγίες που δίνονται. Η εντολή rpcinfo δεν πρέπει να βγάζει τίποτα ή θα πρέπει να παράγει μήνυμα σφάλματος. Η επανεκκίνηση του portmapper δεν είναι απαραίτητη.

    Το κλείσιμο του portmap για όλους μπορεί να είναι πολύ δραστικό, επομένως θα ανοίξουμε ξανά την πρόσβαση αλλάζοντας το αρχείο /etc/hosts.allow. Αλλά πρώτα πρέπει να καθορίσουμε τι θα βάλουμε εκεί. Αυτό το αρχείο παραθέτει όλα τα μηχανήματα που έχουν πρόσβαση στο portmapper σας. Μεταξύ των πολλών συστημάτων που τρέχουν Linux, μόνο λίγα μηχανήματα χρειάζονται πλήρη πρόσβαση για να κάνουν οτιδήποτε. Το Portmapper εξυπηρετεί υπηρεσίες nfsd, mountd, ypbind/ypserv, pcnfsd και "r", όπως ruptime και rusers. Από αυτά, μόνο τα nfsd, mountd, ypbind/ypserv και ίσως pcnfsd έχουν κάποια σημασία. Όλα τα μηχανήματα που χρειάζονται πρόσβαση σε υπηρεσίες στο μηχάνημά σας πρέπει να έχουν τη δυνατότητα να το κάνουν. Ας υποθέσουμε ότι η διεύθυνση του μηχανήματος είναι 129.240.223.254 και βρίσκεται στο υποδίκτυο 129.240.223.0 και χρειάζεται πρόσβαση σε υπηρεσίες στο μηχάνημά σας (αυτοί οι όροι εισάγονται από το Networking HOWTO, επιστρέψτε σε αυτό και ενημερώστε τις γνώσεις σας εάν χρειάζεται) . Για να γίνει αυτό, θα γράψουμε στο αρχείο hosts.allow

    portmap: 129.240.223.0/255.255.255.0

    Αυτή είναι η ίδια με τη διεύθυνση δικτύου που δίνετε στην εντολή διαδρομής και τη μάσκα υποδικτύου που μεταβιβάζετε στην εντολή ifconfig. Για τη συσκευή eth0 σε αυτό το μηχάνημα θα πρέπει να εμφανίζεται το ifconfig

    ...
    eth0 Σύνδεσμος encap:10Mbps Ethernet HWaddr 00:60:8C:96:D5:56
    inet adr:129.240.223.254 Bcast:129.240.223.255 Mask:255.255.255.0
    ΕΠΑΝΩ ΕΚΠΟΜΠΗ ΠΟΛΛΑΠΛΗΡΩΣ ΕΚΤΕΛΕΣΗ MTU:1500 Μετρικό:1
    Πακέτα RX:360315 σφάλματα:0 πτώση:0 υπερβάσεις:0
    Πακέτα TX:179274 σφάλματα:0 πτώση:0 υπερβάσεις:0
    Διακοπή: 10 Διεύθυνση βάσης: 0x320
    ...

    και το πρόγραμμα netstat -rn θα πρέπει να εμφανίζεται

    Πίνακας δρομολόγησης πυρήνα
    Πύλη προορισμού Genmask επισημαίνει Metric Ref Use Iface
    ...
    129.240.223.0 0.0.0.0 255.255.255.0 U 0 0 174412 eth0
    ...

    (Η διεύθυνση δικτύου βρίσκεται στην πρώτη στήλη).

    Τα αρχεία hosts.deny και hosts.allow περιγράφονται στις σελίδες man με τα ίδια ονόματα.

    ΣΗΜΑΝΤΙΚΟ: Μην τοποθετείτε τίποτα σε αυτά τα αρχεία εκτός από τους ΑΡΙΘΜΟΥΣ IP στις γραμμές διαμόρφωσης portmap. Μια αναζήτηση ονόματος μηχανής μπορεί να ενεργοποιήσει μια δραστηριότητα portmap, η οποία θα ενεργοποιήσει μια αναζήτηση ονόματος μηχανήματος, η οποία θα ενεργοποιήσει μια portmap, η οποία θα ενεργοποιήσει...

    Τα παραπάνω πράγματα θα πρέπει να κάνουν τον διακομιστή σας να αλλάξει. Το πρόβλημα που απομένει είναι ότι κάποιος θα χακάρει τον διαχειριστή (ή θα εκκινήσει στο MS-DOS) σε ένα αξιόπιστο μηχάνημα και θα χρησιμοποιήσει αυτά τα προνόμια για να στείλει αιτήματα στην ασφαλή θύρα όπως οποιοσδήποτε χρήστης θέλει να είναι.

    NFS και τείχος προστασίας

    Είναι πολύ καλή ιδέα να προστατεύσετε τις θύρες nfs και portmap με ένα τείχος προστασίας στο δρομολογητή σας. Το Nfsd εκτελείται στη θύρα 2049 χρησιμοποιώντας και τα δύο πρωτόκολλα -- udp και tcp. Το Portmapper εκτελείται στη θύρα 111, tcp και udp και το mountd εκτελείται στις θύρες 745 και 747, tcp και udp. Προκαθορισμένο. Θα πρέπει να ελέγξετε τους αριθμούς θυρών που χρησιμοποιούνται χρησιμοποιώντας την εντολή rpcinfo -p.

    Εάν θέλετε να χρησιμοποιήσετε το NFS μέσω ενός τείχους προστασίας, υπάρχουν επιλογές για νέες εκδόσεις του NFSd και προσαρτημένες για να τις αναγκάσετε να χρησιμοποιούν μη τυπικές θύρες που μπορούν να ανοίξουν στο τείχος προστασίας.

    Περίληψη

    Εάν χρησιμοποιείτε hosts.allow/deny, root_squash, nosuid και προνομιακές θύρες στο λογισμικό portmapper/nfs, τότε μπορείτε να αποφύγετε γνωστά σφάλματα στο nfs και να αισθάνεστε σχεδόν ασφαλείς. Αλλά και πάλι: όταν ένας εισβολέας έχει πρόσβαση στο δίκτυό σας, μπορεί να προσθέσει περίεργες εντολές στο αρχείο .forward ή στο γραμματοκιβώτιό σας όταν το /home ή το /var/spool/mail είναι προσαρτημένο μέσω NFS. Για τον ίδιο λόγο, δεν πρέπει ποτέ να έχετε πρόσβαση στα ιδιωτικά κλειδιά PGP μέσω nfs. Ή τουλάχιστον θα πρέπει να ξέρετε ποιος είναι ο κίνδυνος. Και να ξέρεις τουλάχιστον λίγα πράγματα για αυτόν.

    Το NFS και το portmapper δημιουργούν ένα πολύπλοκο σύστημα και επομένως δεν είναι εντελώς απίθανο να βρεθούν νέα σφάλματα, είτε στην υποκείμενη σχεδίαση είτε στην υλοποίηση που χρησιμοποιούμε. Μπορεί επίσης να υπάρχουν γνωστές τρύπες που κάποιος εκμεταλλεύεται. Αλλά έτσι είναι η ζωή. Για να γνωρίζετε τέτοια πράγματα, θα πρέπει τουλάχιστον να διαβάσετε τις ομάδες συζήτησης comp.os.linux.announce και comp.security.announce.

    Λίστα ελέγχου αντιμετώπισης προβλημάτων προσάρτησης

    Αυτή η ενότητα βασίζεται στη λίστα ελέγχου ζητημάτων τοποθέτησης που συντάχθηκε από την IBM Corp. Τους ευχαριστώ που το έκαναν διαθέσιμο για χρήση σε αυτό το έγγραφο. Εάν αντιμετωπίζετε πρόβλημα με την προσάρτηση ενός συστήματος αρχείων μέσω NFS, ελέγξτε αυτήν τη λίστα πριν υποβάλετε μια αναφορά σφαλμάτων. Κάθε στοιχείο περιγράφει ένα συγκεκριμένο πρόβλημα και τη λύση του.

    Η εντολή mount συνεχίζει να αναφέρει το RPC: Το πρόγραμμα δεν είναι καταχωρημένο Εκτελείται το portmapper;

    Διόρθωση: Εκτελέστε το.

    Το mountd λειτουργεί;

    Διόρθωση: Εκτελέστε το.

    Εκτελείται το nfsd;

    Διόρθωση: Εκτελέστε το.

    Αποκλείεται το portmapper να ανταποκρίνεται στα αιτήματά σας από το αρχείο /etc/hosts.deny;

    Διόρθωση: Καταργήστε τον κανόνα από το αρχείο hosts.deny ή προσθέστε έναν κανόνα στο αρχείο hosts.allow ώστε να επιτρέπεται στον χαρτογράφο θυρών να επικοινωνεί μαζί σας.

    Το σύστημα αρχείων δεν εξάγεται ή δεν εξάγεται όταν ζητηθεί από τον πελάτη. Διόρθωση: Εξαγωγή του

    Το σύστημα ανάλυσης ονόματος δεν ταιριάζει με τη λίστα των μηχανημάτων στο αρχείο εξαγωγών. Για παράδειγμα: η λίστα των εξαγόμενων πόρων καθορίζει την εξαγωγή johnmad, αλλά το όνομα johnmad μετατρέπεται σε johnmad.austin.ibm.com και η προσάρτηση απορρίπτεται.

    Διόρθωση: Εξαγωγή του πόρου και για τις δύο μορφές του ονόματος του μηχανήματος.

    Αυτό συμβαίνει επίσης εάν ο πελάτης έχει 2 διεπαφές με διαφορετικά ονόματα για καθεμία από αυτές και το σύστημα αρχείων εξάγεται μόνο για ένα καθορισμένο όνομα.

    Διόρθωση: Εξαγωγή και των δύο διεπαφών.

    Αυτό μπορεί επίσης να συμβεί εάν ο διακομιστής δεν μπορεί να εκτελέσει τις λειτουργίες lookuphostbyname ή lookuphostbyaddr (αυτές είναι συναρτήσεις βιβλιοθήκης) στον υπολογιστή-πελάτη. Βεβαιωθείτε ότι ο πελάτης μπορεί να εκτελέσει εντολές κεντρικού υπολογιστή ; πλήθος ; και δείχνουν και οι δύο στο ίδιο αυτοκίνητο.

    Διόρθωση: Διορθώστε το σύστημα ανάλυσης ονόματος.

    Το σύστημα αρχείων προσαρτήθηκε μετά την εκκίνηση του NFS (σε αυτόν τον διακομιστή). Σε αυτήν την περίπτωση, ο διακομιστής εξάγει το ίδιο το σημείο προσάρτησης και όχι το προσαρτημένο σύστημα αρχείων. Διόρθωση: Κλείστε το NFSd και, στη συνέχεια, επανεκκινήστε το.

    Σημείωση: Οι πελάτες που είχαν ήδη προσαρτηθεί στο σημείο προσάρτησης του συστήματος αρχείων θα αντιμετωπίσουν προβλήματα πρόσβασης σε αυτό μετά την επανεκκίνηση του διακομιστή.

    Η ημερομηνία αλλάζει τυχαία σε ένα ή και στα δύο μηχανήματα (αυτό μπορεί να προκαλέσει σύγχυση στο make). Διόρθωση: Ορίστε τη σωστή ημερομηνία.

    Ο συγγραφέας του HOWTO συνιστά τη χρήση NTP για συγχρονισμό ρολογιού. Δεδομένου ότι υπάρχουν περιορισμοί εξαγωγής στο NTP στις ΗΠΑ, μπορείτε να λάβετε NTP για Debian, Red Hat ή Slackware από το ftp://ftp.hacktic.nl/pub/replay/pub/linux ή από έναν διακομιστή mirror.

    Ο διακομιστής δεν επιτρέπει την προσάρτηση από έναν χρήστη που ανήκει σε περισσότερες από 8 ομάδες. Διόρθωση: Μειώστε τον αριθμό των ομάδων στις οποίες ανήκει ο χρήστης ή προσαρτήστε με το όνομα άλλου χρήστη.

    Συχνές Ερωτήσεις (FAQ)

    Αυτή είναι μια ενότητα Συχνές Ερωτήσεις (FAQ). Μεγάλο μέρος του βασίζεται σε ένα παλιό FAQ γραμμένο από τον Alan Cox.

    Εάν αντιμετωπίζετε προβλήματα κατά την προσάρτηση ενός συστήματος αρχείων, δείτε εάν περιγράφεται στην ενότητα «Λίστα ελέγχου προσάρτησης».

    Λαμβάνω σφάλματα ``stale nfs handle (stale nfs handle)"" όταν χρησιμοποιώ το Linux ως διακομιστή nfs. Αυτό προκαλείται από ένα σφάλμα σε μια από τις παλαιότερες εκδόσεις του nfsd. Αυτό διορθώθηκε στον nfs-server2.2beta16 και μεταγενέστερο.

    Όταν προσπαθώ να προσαρτήσω το σύστημα αρχείων, λαμβάνω το μήνυμα
    Δεν μπορώ να εγγραφώ με το portmap: σφάλμα συστήματος κατά την αποστολή
    (δεν είναι δυνατή η εγγραφή χρησιμοποιώντας το portmap: σφάλμα συστήματος κατά την αποστολή)

    Μάλλον χρησιμοποιείτε το σύστημα Caldera. Αυτό είναι ένα σφάλμα στα σενάρια rc. Επικοινωνήστε με την Caldera για διόρθωση.

    Γιατί δεν μπορώ να εκτελέσω ένα αρχείο αφού το αντιγράψω σε διακομιστή NFS; Ο λόγος είναι ότι το nfsd αποθηκεύει προσωρινά ανοιχτές λαβές αρχείων για να βελτιώσει την απόδοση (θυμηθείτε ότι εκτελείται στο χώρο χρήστη). Όσο το nfsd διατηρεί το αρχείο ανοιχτό (όπως σε αυτήν την περίπτωση, αφού γράψετε σε αυτό), ο πυρήνας δεν θα σας επιτρέψει να το εκτελέσετε. Τα Nfsds νεότερα από την έκδοση Spring 95 διατηρούν τα αρχεία ανοιχτά για μερικά δευτερόλεπτα, τα παλαιότερα μπορούν να κρατήσουν ένα αρχείο ανοιχτό για αρκετές ημέρες.

    Τα αρχεία μου στο NFS είναι όλα μόνο για ανάγνωση Από προεπιλογή, ο διακομιστής NFS για Linux αποδίδεται μόνο για ανάγνωση. Διαβάστε ξανά τις ενότητες "Mountd and nfsd" και "Exporting File Systems" αυτού του εγγράφου, καθώς και τις σελίδες man "exports" και nfsd. Πρέπει να αλλάξετε το αρχείο /etc/exports.

    Προσαρτώ ένα σύστημα αρχείων από έναν διακομιστή nfs υπό linux και ενώ εκτελείται η εντολή ls δεν μπορώ να διαβάσω ή να γράψω αρχεία. Σε παλαιότερες εκδόσεις του Linux, θα πρέπει να προσαρτήσετε τον διακομιστή NFS με τις επιλογές rsize=1024,wsize=1024.

    Προσαρτώ ένα σύστημα αρχείων από έναν διακομιστή NFS σε Linux με μέγεθος μπλοκ μεταξύ 3500-4000 και διακόπτει τακτικά το μηχάνημα Linux Μην το κάνετε συνήθως. Αυτό δεν συμβαίνει με τις εκδόσεις πυρήνα 2.0 και 2.2. Δεν υπάρχει επίσης πρόβλημα με τους πυρήνες της σειράς 2.1.

    Μπορεί το Linux να κάνει NFS μέσω TCP No

    Λαμβάνω περίεργα σφάλματα κατά την τοποθέτηση ενός μηχανήματος από ένα μηχάνημα Linux. Βεβαιωθείτε ότι ο χρήστης σας ανήκει σε 8 ή λιγότερες ομάδες. Οι παλιοί διακομιστές το απαιτούν αυτό.

    Όταν κάνω επανεκκίνηση του υπολογιστή μου, μερικές φορές κολλάει όταν προσπαθώ να αποπροσαρτήσω από έναν παγωμένο διακομιστή NFS. Μην αποπροσαρτήσετε από τους διακομιστές NFS κατά την επανεκκίνηση ή τον τερματισμό λειτουργίας, απλώς αγνοήστε το, τίποτα δεν θα καταστραφεί εάν δεν αποσυνδεθείτε από αυτόν. Η εντολή θα μοιάζει με αυτό: umount -avt nonfs.

    Ο πελάτης NFS για Linux είναι πολύ αργός όταν γράφει σε συστήματα Sun και BSD. Συνήθως το NFS γράφει σε σύγχρονη λειτουργία (μπορείτε να το απενεργοποιήσετε εάν δεν πιστεύετε ότι κινδυνεύετε να χάσετε δεδομένα). Το χειρότερο μέρος είναι ότι οι πυρήνες που προέρχονται από το BSD δεν μπορούν να χειριστούν μικρά μπλοκ. Έτσι, όταν γράφετε δεδομένα 4K από μια μηχανή Linux σε πακέτα 1K, η BSD το κάνει έτσι

    διαβάστε τη σελίδα 4K
    αλλαγή 1Κ

    διαβάστε τη σελίδα 4K
    αλλαγή 1Κ
    γράψτε τη σελίδα 4K πίσω στο δίσκο
    και τα λοιπά...

    Όταν συνδέω πολλούς πελάτες στον διακομιστή Linux NFS, η απόδοσή του πέφτει ξαφνικά. Το πρωτόκολλο NFS χρησιμοποιεί κατακερματισμένα πακέτα UDP. Ο πυρήνας έχει ένα όριο στο πόσα κομμάτια ή ημιτελή πακέτα θα φτάσουν πριν αρχίσει να ρίχνει πακέτα. Σε πυρήνες σειράς 2.2, αυτό ρυθμίζεται κατά τη διάρκεια εκτέλεσης μέσω του συστήματος αρχείων /proc: /proc/sys/net/ipv4/ipfrag_high_thresh και ipfrag_low_thresh. Στους πυρήνες της σειράς 2.0, αυτές οι σταθερές προσδιορίζονται κατά το χρόνο μεταγλώττισης και ορίζονται στο αρχείο.../linux/net/ipv4/ip_fragment.c, IPFRAG_HIGH_THRESH και IPFRAG_LOW_THRESH. Αυτές οι επιλογές σημαίνουν ότι όταν η κατανάλωση μνήμης των μη συλλεγμένων τμημάτων πακέτων UDP φτάσει την τιμή σε byte "ipfrag_high_thresh"" (προεπιλογή 256K στους πυρήνες 2.2.3 και 2.0.36) θα μειωθεί στην τιμή ``ipfrag_low_tresh"". Αυτό γίνεται με την απόρριψη θραυσμάτων. Αυτό θα μοιάζει με σχεδόν πλήρη απώλεια πακέτων και εάν επιτευχθεί το ανώτατο όριο, η απόδοση του διακομιστή σας θα μειωθεί σημαντικά.

    256.000 είναι αρκετά για την εξυπηρέτηση έως και 30 πελατών. Εάν έχετε 60 πελάτες, τότε αυξήστε αυτήν την τιμή κατά 2 φορές. Και επίσης αυξήστε την τιμή του κάτω περιγράμματος.

    Χρησιμοποιώ Linux 2.2 (ή μεταγενέστερο) με knfsd και δεν μπορώ να βάλω τα μηχανήματα AIX, IRIX, Solaris, DEC-Unix,... να προσαρτηθούν σε αυτό. Το Knfsd διαφημίζει ότι εφαρμόζει την έκδοση 3 του NFS. Δεν το κάνει. Υπάρχει μια επιλογή που τον εμποδίζει να το ανακοινώσει. Χρησιμοποιησετο. Ή μπορείτε να βάλετε την παράμετρο "vers=2" στη λίστα επιλογών προσάρτησης στον υπολογιστή-πελάτη.

    Το μηχάνημά μου AIX 4 δεν μπορεί να προσαρτήσει τον διακομιστή NFS μου σε Linux. Αυτή αναφέρει
    mount: 1831-011 δεν επιτρέπεται η πρόσβαση για διακομιστή:/dir
    mount: 1831-008 εγκαταλείποντας:
    διακομιστής:/σκην
    Τα δικαιώματα πρόσβασης στο αρχείο δεν επιτρέπουν την καθορισμένη ενέργεια.

    ή κάτι παρόμοιο. Το AIX 4.2 χρησιμοποιεί δεσμευμένες θύρες (<1024) для NFS. AIX 4.2.1 и 4.3 не ограничены резервированными портами. Также AIX 4.2.1 и 4.3 пытаются произвести монтирование используя версию NFS3, затем NFS/TCP, и только потом NFS/UDP.

    Προσθήκη σειρών

    nfso -o nfs_use_reserved_ports=1

    στο τέλος του αρχείου rc.tcpip θα το αναγκάσει να χρησιμοποιήσει δεσμευμένες θύρες. (Αυτή η συμβουλή στάλθηκε από τον Brian Gorka).

    Εξαγωγή συστημάτων αρχείων

    Ο τρόπος εξαγωγής των συστημάτων αρχείων με χρήση NFS δεν είναι πλήρως συμβατός σε όλες τις πλατφόρμες. Εδώ διαφέρουν το Linux και το Solaris 2 Αυτή η ενότητα παραθέτει εν συντομία τρόπους εκτέλεσης αυτής της λειτουργίας στα περισσότερα συστήματα. Εάν το σύστημά σας δεν αναφέρεται εδώ, ελέγξτε τις σελίδες man για το λειτουργικό σας σύστημα. Οι λέξεις-κλειδιά είναι οι εξής: nfsd, εργαλείο διαχείρισης συστήματος, σενάρια rc, σενάρια εκκίνησης, ακολουθία εκκίνησης, /etc/exports, exportfs. Θα χρησιμοποιήσω ένα παράδειγμα για ολόκληρη την ενότητα: πώς να εξαγάγετε το /mn/eris/τοπικό σύστημα αρχείων για έναν υπολογιστή Apollon με δικαιώματα ανάγνωσης/εγγραφής.

    IRIX, HP-UX, Digital-UNIX, Ultrix, SunOS 4 (Solaris 1), AIX

    Αυτά τα λειτουργικά συστήματα χρησιμοποιούν την παραδοσιακή μορφή Sun για εξαγωγή. Στο αρχείο /etc/exports γράψτε:

    /mn/eris/local -rw=apollon

    Η πλήρης τεκμηρίωση βρίσκεται στη σελίδα man των εξαγωγών. Μετά την επεξεργασία του αρχείου, εκτελέστε το exportfs -av για να εξαγάγετε τα συστήματα αρχείων.

    Η ακριβής σύνταξη της εντολής exportfs ποικίλλει. Σε ορισμένα λειτουργικά συστήματα, μπορεί να διαπιστώσετε ότι οι γραμμές που εισαγάγατε έχουν ως εξής:

    /mn/eris/τοπικός απόλλων

    ή ακόμα και σαν αυτό:

    Solaris 2

    Η Sun επανεφηύρε εντελώς τον τροχό κατά την ανάπτυξη του Solaris 2. Άρα είναι εντελώς διαφορετικό από άλλα λειτουργικά συστήματα. Αυτό που πρέπει να κάνετε είναι να επεξεργαστείτε το /etc/dfs/dfstab. Θα πρέπει να τοποθετήσετε εκεί εντολές πρόσβασης όπως περιγράφεται στη σελίδα χρήστη share(1M). Γραμμές όπως αυτή:

    μετοχή -o rw=apollon -d "Eris Local" /mn/eris/local

    Μετά την επεξεργασία, εκτελέστε το πρόγραμμα shareall για να εξαγάγετε το σύστημα αρχείων.

    NFS σε Linux 2.2

    Όπως έγραψα, το Linux 2.2.12 είναι η τρέχουσα έκδοση του πυρήνα και ίσως χρειαστεί να κάνετε κάποιες δουλειές για να χρησιμοποιήσετε το NFS σε αυτό. Ή όχι απαραίτητο.

    Δεν ξέρω ποια θα είναι η κατάσταση του NFS στο Linux 2.4.

    Το μεγάλο νέο χαρακτηριστικό στο Linux 2.2 είναι η υποστήριξη για έναν δαίμονα nfs στον πυρήνα που ονομάζεται knfsd. Αυτή η μέθοδος υλοποίησης του nfsd έχει ορισμένα πλεονεκτήματα, με το κύριο να είναι η ταχύτητα. Ένα μηχάνημα με Linux 2.2 και knfsd είναι ένας σταθερός διακομιστής nfs. Μπορείτε ακόμα να χρησιμοποιήσετε το παλιό nfsd με Linux 2.2 και υπάρχουν επίσης αρκετά πλεονεκτήματα, κυρίως η απλότητα.

    Εάν χρησιμοποιείτε πηγές πυρήνα ή δυαδικά πακέτα που έχουν δημιουργηθεί από κάποιον όπως το RedHat (6.0 και μεταγενέστερο), το SuSE (6.1 ή μεταγενέστερο) ή κάποιο άλλο επαγγελματικό ολοκληρωμένο σύστημα, τότε πιθανότατα θα αποστέλλονται με πλήρη ενσωμάτωση "knfsd" στον πυρήνα και δεν θα χρειαστεί να ανησυχείς. Στις περισσότερες περιπτώσεις. Αρκεί να μην πας να κάνεις compile τον πυρήνα μόνος σου. Εάν χρησιμοποιείτε έναν κανονικό πυρήνα Linux 2.2 (τουλάχιστον 2.2.12), τότε το knfsd δεν θα λειτουργήσει.

    Για να κάνετε αυτό το έργο μόνοι σας, πρέπει να πάρετε το πακέτο knfsd που κατασκευάστηκε από τον H.J. Lus. Αυτό το πακέτο είναι μια συλλογή από patches και απαραίτητα βοηθητικά προγράμματα για τους πυρήνες της σειράς 2.2, που διατηρεί ο Lu στον ελεύθερο χρόνο του. Μπορείτε να το λάβετε από τον τοπικό σας mirror διακομιστή πυρήνα ή από τον κύριο διακομιστή στη διεύθυνση ftp.kernel.org:/pub/linux/devel/gcc/. Δεν προορίζεται για γενική χρήση. Εάν δεν καταλαβαίνετε αυτό το πακέτο, μην προσπαθήσετε να το χρησιμοποιήσετε μόνοι σας. Περιμένετε μέχρι ο αγαπημένος σας ενοποιητής συστήματος (π.χ. Red Hat, SuSE ή...) να κυκλοφορήσει τα πακέτα πυρήνα.

    Επίσης, μην μου στέλνετε ερωτήσεις σχετικά με αυτό το πακέτο, δεν μπορώ να σας βοηθήσω. Δεν έχω ούτε έναν διακομιστή με knfsd να τρέχει. Εάν βρείτε κάποιο σφάλμα ή παράλειψη στην τεκμηρίωση, παρακαλώ γράψτε μου, θα διορθώσω αυτό το έγγραφο και θα το δημοσιεύσω ξανά.

    Ακόμα διαβάζεις; Εντάξει. Ο H.J.Lu δημοσιεύει νέες εκδόσεις του πακέτου του στη λίστα αλληλογραφίας του πυρήνα του Linux. Άλλα μηνύματα που σχετίζονται με το NFS στον πυρήνα 2.2 αποστέλλονται επίσης εκεί. Διάβασε τα.

    Υπάρχει ένα ενδιαφέρον πράγμα να πούμε για το πακέτο knfsd. Διαφημίζει ότι χρησιμοποιεί NFS έκδοση 3. Ωστόσο, δεν υποστηρίζει αυτήν την έκδοση. Υπάρχει μια επιλογή που μπορείτε να χρησιμοποιήσετε για να αποτρέψετε τη διαφήμιση του NFS3 σε ένα πακέτο ή σε πελάτες θα πρέπει να καθορίσετε την επιλογή "vers=2" μεταξύ άλλων επιλογών προσάρτησης.

    Πελάτης

    Ο πελάτης είναι πολύ απλός. Για να λάβετε τον σωστό αποκλεισμό, πρέπει να έχετε μεταγλωττίσει, εγκαταστήσει και εγκαταστήσει το statd (από το πακέτο knfsd) από σενάρια εκκίνησης. Κάνε το. Ο κατάλογος /var/lib/nfs απαιτείται για να λειτουργήσει το statd, διαφορετικά απλά θα διακοπεί χωρίς μηνύματα σφάλματος, επομένως πρέπει να δημιουργήσετε τον κατάλογο πριν εκτελέσετε το πρόγραμμα.

    Με το statd να εκτελείται ήδη, μπορείτε να χρησιμοποιήσετε το πρόγραμμα testlk (στον κατάλογο tools/locktest) για να ελέγξετε ότι το κλείδωμα αρχείων λειτουργεί σε συστήματα αρχείων που είναι προσαρτημένα στο NFS. Θα πρέπει να λειτουργεί καλά. Εάν το πρόγραμμα αναφέρει Δεν υπάρχουν διαθέσιμα λουκέτα, τότε το statd δεν λειτουργεί.

    Στην πραγματικότητα, μπορείτε επίσης να αποφύγετε εντελώς τις κλειδαριές (σημειώστε ότι δεν σας συνιστώ να το κάνετε αυτό) χρησιμοποιώντας την επιλογή "nolock" στη λίστα επιλογών προσάρτησης.

    Από όσο ξέρω, αυτό είναι το μόνο που χρειάζεται για να δουλέψουν οι πελάτες.

    Εάν έχετε διακομιστή Sparc ή Alpha NFS, τότε θα διαπιστώσετε ότι ο πελάτης NFS στο Linux 2.2 δεν λειτουργεί καθόλου. Η ταχύτητα μεταφοράς από και προς τον διακομιστή είναι τόσο κακή που είναι δύσκολο να φανταστεί κανείς. Αυτό είναι ακόμα χειρότερο από το Linux 2.0. Πολύ χειρότερα. Αλλά υπάρχει μια λύση για αυτό το πρόβλημα. Η σειρά πυρήνων Alan Cox 2.2 (που είναι πιο πειραματικοί από τους κανονικούς πυρήνες 2.2 που συνοδεύονται από Linus) περιλαμβάνει μια ενημέρωση κώδικα που επιτρέπει στο Linux 2.2 να βελτιώνει την απόδοση κατά την εκτέλεση διακομιστών Alpha και Sparc. Εάν θέλετε να χρησιμοποιήσετε τους πυρήνες που επιδιορθώθηκαν από τον Alan Cox, τότε θα πρέπει να διαβάσετε τη λίστα αλληλογραφίας του πυρήνα του Linux και θα πρέπει να μάθετε πού μπορείτε να βρείτε τις απαραίτητες ενημερώσεις κώδικα. Ο κύριος διακομιστής για αυτήν την ενημέρωση κώδικα είναι ο http://www.uio.no/~trondmy/src/, σε περίπτωση που θέλετε να δοκιμάσετε να το εφαρμόσετε σε έναν κανονικό πυρήνα της σειράς 2.2. Αυτή η ενημέρωση κώδικα πιθανότατα δεν θα συμπεριληφθεί στο Linux 2.4 επειδή απαιτεί πάρα πολλές αλλαγές κατά τη διάρκεια του τρέχοντος κύκλου ανάπτυξης. Μείνετε συντονισμένοι για το Linux 2.5.

    Το trondmy έχει επίσης ενημερώσεις κώδικα για να κάνει το Linux να χρησιμοποιεί NFS έκδοση 3, θα σας επιτρέψουν επίσης να χρησιμοποιήσετε το tcp ως μηχανισμό μεταφοράς αντί για UDP. Το NFSv3 είναι πολύ καλό για δίκτυα με μεγάλο αριθμό αναπηδήσεων, καθώς και για δίκτυα όπου η απώλεια πακέτων δεν είναι μηδενική ή όπου η καθυστέρηση είναι πολύ υψηλή.

    Θα πρέπει να διαβάσετε τη λίστα αλληλογραφίας του πυρήνα του Linux εάν πρόκειται να χρησιμοποιήσετε αυτές τις ενημερώσεις κώδικα, καθώς κατά καιρούς εντοπίζονται κάποια δυσάρεστα σφάλματα σε αυτά. Σφάλματα που καταστρέφουν τα αρχεία σας. Παρακαλώ λοιπόν να είστε προσεκτικοί.

    Υπηρέτης

    Ο δαίμονας διακομιστή nfs στο Linux 2.2 και νεότερες εκδόσεις ονομάζεται "knfsd". Είναι δύσκολο να εγκατασταθεί. Μπορείτε να το διαμορφώσετε μόνοι σας ή να εγκαταστήσετε αυτά που σας προσφέρουν τα SuSE, Red Hat και άλλα με τη μορφή πακέτων πυρήνα σειράς 2.2. Συγνώμη. Αν και μπορείτε ακόμα να χρησιμοποιήσετε το παλιό nfsd στο Linux 2.2. Είναι αργό αλλά εύκολο στην εγκατάσταση.

    Διακομιστής NFS σε δισκέτα

    Αυτή η ενότητα γράφτηκε από τον Ron Peters, [email προστατευμένο]. Εξηγεί πώς να ρυθμίσετε έναν διακομιστή NFS κατά την εκκίνηση από μια δισκέτα. Αυτό επινοήθηκε αρχικά για να παρέχει πρόσβαση NFS σε ένα cdrom σε άλλο μηχάνημα χωρίς Linux/UNIX για εγκατάσταση Linux σε μηχάνημα που δεν διαθέτει cdrom.