Bagaimana cara mengekspor dan mengimpor saham NFS dengan benar yang memiliki subdirektori sebagai titik pemasangan juga?

21

Server Amengekspor direktori /srvmelalui NFS dengan opsi nohide. Subdirektori di dalam /srv,, /srv/fooadalah titik pemasangan untuk lokasi lain di server NFS menggunakan --bindopsi, seperti

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

Klien Bmengimpor A:/srvdan memasangnya /mnt/srvmenggunakan NFS. Isi /mnt/srvadalah isi A:/srv.

Masalahnya adalah itu /mnt/srv/fookosong, sementara saya mengharapkan untuk melihat konten di A:/bar/foo/sana.

Bagaimana cara mengekspor dan mengimpor saham NFS dengan benar yang memiliki subdirektori sebagai titik pemasangan juga?

mbaitoff
sumber
Mungkin lebih mudah menggunakan symlink di A dari /srv/foo --> /bar/foo?
ckhan
1
Saya mencoba ini. Ini akan mencoba untuk masuk ke /bar/foomesin klien B, bukan di server A.
mbaitoff

Jawaban:

27

crossmnt adalah temanmu

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

Saya telah menemukan masalah ini saat mengikuti panduan Diskless Arch , dan itu benar-benar memperlambat saya. Saya akan membagikan temuan saya di sini, karena saya ingin tahu apakah ini akan berhasil untuk orang lain.

Sesuai panduan Diskless, saya memiliki sistem file root klien diskless (data aktual yang perlu saya ekspor) dalam gambar loopback, yang telah dipasang di /srv/des1:

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

Saya kemudian membuat mountpoint /nfs/des1kemudian menjalankan mount, dan mengkonfirmasi bahwa saya bisa melihat semuanya:

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

Mengacu pada panduan Arch NFS , saya kemudian memasukkan yang berikut ini di /etc/exportsserver:

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

Saya kemudian menjalankan sebuah exportfs -ravdi server untuk menerapkan perubahan ini.

Namun saya kemudian me-mount share pada klien uji dengan: mount server:/des1 /mnt/tmphanya untuk menemukan itu adalah direktori kosong, ketika saya mengharapkan sistem disk-root-files berada di sana.

Pada tahap ini saya mencoba hampir semuanya sampai sesuatu menuntun saya ke opsi ini di exportshalaman manual:

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. 

Jadi setelah mencoba yang lain saya bertukar sekitar ini sehingga saya /etc/exportstampak seperti ini:

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

Setelah membaca entri halaman manual Anda akan berpikir ini akan memiliki efek yang sama dengan kode sebelumnya, tetapi ketika saya berlari exportfs -ravlagi untuk mendaftarkan perubahan, kemudian mencoba untuk remount dari klien dan itu berhasil!

v25
sumber
8

Sepertinya setiap sub-titik pemasangan harus diekspor oleh server NFS agar dapat terlihat oleh klien. Dalam situasi di atas /etc/exportsfile tersebut akan terlihat seperti berikut:

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

Kemudian, mengimpor /srvpada klien dengan opsi -t nfsakan membuat kedua /srvdan /srv/foobenar tersedia.

sunting oleh OP

garis ini

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

telah bekerja dalam kasus saya, bukan

    /srv/foo    *(rw,nohide,no_subtree_check) 
mbaitoff
sumber
1
crossmnt pada root?
meffect
2

Saya benar-benar ingin melakukan ini juga, tetapi tampaknya ada masalah dengan ide ini karena klien NFS berharap jumlah inode file menjadi unik dalam pandangan klien tentang satu mount.

Masalahnya dirinci dalam posting blog ini (bukan oleh saya): http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

Saya telah memutuskan untuk memasang sistem file secara terpisah dan menghubungkannya bersama, yang seharusnya bekerja untuk semua klien NFS.

Bluby
sumber
1
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
slm
0

CATATAN: hanya pengguna tunggal yang diaktifkan

Apa yang ditambahkannya adalah satu set suntingan ke sisi server dan sisi klien. Di sisi server, /etc/exportsdan /etc/fstabdi sisi klien.

Sisi server

  • 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
    

Sisi klien

  • Linux Mint 19 Tara 64-bit
  • Kernel Linux 4.15.0-38-generik 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
sumber
1
Apa ini? Apakah ini file yang satu? Banyak file? Silakan gunakan alat pemformatan untuk memformat jawaban Anda agar lebih jelas. Bisakah Anda mengedit dan menjelaskan bagaimana jawaban Anda menjawab pertanyaan?
terdon
(1) Gunakan kata-kata Anda. (2) Apa penawaran ini yang belum disajikan?
G-Man Mengatakan 'Reinstate Monica'
maaf untuk itu.
Ed Iglehart