Jak poprawnie eksportować i importować udziały NFS, które mają podkatalogi jako punkty podłączenia?


21

Serwer Aeksportuje katalog /srvprzez NFS z opcją nohide. Podkatalog wewnątrz /srv, /srv/foojest to punkt montowania innej lokalizacji na serwerze NFS przy użyciu --bindopcji, takich jak

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

Klient Bimportuje A:/srvi montuje go przy /mnt/srvużyciu NFS. Zawartość /mnt/srvjest zawartością A:/srv.

Problem w tym, że /mnt/srv/foojest pusty, podczas gdy spodziewam się zobaczyć jego zawartość A:/bar/foo/.

Jak poprawnie eksportować i importować udziały NFS, które mają podkatalogi jako punkty podłączenia?


Może łatwiej jest po prostu użyć dowiązania symbolicznego na A z /srv/foo --> /bar/foo?
ckhan

1
Próbowałem tego. Spróbowałoby to dostać się /bar/foona maszynie klienta B, a nie na serwerze A.
mbaitoff,

Odpowiedzi:



10

Natknąłem się na ten problem podczas korzystania z przewodnika Diskless Arch , co naprawdę mnie spowolniło. Podzielę się tutaj swoimi odkryciami, ponieważ jestem ciekawy, czy to zadziała dla kogokolwiek innego.

Zgodnie z przewodnikiem bezdyskowym mam główny system plików klienta bezdyskowego (rzeczywiste dane, które muszę wyeksportować) w obrazie pętli zwrotnej, który został zamontowany na /srv/des1:

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

Następnie utworzyłem punkt montowania, /nfs/des1a następnie uruchom go i potwierdź, że wszystko widzę:

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

Odnosząc się do przewodnika Arch NFS , następnie umieściłem /etc/exportsna serwerze:

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

Następnie uruchomiłem exportfs -ravna serwerze, aby zastosować te zmiany.

Jednak potem zamontowałem udział na kliencie testowym za pomocą: mount server:/des1 /mnt/tmptylko po to, by znaleźć pusty katalog, kiedy spodziewałem się, że istnieje system plików root-bezdyskowych.

Na tym etapie próbowałem prawie wszystkiego, aż coś doprowadziło mnie do tej opcji na exportsstronie podręcznika :

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. 

Więc po wypróbowaniu wszystkiego innego zamieniłem to, więc /etc/exportswyglądałem tak:

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

Po przeczytaniu wpisu strony podręcznika można by pomyśleć, że będzie to miało taki sam efekt jak poprzedni kod, ale kiedy exportfs -ravponownie uruchomiłem program, aby zarejestrować zmiany, spróbowałem ponownie połączyć się z klientem i zadziałało!


8

Wygląda na to, że każdy podpunkt podłączenia musi zostać wyeksportowany przez serwer NFS, aby był widoczny dla klientów. W powyższej sytuacji /etc/exportsplik powinien wyglądać następująco:

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

Następnie importowanie /srvna kliencie z opcją -t nfsspowoduje zarówno /srvi/srv/foo właściwie niedostępna.

edycja przez OP

ta linia

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

działał w moim przypadku zamiast

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

1
crossmnt w katalogu głównym?
meffect

2

Naprawdę też chciałem to zrobić, ale wydaje się, że z tym pomysłem są problemy, ponieważ klienci NFS oczekują, że liczba i-węzłów plików będzie unikalna w widoku klienta na jedno podłączenie.

Problemy są szczegółowo opisane w tym poście na blogu (nie przeze mnie): http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

Zdecydowałem się zamontować systemy plików osobno i połączyć je symbolicznie, co powinno działać dla wszystkich klientów NFS.


1
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
slm

0

UWAGA: włączony tylko jeden użytkownik

To, co dodaje, to zestaw edycji po stronie serwera i klienta. Po stronie serwera /etc/exportsi/etc/fstab po stronie klienta.

Po stronie serwera

  • Linux Mint 18.3 Sylvia 32-bit
  • Jądro 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
    

Strona klienta

  • Linux Mint 19 Tara 64-bit
  • Jądro 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
Co to jest? Czy to jest jeden plik? Wiele plików? Skorzystaj z narzędzi formatowania, aby sformatować swoją odpowiedź w celu zapewnienia jej jasności. Czy możesz edytować i wyjaśnić, w jaki sposób odpowiedź odpowiada na pytanie?
terdon

(1) Użyj swoich słów. (2) Co oferuje ta oferta, która nie została jeszcze przedstawiona?
G-Man mówi „Przywróć Monikę”

przepraszam za to.
Ed Iglehart
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.