Server A
exportiert 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 --bind
Option, wie
server# mount --bind /bar/foo/ /srv/foo/
Der Client B
importiert A:/srv
und mountet es /mnt/srv
mittels NFS. Der Inhalt von /mnt/srv
ist der Inhalt von A:/srv
.
Das Problem ist, dass es /mnt/srv/foo
leer 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
crossmnt
ist 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/exports
auf dem Server eingetragen:
/nfs/ *(rw,no_root_squash,no_subtree_check,fsid=root)
/nfs/des1/ *{rw,no_root_squash,no_subtree_check,nohide)
exportfs -rav
Um 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/tmp
und 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 exports
Manpage 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/exports
so 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 -rav
erneut 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/exports
sollte 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 /srv
auf 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/exports
und /etc/fstab
der 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