it-swarm.com.de

Wie exportiere und importiere ich NFS-Freigaben, die auch Unterverzeichnisse als Mountpunkte haben?

Server A exportiert das Verzeichnis /srv Über NFS mit der Option nohide. Ein Unterverzeichnis in /srv, /srv/foo, Ist ein Mountpunkt für einen anderen Speicherort auf dem NFS-Server, wobei die Option --bind Verwendet wird

server# mount --bind /bar/foo/ /srv/foo/

Client B importiert A:/srv Und stellt es mit NFS auf /mnt/srv Mounten. Der Inhalt von /mnt/srv Ist der Inhalt von A:/srv.

Das Problem ist, dass /mnt/srv/foo Leer ist, während ich erwarte, den Inhalt von A:/bar/foo/ Dort zu sehen.

Wie exportiere und importiere ich NFS-Freigaben, die auch Unterverzeichnisse als Mountpunkte haben?

23
mbaitoff

Anscheinend muss jeder Mount-Unterpunkt vom NFS-Server exportiert werden, um für Clients sichtbar zu sein. In der Situation über dem /etc/exports Datei sollte wie folgt aussehen:

/srv        *(rw,fsid=0,nohide,no_subtree_check)
/srv/foo    *(rw,nohide,no_subtree_check)

Importieren Sie dann /srv auf dem Client mit Option -t nfs macht beide /srv und /srv/foo richtig verfügbar.

bearbeiten durch OP

diese Linie

    /srv/foo    *(rw,fsid=0,nohide,no_subtree_check)

hat in meinem Fall statt funktioniert

    /srv/foo    *(rw,nohide,no_subtree_check) 
8
mbaitoff

crossmnt ist dein Freund.

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)
29

Ich war auf dieses Problem gestoßen, als ich der Anleitung Diskless Arch gefolgt war, und es hat mich wirklich verlangsamt. Ich werde meine Erkenntnisse hier teilen, da ich gespannt bin, ob dies für andere funktionieren wird.

Gemäß dem Diskless-Handbuch habe ich das Root-Dateisystem des plattenlosen Clients (die tatsächlichen Daten, die ich exportieren muss) in einem Loopback-Image, das auf /srv/des1 Bereitgestellt wurde:

/srv/des1.img on /srv/des1 type btrfs (rw,relatime,compress=lzo,discard,space_cache)

Ich habe dann einen Mountpoint /nfs/des1 Erstellt, dann den Mount ausgeführt und bestätigt, dass ich alles sehen kann:

# mkdir -p /nfs/des1 
# mount --bind /srv/des1 /nfs/des1
# ls -l /nfs/des1
bin  boot  dev  usr  #[SNIP]

In Bezug auf die Anleitung Arch NFS habe ich dann Folgendes in /etc/exports Auf dem Server abgelegt:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)

Ich habe dann einen exportfs -rav Auf dem Server ausgeführt, um diese Änderungen zu übernehmen.

Allerdings habe ich dann die Freigabe auf dem Testclient mit mount server:/des1 /mnt/tmp Bereitgestellt, nur um festzustellen, dass es sich um ein leeres Verzeichnis handelt, als ich erwartet hatte, dass das plattenlose Root-Dateisystem vorhanden ist.

Zu diesem Zeitpunkt habe ich so gut wie alles versucht, bis mich etwas zu dieser Option in der Manpage exports führte:

crossmnt
    This option is similar to nohide but it makes it possible for clients
    to move from the filesystem marked with crossmnt to exported filesystems
    mounted on it. Thus when a child filesystem "B" is mounted on a parent "A",
    setting crossmnt on "A" has the same effect as setting "nohide" on B. 

Nachdem ich alles andere ausprobiert hatte, tauschte ich dies aus, sodass mein /etc/exports So aussah:

/nfs/      *(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check)

Nachdem Sie den Manpage-Eintrag gelesen haben, würden Sie denken, dass dies den gleichen Effekt wie der vorherige Code haben würde, aber als ich exportfs -rav Erneut ausführte, um die Änderungen zu registrieren, versuchte ich, erneut vom Client zu mounten, und es funktionierte!

10
v25

Ich wollte das eigentlich auch tun, aber es scheint, dass es Probleme mit dieser Idee gibt, da die NFS-Clients erwarten, dass die Inode-Anzahl von Dateien innerhalb des Clients eindeutig ist. Ansicht einer einzelnen Halterung.

Die Probleme werden in diesem Blog-Beitrag (nicht von mir) beschrieben: http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

Ich habe beschlossen, die Dateisysteme separat zu mounten und sie miteinander zu verknüpfen, was für alle NFS-Clients funktionieren sollte.

2
Bluby

HINWEIS: nur Einzelbenutzer aktiviert

Was hinzugefügt wird, ist eine Reihe von Änderungen an der Server- und Client-Seite. Auf der Serverseite /etc/exports und /etc/fstab auf Client-Seite.

Serverseite

  • Linux Mint 18.3 Sylvia 32-Bit
  • Kernel Linux 4.4.0-138-generic i686
  • Asus eeepc

    $ cat /etc/exports 
    #insert shares (one for each mounted partition sub-folder):      
    /nfsshare/ /192.168.1.155(rw,no_root_squash,no_subtree_check,fsid=root,crossmnt)
    /nfsshare/media/ 192.168.1.155(rw,no_root_squash,no_subtree_check)
    /nfsshare/extra/ /192.168.1.155(rw,no_root_squash,no_subtree_check)   
    
    $ cat /etc/fstab  
    #shared media files on /media/ed/
    /media/ed/ /nfsshare/ nfs bind 0 0
    /media/ed/media/ /nfsshare/media/ nfs bind 0 0
    /media/ed//extra /nfsshare/extra/ nfs bind 0 0
    

Client-Seite

  • Linux Mint 19 Tara 64-Bit
  • Kernel Linux 4.15.0-38-generic x86_64

    $ cat /etc/fstab
    #NFS Shares line added
    192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show
    
1
Ed Iglehart