วิธีการส่งออกและนำเข้าการแชร์ NFS ที่มีไดเรกทอรีย่อยเป็นจุดเชื่อมต่ออย่างถูกต้องเช่นกัน


21

เซิร์ฟเวอร์Aส่งออกไดเรกทอรี/srvผ่าน NFS nohideกับตัวเลือก ไดเรกทอรีย่อยภายใน/srv, /srv/fooเป็นจุดติดตั้งบนเซิร์ฟเวอร์ NFS อื่นโดยใช้--bindตัวเลือกเช่น

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

ไคลเอ็นต์Bนำเข้าA:/srvและเมานต์/mnt/srvโดยใช้ NFS เนื้อหาของมีเนื้อหาของ/mnt/srvA:/srv

ปัญหาคือที่/mnt/srv/fooว่างเปล่าในขณะที่ฉันคาดหวังที่จะเห็นเนื้อหาของที่A:/bar/foo/นั่น

วิธีการส่งออกและนำเข้าการแชร์ NFS ที่มีไดเรกทอรีย่อยเป็นจุดเชื่อมต่ออย่างถูกต้องเช่นกัน


อาจจะง่ายกว่าที่จะใช้ symlink กับ A จาก/srv/foo --> /bar/foo?
ckhan

1
ฉันลองสิ่งนี้ นี้จะพยายามที่จะได้รับการ/bar/fooบนเครื่องไคลเอ็นต์ไม่ได้อยู่ในเซิร์ฟเวอร์B A
mbaitoff

คำตอบ:



10

ฉันสะดุดกับปัญหานี้ในขณะที่ทำตามคู่มือDiskless Archและทำให้ฉันช้าลงอย่างมาก ฉันจะแบ่งปันสิ่งที่ค้นพบของฉันที่นี่เพราะฉันอยากรู้ว่าสิ่งนี้จะได้ผลกับคนอื่นหรือไม่

ตาม Diskless Guide ฉันมีระบบไฟล์รูทของไคลเอ็นต์แบบ diskless (ข้อมูลจริงที่ฉันต้องการส่งออก) ในรูปลูปแบ็คซึ่งติดตั้งแล้ว/srv/des1:

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

จากนั้นฉันสร้างจุดเมานท์/nfs/des1จากนั้นเรียกใช้การเมานต์และยืนยันว่าฉันเห็นทุกสิ่ง:

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

อ้างอิงถึงคำแนะนำArch NFSฉันก็ใส่สิ่งต่อไปนี้/etc/exportsลงในเซิร์ฟเวอร์:

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

จากนั้นฉันก็รันexportfs -ravบนเซิร์ฟเวอร์เพื่อใช้การเปลี่ยนแปลงเหล่านี้

อย่างไรก็ตามฉันได้ติดตั้งการใช้งานร่วมกันบนไคลเอนต์ทดสอบด้วย: mount server:/des1 /mnt/tmpเพียงเพื่อจะพบว่าเป็นไดเรกทอรีว่างเปล่าเมื่อฉันคาดหวังว่าระบบ diskless-root-files จะอยู่ที่นั่น

ในขั้นตอนนี้ฉันพยายามทำทุกอย่างจนบางสิ่งบางอย่างนำฉันไปสู่ตัวเลือกนี้ในexportsman page:

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. 

ดังนั้นเมื่อได้ลองทุกอย่างอื่นแล้วฉันได้ลองสลับมันเป็น/etc/exportsแบบนี้:

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

เมื่ออ่านรายการ man page คุณจะคิดว่านี่จะมีผลเช่นเดียวกับรหัสก่อนหน้า แต่เมื่อฉันรันexportfs -ravอีกครั้งเพื่อลงทะเบียนการเปลี่ยนแปลงจากนั้นลองส่งเมานท์ใหม่จากไคลเอนต์และใช้งานได้!


8

ดูเหมือนว่าทุกจุดเชื่อมต่อย่อยจะต้องส่งออกโดยเซิร์ฟเวอร์ NFS เพื่อให้ลูกค้ามองเห็นได้ ในสถานการณ์ข้างต้น/etc/exportsไฟล์ควรมีลักษณะดังต่อไปนี้:

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

จากนั้นการอิมพอร์ต/srvไคลเอ็นต์ด้วยตัวเลือก-t nfsจะทำให้ใช้ได้/srvและ/srv/fooเหมาะสม

แก้ไขโดย OP

บรรทัดนี้

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

ได้ทำงานในกรณีของฉันแทน

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

1
crossmnt บนราก?
meffect

2

ฉันต้องการทำเช่นนี้จริงๆ แต่ดูเหมือนว่ามีปัญหากับแนวคิดนี้เนื่องจากไคลเอนต์ NFS คาดหวังว่าจำนวนไฟล์ inode จะไม่ซ้ำกันในมุมมองของลูกค้าของเมานต์เดียว

ปัญหามีรายละเอียดในโพสต์บล็อกนี้ (ไม่ใช่ฉัน): http://utcc.utoronto.ca/~cks/space/blog/unix/MultiFilesystemNFSIssue

ฉันตัดสินใจที่จะเมานต์ระบบไฟล์แยกจากกันและเชื่อมโยงเข้าด้วยกันซึ่งควรทำงานกับไคลเอนต์ NFS ทั้งหมด


1
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนที่สำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
slm

0

หมายเหตุ:เปิดใช้งานผู้ใช้คนเดียวเท่านั้น

สิ่งที่เพิ่มเข้ามาคือชุดการแก้ไขฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ บนฝั่งเซิร์ฟเวอร์/etc/exportsและ/etc/fstabฝั่งไคลเอ็นต์

ฝั่งเซิร์ฟเวอร์

  • Linux Mint 18.3 Sylvia 32 บิต
  • เคอร์เนลลินุกซ์ 4.4.0-138-i686 ทั่วไป
  • อัสซุส 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
    

ด้านลูกค้า

  • Linux Mint 19 Tara 64- บิต
  • เคอร์เนลลินุกซ์ 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
นี่คืออะไร? เป็นไฟล์เดียวหรือไม่ ไฟล์มากมาย? โปรดใช้เครื่องมือการจัดรูปแบบเพื่อจัดรูปแบบคำตอบของคุณเพื่อความชัดเจนคุณสามารถแก้ไขและอธิบายว่าคำตอบของคุณตอบคำถามได้อย่างไร
terdon

(1) ใช้คำพูดของคุณ (2) ข้อเสนอนี้ที่ยังไม่ได้นำเสนอมีอะไรบ้าง
G-Man กล่าวว่า 'Reinstate Monica'

ขอโทษสำหรับสิ่งนั้น
Ed Iglehart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.