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

21

Server Aexportiert Verzeichnis /srvvia NFS mit Option nohide. Ein Unterverzeichnis innerhalb /srv, /srv/fooist ein Punkt für eine andere Stelle auf dem NFS - Server unter Verwendung von Mount - --bindOption, wie

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

Der Client Bimportiert A:/srvund hängt es /mnt/srvmithilfe von NFS ein. Inhalte von /mnt/srvsind die Inhalte von A:/srv.

Das Problem ist, dass /mnt/srv/fooleer 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 Mount-Punkte haben?

mbaitoff
quelle
Vielleicht einfacher, einfach Symlink auf A von zu verwenden /srv/foo --> /bar/foo?
ckhan
1
Ich habe es versucht. Dies würde versuchen, auf den /bar/fooClient-Rechner zu gelangen B, nicht auf den Server A.
mbaitoff

Antworten:

27

crossmnt ist dein Freund.

/srv        *(rw,fsid=0,no_subtree_check,crossmnt)
anatoly techtonik
quelle
10

Ich bin auf dieses Problem gestoßen, als ich dem Diskless Arch- Handbuch gefolgt bin , und es hat mich wirklich verlangsamt. Ich werde meine Erkenntnisse hier mitteilen, da ich neugierig bin, ob dies für irgendjemanden anderen funktioniert.

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

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

Ich habe dann einen /nfs/des1Mountpunkt erstellt und 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 das Arch NFS- Handbuch habe ich dann Folgendes /etc/exportsauf dem Server eingefügt:

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

Ich habe dann eine exportfs -ravauf dem Server ausgeführt, um diese Änderungen zu übernehmen.

Allerdings habe ich dann die Freigabe auf dem Testclient gemountet mit: mount server:/des1 /mnt/tmpnur um festzustellen, dass es ein leeres Verzeichnis ist, als ich erwartet hatte, dass das plattenlose Root-Dateisystem da ist.

Zu diesem Zeitpunkt habe ich so gut wie alles versucht, bis mich etwas zu dieser Option in der exportsManpage geführt hat:

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 es so /etc/exportsaus, dass es 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 -raverneut ausgeführt habe, um die Änderungen zu registrieren, habe ich versucht, vom Client erneut zu mounten, und es hat funktioniert!

v25
quelle
8

Anscheinend muss jeder Mount-Unterpunkt vom NFS-Server exportiert werden, um für Clients sichtbar zu sein. In der obigen Situation sollte die /etc/exportsDatei folgendermaßen aussehen:

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

Dann Import /srvmit Option auf dem Client -t nfsmachen beide /srvund /srv/fooordnungsgemäß zur Verfügung.

bearbeitet von OP

diese Linie

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

hat bei mir statt gearbeitet

    /srv/foo    *(rw,nohide,no_subtree_check) 
mbaitoff
quelle
1
Crossmnt auf der Wurzel?
Effekt
2

Eigentlich wollte ich das auch, aber es scheint, dass es Probleme mit dieser Idee gibt, da die NFS-Clients erwarten, dass die Anzahl der Inode-Dateien in der Ansicht des Clients für einen einzelnen Mount eindeutig ist .

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 einzuhängen und miteinander zu verknüpfen, was für alle NFS-Clients funktionieren sollte.

Bluby
quelle
1
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
slm
0

HINWEIS: Nur Einzelbenutzer aktiviert

Was hinzugefügt wird, ist eine Reihe von Änderungen auf Server- und Clientseite. Auf der Serverseite /etc/exportsund /etc/fstabauf der Clientseite.

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-generisches x86_64

    $ cat /etc/fstab
    #NFS Shares line added
    192.168.1.158:/nfsshare /mnt/share nfs rw,soft,intr,noatime,x-gvfs-show
    
Ed Iglehart
quelle
1
Was ist das? Ist das eine Datei? Viele Dateien? Bitte verwenden Sie die Formatierungswerkzeuge, um Ihre Antwort der Übersichtlichkeit halber zu formatieren. Können Sie die Frage bearbeiten und erläutern, wie Ihre Antwort sie beantwortet?
Terdon
(1) Verwenden Sie Ihre Worte. (2) Was bedeutet dieses Angebot, das noch nicht vorgestellt wurde?
G-Man sagt, dass Monica
Entschuldigung dafür.
Ed Iglehart