Wie exportiere und importiere ich NFS-Freigaben ordnungsgemäß, die auch Unterverzeichnisse als Einhängepunkte haben?

Wie exportiere und importiere ich NFS-Freigaben ordnungsgemäß, die auch Unterverzeichnisse als Einhängepunkte haben?

Server Aexportiert Verzeichnis /srvüber NFS mit Option nohide. Ein Unterverzeichnis innerhalb von /srv, /srv/foo, ist ein Einhängepunkt für einen anderen Speicherort auf dem NFS-Server mit --bindOption, wie

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

Der Client Bimportiert A:/srvund mountet es /mnt/srvmittels NFS. Der Inhalt von /mnt/srvist der Inhalt von A:/srv.

Das Problem ist, dass es /mnt/srv/fooleer ist, obwohl ich erwarte, den Inhalt A:/bar/foo/dort zu sehen.

Wie exportiere und importiere ich NFS-Freigaben ordnungsgemäß, die auch Unterverzeichnisse als Einhängepunkte haben?

Antwort1

crossmntist dein Freund.

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

Antwort2

Ich bin auf dieses Problem gestoßen, als ich denPlattenloser ArchAnleitung, und es hat mich wirklich ausgebremst. Ich werde meine Erkenntnisse hier teilen, da ich neugierig bin, ob das bei anderen funktioniert.

Gemäß der Diskless-Anleitung habe ich das Root-Dateisystem des Diskless-Clients (die eigentlichen Daten, die ich exportieren muss) in einem Loopback-Image, das auf folgendem Server gemountet wurde /srv/des1:

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

Anschließend habe ich einen Einhängepunkt erstellt /nfs/des1, die Einhängung 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 aufArch NFSAnleitung habe ich dann folgendes /etc/exportsauf dem Server eingetragen:

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

exportfs -ravUm diese Änderungen anzuwenden, habe ich dann einen auf dem Server ausgeführt .

Allerdings habe ich dann die Freigabe mit folgendem Befehl auf dem Testclient gemountet: mount server:/des1 /mnt/tmpund musste feststellen, dass es sich um ein leeres Verzeichnis handelt, obwohl ich erwartet hatte, dass das Diskless-Root-Dateisystem dort vorhanden ist.

Zu diesem Zeitpunkt habe ich so ziemlich alles versucht, bis mich etwas auf diese Option in der exportsManpage 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, habe ich es umgestellt, sodass meins /etc/exportsso aussah:

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

Wenn man den Manpage-Eintrag gelesen hat, könnte man meinen, dass dies dieselbe Wirkung wie der vorherige Code hätte. Aber als ich es exportfs -raverneut ausführte, um die Änderungen zu registrieren, und dann versuchte, es vom Client aus erneut zu mounten, funktionierte es!

Antwort3

Es sieht so aus, als ob jeder Mount-Unterpunkt vom NFS-Server exportiert werden muss, um für Clients sichtbar zu sein. In der obigen Situation /etc/exportssollte die Datei wie folgt aussehen:

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

Anschließend werden durch den Import /srvauf dem Client mit der Option beide ordnungsgemäß verfügbar gemacht.-t nfs/srv/srv/foo

bearbeitet von OP

diese Linie

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

hat in meinem Fall funktioniert, anstatt

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

Antwort4

NOTIZ:nur Einzelbenutzer aktiviert

Es werden eine Reihe von Änderungen auf der Server- und der Client-Seite hinzugefügt. Auf der Server- /etc/exportsund /etc/fstabder Client-Seite.

Serverseitig

  • 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
    

verwandte Informationen