Come esportare e importare correttamente le condivisioni NFS che hanno sottodirectory anche come punti di montaggio?


21

Il server Aesporta la directory /srvtramite NFS con l'opzione nohide. Una sottodirectory all'interno di /srv, /srv/fooè un punto di montaggio per un'altra posizione sul server NFS usando l' --bindopzione, come

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

Il client Bimporta A:/srve lo monta /mnt/srvutilizzando NFS. I contenuti di /mnt/srvsono i contenuti di A:/srv.

Il problema è che /mnt/srv/fooè vuoto, mentre mi aspetto di vederne il contenuto A:/bar/foo/.

Come esportare e importare correttamente le condivisioni NFS che hanno sottodirectory anche come punti di montaggio?


Forse è più semplice usare il collegamento simbolico su A da /srv/foo --> /bar/foo?
Ckhan,

1
Ci ho provato Ciò proverebbe ad accedere al /bar/foocomputer client B, non al server A.
mbaitoff,

Risposte:



10

Mi ero imbattuto in questo problema mentre seguivo la guida di Diskless Arch e mi ha davvero rallentato. Condividerò qui i miei risultati, poiché sono curioso di sapere se funzionerà per chiunque altro.

Secondo la guida Diskless ho il filesystem di root del client diskless (i dati effettivi che devo esportare) in un'immagine di loopback, che è stata montata su /srv/des1:

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

Ho quindi creato un mountpoint, /nfs/des1quindi eseguo il mount e confermo che posso vedere tutto:

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

Facendo riferimento alla guida di Arch NFS , ho quindi inserito /etc/exportssul server quanto segue :

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

Ho quindi eseguito un exportfs -ravserver sul server per applicare queste modifiche.

Tuttavia ho quindi montato la condivisione sul client di test con: mount server:/des1 /mnt/tmpsolo per scoprire che è una directory vuota, quando mi aspettavo che il filesystem rootless diskless fosse lì.

A questo punto ho provato praticamente tutto fino a quando qualcosa non mi ha portato a questa opzione nella exportspagina man:

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. 

Quindi dopo aver provato tutto il resto ho scambiato questo in modo che il mio /etc/exportsassomigliasse a questo:

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

Dopo aver letto la voce della pagina man, penseresti che ciò avrebbe lo stesso effetto del codice precedente, ma quando sono corso di exportfs -ravnuovo per registrare le modifiche, ho provato a rimontare dal client e ha funzionato!


8

Sembra che ogni punto secondario di montaggio debba essere esportato dal server NFS per essere visibile per i client. Nella situazione sopra il /etc/exportsfile dovrebbe essere simile al seguente:

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

Quindi, l'importazione /srvsul client con opzione -t nfsrenderà entrambi /srve /srv/foocorrettamente disponibili.

modifica per OP

questa linea

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

ha funzionato nel mio caso anziché

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

1
crossmnt sulla radice?
Meffect,

2

Volevo davvero fare anche questo, ma sembra che ci siano problemi con questa idea perché i client NFS si aspettano che i numeri di inode di file siano unici nella vista del client di un singolo mount.

I problemi sono dettagliati in questo post del blog (non da me): http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

Ho deciso di montare i filesystem separatamente e di collegarli insieme, il che dovrebbe funzionare per tutti i client NFS.


1
Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
slm

0

NOTA: abilitato per un solo utente

Ciò che aggiunge è una serie di modifiche sul lato server e lato client. Sul lato server /etc/exportse /etc/fstabsul lato client.

Lato server

  • Linux Mint 18.3 Sylvia a 32 bit
  • Kernel Linux 4.4.0-138-generico 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
    

Dalla parte del cliente

  • Linux Mint 19 Tara 64-bit
  • Kernel Linux 4.15.0-38-generico 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
Cos'è questo? Questo è un file? Molti file? Utilizza gli strumenti di formattazione per formattare la tua risposta per maggiore chiarezza. Potresti modificare e spiegare come la tua risposta risponde alla domanda?
terdon

(1) Usa le tue parole. (2) Cosa offre questa offerta che non è già stata presentata?
G-Man dice "Ripristina Monica" il

mi scuso per quello.
Ed Iglehart,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.