it-swarm-eu.dev

Jak správně exportovat a importovat NFS sdílené položky, které mají také podadresáře jako připojovací body?

Server A exportuje adresář /srv via NFS s volbou nohide. Podadresář uvnitř /srv, /srv/foo, je přípojný bod pro jiné umístění na serveru NFS pomocí --bind možnost, jako

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

Klient B importuje A:/srv a připojí jej na /mnt/srv pomocí NFS. Obsah /mnt/srv jsou obsahem A:/srv.

Problém je v tom, že /mnt/srv/foo je prázdné, zatímco očekávám, že uvidím obsah A:/bar/foo/ tam.

Jak správně exportovat a importovat NFS sdílené položky, které mají také podadresáře jako připojovací body?

23
mbaitoff

Vypadá to, že každý bod připojení musí být exportován serverem NFS, aby byl pro klienty viditelný. V situaci nad /etc/exports soubor by měl vypadat takto:

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

Poté importuje /srv na klientovi s možností -t nfs udělá obojí /srv a /srv/foo správně dostupné.

editovat OP

tento řádek

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

pracoval v mém případě místo

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

crossmnt je váš přítel.

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

Narazil jsem na tento problém, když jsem sledoval průvodce Diskless Arch a opravdu mě to zpomalilo. Zde se budu podělit o svá zjištění, protože jsem zvědavý, jestli to bude fungovat pro kohokoli jiného.

Podle průvodce bezdiskového systému mám kořenový souborový systém klienta bez disků (skutečná data, která potřebuji exportovat) v obrazu zpětné smyčky, který byl připojen na /srv/des1:

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

Poté jsem vytvořil přípojný bod /nfs/des1 poté spusťte připojení a potvrďte, že vidím vše:

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

S odkazem na průvodce Arch NFS jsem do /etc/exports na serveru:

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

Pak jsem spustil exportfs -rav na serveru použít tyto změny.

Poté jsem však připojil sdílenou složku na testovacího klienta pomocí: mount server:/des1 /mnt/tmp jen abych našel prázdný adresář, když jsem očekával, že tam bude bezdiskový kořenový souborový systém.

V této fázi jsem se snažil téměř o všechno, dokud mě něco nevedlo k této možnosti na stránce exports 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. 

Takže když jsem vyzkoušel všechno ostatní, vyměnil jsem to, takže můj /etc/exports vypadalo takto:

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

Po přečtení položky manuálové stránky byste si mysleli, že by to mělo stejný účinek jako předchozí kód, ale když jsem spustil exportfs -rav znovu zaregistrovat změny, pak se pokusil znovu připojit od klienta a fungovalo to!

10
v25

Opravdu jsem to chtěl také udělat, ale zdá se, že s tímto nápadem jsou problémy, protože klienti NFS očekávají, že počty souborů inode budou jedinečné v klientských pohled na jeden držák.

Problémy jsou podrobně popsány v tomto příspěvku na blogu (nikoli mně): http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

Rozhodl jsem se připojit souborové systémy samostatně a symlink je dohromady, což by mělo fungovat pro všechny klienty NFS.

2
Bluby

POZNÁMKA: povolen pouze jeden uživatel

To, co přidá, je sada úprav na straně serveru a na straně klienta. Na straně serveru /etc/exports a /etc/fstab na straně klienta.

Strana serveru

  • 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
    

Strana klienta

  • 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
    
1
Ed Iglehart