ระบบไฟล์เครือข่าย (NFS) - ระบบไฟล์เครือข่าย บริการไฟล์เครือข่าย

#image.jpg ขอให้มีช่วงเวลาที่ดี ผู้อ่านและแขกของบล็อกของฉัน มีการพักระหว่างโพสต์นานมาก แต่ฉันกลับมาต่อสู้อีกครั้ง) ในบทความวันนี้ฉันจะดู การดำเนินการโปรโตคอล NFSเช่นเดียวกับ การตั้งค่าเซิร์ฟเวอร์ NFS และไคลเอนต์ NFS บน Linux.

ความรู้เบื้องต้นเกี่ยวกับ NFS

อฟส (ระบบไฟล์เครือข่าย- ระบบไฟล์เครือข่าย) ในความคิดของฉัน - โซลูชั่นที่สมบูรณ์แบบบนเครือข่ายท้องถิ่นที่คุณต้องการอย่างรวดเร็ว (เร็วกว่าเมื่อเทียบกับ SAMBA และใช้ทรัพยากรน้อยกว่าเมื่อเปรียบเทียบกับระบบไฟล์ระยะไกลที่มีการเข้ารหัส - sshfs, SFTP ฯลฯ ... ) การแลกเปลี่ยนข้อมูลและ ความปลอดภัยของข้อมูลที่ส่งไม่ใช่สิ่งที่สำคัญที่สุด โปรโตคอล NFSอนุญาตให้คุณเมานต์ระบบไฟล์ระยะไกลบนเครือข่ายในแผนผังไดเร็กทอรีโลคัล ราวกับว่าเป็นระบบไฟล์ดิสก์ที่เมาท์

ดังนั้นแอปพลิเคชันในเครื่องจึงสามารถทำงานกับระบบไฟล์ระยะไกลได้เหมือนกับว่าเป็นระบบในเครื่อง แต่ก็ต้องระมัดระวัง(!)ด้วย การตั้งค่า NFSเนื่องจากด้วยการกำหนดค่าบางอย่าง คุณสามารถหยุดระบบปฏิบัติการของไคลเอนต์เพื่อรอ I/O ที่ไม่มีที่สิ้นสุดได้

โปรโตคอล NFSทำงานตาม โปรโตคอล RPCซึ่งยังอยู่นอกเหนือความเข้าใจของฉัน)) ดังนั้นเนื้อหาในบทความจึงคลุมเครือเล็กน้อย... ก่อนที่คุณจะสามารถใช้ NFS ไม่ว่าจะเป็นเซิร์ฟเวอร์หรือไคลเอนต์ คุณต้องตรวจสอบให้แน่ใจว่าเคอร์เนลของคุณรองรับไฟล์ NFS ระบบ. คุณสามารถตรวจสอบว่าเคอร์เนลรองรับระบบไฟล์ NFS หรือไม่โดยมองหาบรรทัดที่เกี่ยวข้องในไฟล์ /proc/filesystems:

ARCHIV ~ # grep nfs /proc/filesystems nodev nfs nodev nfs4 nodev nfsd

หากบรรทัดที่ระบุไม่อยู่ในไฟล์ /proc/filesystems คุณจะต้องติดตั้งแพ็คเกจที่อธิบายไว้ด้านล่าง สิ่งนี้น่าจะช่วยให้คุณสามารถติดตั้งโมดูลเคอร์เนลที่ต้องพึ่งพาเพื่อรองรับระบบไฟล์ที่เหมาะสม

หากหลังจากติดตั้งแพ็คเกจแล้ว หากไม่แสดงการรองรับ NFS ในไฟล์ที่กำหนด คุณจะต้องคอมไพล์เคอร์เนลใหม่เพื่อเปิดใช้งานฟังก์ชันนี้

เรื่องราว ระบบไฟล์เครือข่าย

โปรโตคอล NFSพัฒนาโดย Sun Microsystems และมีสี่เวอร์ชันในประวัติศาสตร์ NFSv1 ได้รับการพัฒนาในปี 1989 และอยู่ระหว่างการทดลอง โดยทำงานบนโปรโตคอล UDP เวอร์ชันหนึ่งอธิบายไว้ใน RFC 1094

NFSv2 เปิดตัวในปีเดียวกันปี 1989 ได้รับการอธิบายโดย RFC1094 เดียวกันและใช้โปรโตคอล UDP ในขณะเดียวกันก็อนุญาตให้อ่านอย่างน้อย 2GB จากไฟล์ NFSv3 ได้รับการสรุปในปี 1995 และอธิบายไว้ใน RFC 1813

นวัตกรรมหลักของเวอร์ชันที่สามคือการรองรับไฟล์ขนาดใหญ่ เพิ่มการรองรับโปรโตคอล TCP และแพ็กเก็ต TCP ที่ใหญ่กว่า ซึ่งช่วยเร่งประสิทธิภาพของเทคโนโลยีได้อย่างมาก NFSv4 ได้รับการสรุปในปี 2000 และอธิบายไว้ใน RFC 3010 แก้ไขในปี 2003 และอธิบายไว้ใน RFC 3530

เวอร์ชันที่ 4 มีการปรับปรุงประสิทธิภาพ การสนับสนุนวิธีการตรวจสอบความถูกต้องต่างๆ (โดยเฉพาะ Kerberos และ LIPKEY พร้อมการแนะนำโปรโตคอล RPCSEC GSS) และรายการควบคุมการเข้าถึง (ทั้งประเภท POSIX และ Windows) NFS v4.1 ได้รับการอนุมัติโดย IESG ในปี 2010 และได้รับ RFC 5661

นวัตกรรมพื้นฐานของเวอร์ชัน 4.1 คือข้อกำหนดของ pNFS - Parallel NFS ซึ่งเป็นกลไกสำหรับการเข้าถึงไคลเอ็นต์ NFS แบบขนานกับข้อมูลจากเซิร์ฟเวอร์ NFS แบบกระจายหลายตัว การมีอยู่ของกลไกดังกล่าวในระบบไฟล์เครือข่ายตัวอย่างจะช่วยสร้างระบบจัดเก็บข้อมูลและข้อมูล "คลาวด์" แบบกระจาย

เซิร์ฟเวอร์ NFS

เนื่องจากเรามี อฟส- นี้ เครือข่ายระบบไฟล์ คุณต้องกำหนดค่า สุทธิในลินุกซ์ (คุณสามารถอ่านบทความแนวคิดหลักของเครือข่ายได้) ต่อไปคุณจะต้องติดตั้งแพ็คเกจที่เหมาะสม บน Debian นี่คือแพ็คเกจ nfs-kernel-server และ nfs-common บน RedHat นี่คือแพ็คเกจ nfs-utils

นอกจากนี้ คุณต้องอนุญาตให้ปีศาจทำงานในระดับการดำเนินการที่เหมาะสม (คำสั่งใน RedHat - /sbin/chkconfig nfs on ใน Debian - /usr/sbin/update-rc.d nfs-kernel-server defaults)

แพ็คเกจที่ติดตั้งใน Debian จะเปิดตัวตามลำดับต่อไปนี้:

เก็บถาวร ~ # ls -la /etc/rc2.d/ | grep nfs lrwxrwxrwx หนึ่งรูตรูต 20 ต.ค. สิบแปด 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx หนึ่งรูทรูต 20 เจ็ด 20 ต.ค. สอง 01:23 S16nfs-kernel-server -> ../init .d/nfs-เคอร์เนลเซิร์ฟเวอร์

กล่าวอีกนัยหนึ่งมันเริ่มก่อน nfs-ทั่วไปต่อมาเซิร์ฟเวอร์เอง nfs-เคอร์เนลเซิร์ฟเวอร์.

ใน RedHat สถานการณ์จะคล้ายคลึงกัน โดยมีข้อยกเว้นเพียงอย่างเดียวคือมีการเรียกใช้สคริปต์แรก nfslockและเซิร์ฟเวอร์ถูกเรียกอย่างเรียบง่าย เอ็นเอฟเอส- เกี่ยวกับ nfs-ทั่วไปไซต์ debian บอกเราอย่างแท้จริงถึงสิ่งต่อไปนี้: ไฟล์ที่ใช้ร่วมกันสำหรับไคลเอนต์และเซิร์ฟเวอร์ NFS จะต้องติดตั้งแพ็คเกจนี้บนเครื่องที่จะทำงานเป็นไคลเอนต์หรือเซิร์ฟเวอร์ NFS

แพ็คเกจประกอบด้วยโปรแกรม: lockd, statd, showmount, nfsstat, gssd และ idmapd ด้วยการดูเนื้อหาของสคริปต์เริ่มต้น /etc/init.d/nfs-common คุณสามารถติดตามลำดับการทำงานต่อไปนี้: สคริปต์จะตรวจสอบการมีอยู่ของไฟล์ไบนารีที่เรียกใช้งานได้ /sbin/rpc.statd ตรวจสอบการมีอยู่ ในไฟล์ /etc/default/nfs-common, /etc/fstab และ /etc/exports ลักษณะที่ต้องใช้ปีศาจที่กำลังรันอยู่ idmapdและ gssd, เริ่ม daemon /sbin/rpc.statdจากนั้นก่อนที่จะเริ่ม /usr/sbin/rpc.idmapd และ /usr/sbin/rpc.gssd จะตรวจสอบการมีอยู่ของไฟล์ไบนารีที่เรียกใช้งานได้เหล่านี้ จากนั้นสำหรับปีศาจ /usr/sbin/rpc.idmapd จะตรวจสอบการมีอยู่ของโมดูลเคอร์เนล sunrpc, nfs และ nfsd และยังรองรับระบบไฟล์ rpc_pipefs ในเคอร์เนล (หรืออีกนัยหนึ่งคือการมีอยู่ของมันในไฟล์ /proc/filesystems) หากทุกอย่างสำเร็จ ระบบจะเปิดขึ้น /usr/sbin/rpc.idmapd- นอกจากนี้สำหรับปีศาจ /usr/sbin/rpc.gssdตรวจสอบโมดูลเคอร์เนล rpcsec_gss_krb5 และสตาร์ทอสูร

หากคุณดูเนื้อหา สคริปต์เริ่มต้นเซิร์ฟเวอร์ NFSบน Debian (/etc/init.d/nfs-kernel-server) จากนั้นคุณสามารถทำตามลำดับต่อไปนี้: เมื่อเริ่มต้น สคริปต์จะตรวจสอบการมีอยู่ของไฟล์ /etc/exports การมีอยู่ของโมดูลเคอร์เนล nfsd การรองรับระบบไฟล์ NFS ในเคอร์เนล Linux (คำอื่น ๆ ในไฟล์ /proc/filesystems) หากทุกอย่างเข้าที่แล้วปีศาจก็เริ่มทำงาน /usr/sbin/rpc.nfsdจากนั้นตรวจสอบว่าพารามิเตอร์ NEED_SVCGSSD ถูกตั้งค่าไว้หรือไม่ (ตั้งค่าในไฟล์ตัวเลือกเซิร์ฟเวอร์ /etc/default/nfs-kernel-server) และหากตั้งค่าไว้ จะเริ่มปีศาจ /usr/sbin/rpc.svcgssdคนสุดท้ายที่จะปล่อยปีศาจ /usr/sbin/rpc.mountd- จากสคริปท์นี้ชัดเจนว่า การทำงานของเซิร์ฟเวอร์ NFS ประกอบด้วย demons rpc.nfsd, rpc.mountd และหากใช้การตรวจสอบสิทธิ์ Kerberos แสดงว่า Demon rcp.svcgssd ปีศาจ rpc.rquotad และ nfslogd ยังคงทำงานอยู่ในหมวกสีแดง (ด้วยเหตุผลบางอย่างใน Debian ฉันไม่พบข้อมูลเกี่ยวกับปีศาจตัวนี้และสาเหตุของการหายไป เห็นได้ชัดว่ามันถูกลบไปแล้ว...)

จากนี้ก็ชัดเจนว่า เซิร์ฟเวอร์ Network File System ประกอบด้วยกระบวนการต่อไปนี้ (อ่าน - ปีศาจ)ซึ่งอยู่ในไดเร็กทอรี /sbin และ /usr/sbin:

  • rpc.statd- การตรวจสอบสถานะเครือข่ายเป็นไปไม่ได้ (aka Network Status Monitor หรือที่รู้จักในชื่อ NSM) ช่วยให้คุณสามารถยกเลิกการล็อคได้อย่างถูกต้องหลังจากเกิดข้อขัดข้อง/รีบูต หากต้องการแจ้งการละเมิด ให้ใช้โปรแกรม /usr/sbin/sm-notify Imp statd ทำงานได้ทั้งบนเซิร์ฟเวอร์และไคลเอนต์ ก่อนหน้านี้ เซิร์ฟเวอร์นี้จำเป็นสำหรับ rpc.lockd ในการทำงาน แต่ตอนนี้เคอร์เนลมีหน้าที่รับผิดชอบในการล็อค (หมายเหตุ: ถ้าจำไม่ผิด #image.jpg) (โปรแกรม RPC 100,000 20 หนึ่งและ 100,000 20 สี่ - ในเวอร์ชันใหม่)
  • rpc.lockd- Lockd lock imp (aka NFS lock manager (NLM)) จัดการคำขอล็อคไฟล์ Imp การบล็อกทำงานได้ทั้งบนเซิร์ฟเวอร์และไคลเอนต์ ลูกค้าร้องขอการล็อคไฟล์ และเซิร์ฟเวอร์อนุญาต (ล้าสมัยและไม่ได้ใช้เป็นปีศาจในการแจกแจงใหม่ ฟังก์ชั่นของมันในการแจกแจงสมัยใหม่ (ที่มีเคอร์เนลเก่ากว่า 2.2.18) ดำเนินการโดยเคอร์เนล และแม่นยำยิ่งขึ้นโดยโมดูลเคอร์เนล (lockd)) (โปรแกรม RPC 100024)
  • rpc.nfsd- ปีศาจหลักของเซิร์ฟเวอร์ NFS คือ nfsd (ในเวอร์ชันใหม่บางครั้งเรียกว่า nfsd4- Imp นี้ให้บริการคำขอไคลเอ็นต์ NFS พารามิเตอร์ RPCNFSDCOUNT ในไฟล์ /etc/default/nfs-kernel-server บน Debian และ NFSDCOUNT ในไฟล์ /etc/sysconfig/nfs บน RedHat จะกำหนดจำนวนปีศาจที่จะรัน (ค่าเริ่มต้นคือ 8) (โปรแกรม RPC 100003)
  • rpc.mountd- โดยไม่ต้องติดตั้ง NFS mountd จะจัดการคำขอของไคลเอ็นต์เพื่อเมานต์ไดเร็กทอรี mountd imp ทำงานบนเซิร์ฟเวอร์ NFS (โปรแกรม RPC 100005)
  • rpc.idmapd- idmapd สำหรับ NFSv4 บนเซิร์ฟเวอร์แปลง uid/gid ภายในของผู้ใช้เป็นรูปแบบ name@domain และบริการบนไคลเอนต์จะแปลงชื่อผู้ใช้/กลุ่มของประเภท name@domain เป็นตัวระบุผู้ใช้และกลุ่มภายในเครื่อง (ตามการกำหนดค่า ไฟล์ /etc/idmapd.conf รายละเอียดเพิ่มเติมใน man idmapd.conf):
  • นอกจากนี้ NFS เวอร์ชันเก่ายังใช้ imps: nfslogd- NFS log imp บันทึกกิจกรรมสำหรับระบบไฟล์ที่ส่งออก ทำงานบนเซิร์ฟเวอร์ NFS และ โรโควต้า- เซิร์ฟเวอร์โควต้าระยะไกลให้ข้อมูลเกี่ยวกับโควต้าผู้ใช้ในระบบไฟล์ระยะไกล สามารถทำงานได้ทั้งบนเซิร์ฟเวอร์และไคลเอนต์ (โปรแกรม RPC 100011)

ใน NFSv4 เมื่อใช้ Kerberos จะมีการเปิดตัวปีศาจเพิ่มเติม:

  • rpc.gssd- Bes NFSv4 มีวิธีการตรวจสอบสิทธิ์ผ่าน GSS-API (การตรวจสอบสิทธิ์ Kerberos) ทำงานบนไคลเอนต์และเซิร์ฟเวอร์
  • rpc.svcgssd- Imp เซิร์ฟเวอร์ NFSv4 ซึ่งให้การรับรองความถูกต้องไคลเอนต์ฝั่งเซิร์ฟเวอร์

พอร์ตแมปและโปรโตคอล RPC (Sun RPC)

นอกเหนือจากแพ็คเกจที่ระบุไว้ข้างต้น NFSv2 และ v3 ยังต้องการแพ็คเกจเพิ่มเติมเพื่อการทำงานที่ถูกต้อง พอร์ตแมป(แทนที่ด้วยการแจกแจงที่ใหม่กว่าโดยเปลี่ยนชื่อเป็น rpcbind- โดยปกติแพ็คเกจนี้จะถูกติดตั้งโดยอัตโนมัติด้วย NFS เป็นแพ็คเกจที่ต้องพึ่งพาและใช้การทำงานของเซิร์ฟเวอร์ RPC กล่าวอีกนัยหนึ่งคือรับผิดชอบในการกำหนดพอร์ตแบบไดนามิกสำหรับบริการบางอย่างที่ลงทะเบียนในเซิร์ฟเวอร์ RPC

ตามเอกสารประกอบ นี่คือเซิร์ฟเวอร์ที่แปลงหมายเลขโปรแกรม RPC (Remote Procedure Call) เป็นหมายเลขพอร์ต TCP/UDP portmap ทำงานกับหลายเอนทิตี: การเรียกหรือการร้องขอ RPC, พอร์ต TCP/UDP, เวอร์ชันโปรโตคอล (tcp หรือ udp), หมายเลขโปรแกรม และเวอร์ชันของโปรแกรม portmap demon ถูกเรียกใช้โดยสคริปต์ /etc/init.d/portmap ก่อนที่จะเริ่มเซอร์วิส NFS

กล่าวโดยย่อ งานของเซิร์ฟเวอร์ RPC (การเรียกขั้นตอนระยะไกล) คือการประมวลผลการเรียก RPC (ที่เรียกว่าขั้นตอน RPC) จากกระบวนการภายในและระยะไกล

การใช้การเรียก RPC บริการจะลงทะเบียนหรือลบตนเองไปยัง/จากตัวแมปพอร์ต (หรือที่เรียกว่าตัวแมปพอร์ต หรือที่เรียกว่า portmap หรือที่เรียกว่า portmapper หรือในเวอร์ชันใหม่ rpcbind) และไคลเอนต์ใช้การเรียก RPC เพื่อส่งคำขอไปยัง portmapper เพื่อรับข้อมูลที่เกี่ยวข้อง ชื่อเซอร์วิสโปรแกรมที่ใช้งานง่ายและหมายเลขที่เกี่ยวข้องถูกกำหนดไว้ในไฟล์ /etc/rpc

เนื่องจากบริการใด ๆ ส่งคำขอที่เกี่ยวข้องและลงทะเบียนตัวเองบนเซิร์ฟเวอร์ RPC ในตัวแมปพอร์ต เซิร์ฟเวอร์ RPC จะกำหนด แมปกับบริการพอร์ต TCP และ UDP ที่บริการเริ่มต้นและจัดเก็บข้อมูลที่เกี่ยวข้องในเคอร์เนลเกี่ยวกับบริการที่ทำงานอยู่ (ชื่อ) หมายเลขบริการเฉพาะ (ตาม /etc/rpc) เกี่ยวกับโปรโตคอลและพอร์ตที่ใช้บริการ และเกี่ยวกับเวอร์ชันของบริการ และให้ข้อมูลที่ระบุแก่ลูกค้าเมื่อมีการร้องขอ ตัวแปลงพอร์ตนั้นมีหมายเลขโปรแกรม (100,000) หมายเลขเวอร์ชัน 2 พอร์ต TCP 100 eleven และพอร์ต UDP 111

ด้านบน เมื่อระบุองค์ประกอบของปีศาจเซิร์ฟเวอร์ NFS ฉันระบุหมายเลขโปรแกรม RPC หลัก ฉันคงทำให้คุณสับสนเล็กน้อยกับย่อหน้านี้ ดังนั้นฉันจะพูดวลีหลักที่ควรทำให้สิ่งต่าง ๆ ชัดเจน: หน้าที่หลักของตัวแมปพอร์ตคือการส่งคืน ตามคำขอของลูกค้าที่ให้หมายเลขโปรแกรม RPC (หรือ หมายเลขโปรแกรม RPC) และเวอร์ชันสำหรับเขา (ไคลเอนต์) พอร์ตที่โปรแกรมที่ร้องขอกำลังทำงานอยู่ ดังนั้น หากไคลเอ็นต์ต้องการเข้าถึง RPC ด้วยหมายเลขโปรแกรมเฉพาะ ไคลเอ็นต์จะต้องติดต่อกระบวนการพอร์ตแมปบนเครื่องเซิร์ฟเวอร์ก่อน และค้นหาหมายเลขพอร์ตการสื่อสารด้วยบริการ RPC ที่ต้องการ

การทำงานของเซิร์ฟเวอร์ RPC สามารถแสดงได้ด้วยขั้นตอนต่อไปนี้:

หากต้องการรับข้อมูลจากเซิร์ฟเวอร์ RPC ให้ใช้ยูทิลิตี rpcinfo เมื่อคุณระบุลักษณะโฮสต์ -p โปรแกรมจะแสดงรายการโปรแกรม RPC ที่ลงทะเบียนไว้ทั้งหมดบนโฮสต์โฮสต์ โปรแกรมจะแสดงบริการบน localhost โดยไม่ระบุโฮสต์ ตัวอย่าง:

ARCHIV ~ # rpcinfo -p prog-ma กับพอร์ต proto 100,000 สอง tcp 100 สิบเอ็ด portmapper 100,000 สอง udp 100 สิบเอ็ด portmapper 100,000 20 สี่ หนึ่ง udp 50 เก้าพันสี่ร้อย 50 หนึ่งสถานะ 100,000 20 สี่ หนึ่ง tcp หกหมื่นแปดร้อย 70 สองสถานะ 100,000 20 หนึ่งหนึ่ง udp 40 สี่พันสามร้อย 10 nlockmgr 100,000 20 หนึ่งสาม udp 40 สี่พันสามร้อย 10 nlockmgr 100,000 20 หนึ่งสี่ udp 40 สี่พันสามร้อย 10 nlockmgr 100,000 20 หนึ่งหนึ่ง tcp 40 สี่ พันแปดร้อย 50 หนึ่ง nlockmgr 100,000 20 หนึ่งสาม tcp 40 สี่พันแปดร้อย 50 หนึ่ง nlockmgr 100,000 20 หนึ่งสี่ tcp 40 สี่พันแปดร้อย 50 หนึ่ง nlockmgr 100,003 สาม สอง tcp สองพัน 40 เก้า nfs 100,003 สาม สาม tcp สอง พัน 40 เก้า nfs 100,003 สาม สี่ tcp สองพัน 40 เก้า nfs 100,003 สอง udp สองพัน 40 เก้า nfs 100,003 สาม udp สองพัน 40 เก้า nfs 100,003 สาม สี่ udp สองพัน 40 เก้า nfs 100,000 5 หนึ่ง udp 50 หนึ่งพันสามร้อย 6 ติด 100,000 5 หนึ่ง tcp 40 หนึ่งพันสี่ร้อย 5 ติด 100,000 5 สอง udp 50 หนึ่งพันสามร้อย 6 ติด 100,000 5 สอง tcp 40 หนึ่งพันสี่ร้อย 5 ติด 100,000 5 สาม udp 50 หนึ่งพัน สามร้อย 6 ติด 100,000 5 สาม tcp 40 หนึ่งพันสี่ร้อย 5 ติด

อย่างที่คุณเห็น rpcinfo ระบุ (ในคอลัมน์จากซ้ายไปขวา) จำนวนของโปรแกรมที่ลงทะเบียน เวอร์ชัน โปรโตคอล พอร์ต และชื่อ

การใช้ rpcinfo คุณสามารถลบการลงทะเบียนของโปรแกรมหรือรับข้อมูลเกี่ยวกับบริการ RPC เฉพาะ (ตัวเลือกเพิ่มเติมใน man rpcinfo) อย่างที่คุณเห็น เวอร์ชัน portmapper มีการลงทะเบียนปีศาจสองตัวบนพอร์ต udp และ tcp, เวอร์ชัน rpc.statd หนึ่งตัวบนพอร์ต udp และ tcp, ตัวจัดการการล็อก NFS เวอร์ชัน 1,3,4, เซิร์ฟเวอร์ nfs เวอร์ชัน 2,3,4 รวมถึง เมานท์อสูรเวอร์ชั่น 1,2,3

เซิร์ฟเวอร์ NFS (แม่นยำยิ่งขึ้น rpc.nfsd) ได้รับการร้องขอจากไคลเอนต์ในรูปแบบของดาตาแกรม UDP บนพอร์ต 2049 แม้ว่า NFS จะทำงานร่วมกับตัวแก้ไขพอร์ตซึ่งอนุญาตให้เซิร์ฟเวอร์ใช้พอร์ตที่กำหนดแบบไดนามิก แต่พอร์ต UDP สองพัน 40 เก้าถูกกำหนดให้กับ NFS อย่างเคร่งครัดในการใช้งานส่วนใหญ่

การดำเนินการโปรโตคอลระบบไฟล์เครือข่าย

การติดตั้ง NFS ระยะไกล

กระบวนการติดตั้งระบบไฟล์ NFS แบบรีโมตสามารถแสดงได้ด้วยแผนภาพต่อไปนี้:

คำอธิบายของโปรโตคอล NFS เมื่อติดตั้งรีโมตไดเร็กทอรี:

  1. เซิร์ฟเวอร์ RPC ถูกเปิดใช้งานบนเซิร์ฟเวอร์และไคลเอนต์ (โดยปกติจะเป็นตอนบูต) ซึ่งให้บริการโดยกระบวนการ portmapper และลงทะเบียนบนพอร์ต tcp/111 และ udp/111
  2. เปิดตัวบริการ (rpc.nfsd, rpc.statd ฯลฯ ) ซึ่งลงทะเบียนบนเซิร์ฟเวอร์ RPC และลงทะเบียนบนพอร์ตเครือข่ายแบบสุ่ม (หากไม่ได้ระบุพอร์ตคงที่ในการตั้งค่าบริการ)
  3. คำสั่ง mount บนคอมพิวเตอร์ไคลเอนต์จะส่งคำขอเคอร์เนลเพื่อเมานต์ไดเร็กทอรีเครือข่ายที่ระบุประเภทของระบบไฟล์ โฮสต์ และไดเร็กทอรีในทางปฏิบัติ เคอร์เนลจะส่งและสร้างคำขอ RPC ไปยังกระบวนการพอร์ตแมปบนเซิร์ฟเวอร์ NFS บนพอร์ต udp/ 111 (หากไม่ได้ตั้งค่าฟังก์ชั่นการทำงานผ่าน tcp บนไคลเอนต์)
  4. เคอร์เนลเซิร์ฟเวอร์ NFS สอบถาม RPC สำหรับการมีอยู่ของ rpc.mountd imp และส่งคืนพอร์ตเครือข่ายที่ imp กำลังทำงานอยู่ไปยังเคอร์เนลไคลเอ็นต์
  5. mount ส่งคำขอ RPC ไปยังพอร์ตที่ rpc.mountd กำลังทำงานอยู่ ณ จุดนี้ เซิร์ฟเวอร์ NFS สามารถตรวจสอบไคลเอ็นต์ตามที่อยู่ IP และหมายเลขพอร์ต เพื่อดูว่าไคลเอ็นต์สามารถติดตั้งระบบไฟล์ที่กำหนดได้หรือไม่
  6. Mountless ส่งคืนคำอธิบายของระบบไฟล์ที่ร้องขอ
  7. คำสั่งเมานต์ของไคลเอ็นต์ออกการเรียกระบบเมานต์เพื่อเชื่อมโยงหมายเลขอ้างอิงไฟล์ที่พบในขั้นตอนที่ 5 กับจุดเมานต์โลคัลบนโฮสต์ของไคลเอ็นต์ ตัวจัดการไฟล์จะถูกจัดเก็บไว้ในโค้ดไคลเอ็นต์ NFS และจากนี้ไป การเข้าถึงโดยกระบวนการของผู้ใช้ไปยังไฟล์บนระบบไฟล์ของเซิร์ฟเวอร์จะใช้ตัวจัดการไฟล์เป็นจุดเริ่มต้น

การแลกเปลี่ยนข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ NFS

การเข้าถึงระบบไฟล์รีโมตแบบปกติสามารถอธิบายได้โดยใช้โครงร่างต่อไปนี้:

คำอธิบายของกระบวนการเข้าถึงไฟล์ที่อยู่บนเซิร์ฟเวอร์ NFS:

การตั้งค่าเซิร์ฟเวอร์ NFS

การตั้งค่าเซิร์ฟเวอร์โดยทั่วไปประกอบด้วยการตั้งค่าไดเร็กทอรีโลคัลที่ได้รับอนุญาตให้เมาต์โดยระบบรีโมตในไฟล์ /etc/exports การดำเนินการนี้เรียกว่า ลำดับชั้นไดเรกทอรีส่งออก- แหล่งข้อมูลหลักเกี่ยวกับไดเร็กทอรีที่ส่งออกคือไฟล์ต่อไปนี้:

  • /etc/exports- ไฟล์การกำหนดค่าหลักที่เก็บการกำหนดค่าของไดเร็กทอรีที่ส่งออก ใช้เมื่อเริ่มต้น NFS และโดยยูทิลิตี Exportfs
  • /var/lib/nfs/xtab- มีรายการไดเร็กทอรีที่ติดตั้งโดยไคลเอนต์ระยะไกล ใช้โดย rpc.mountd imp เมื่อไคลเอนต์พยายามเมานต์ลำดับชั้น (สร้างเรคคอร์ดเมานต์)
  • /var/lib/nfs/etab- รายการไดเร็กทอรีที่สามารถติดตั้งได้โดยระบบระยะไกล ซึ่งระบุคุณสมบัติทั้งหมดของไดเร็กทอรีที่ส่งออก
  • /var/lib/nfs/rmtab- รายการไดเร็กทอรีที่ยังไม่ได้ส่งออก
  • /proc/fs/nfsd- ระบบไฟล์พิเศษ (เคอร์เนล 2.6) สำหรับจัดการเซิร์ฟเวอร์ NFS
    • การส่งออก- รายการลำดับชั้นที่ส่งออกและไคลเอนต์ที่ใช้งานอยู่ซึ่งส่งออกไป รวมถึงคุณสมบัติ เคอร์เนลรับข้อมูลนี้จาก /var/lib/nfs/xtab
    • หัวข้อ- มีจำนวนเธรด (สามารถเปลี่ยนได้)
    • การใช้ filehandle คุณสามารถรับตัวชี้ไปยังไฟล์ได้
    • ฯลฯ...
  • /proc/net/rpc- มีสถิติ "ดิบ" ซึ่งสามารถรับได้โดยใช้ nfsstat รวมถึงแคชต่างๆ
  • /var/run/portmap_mapping- ข้อมูลเกี่ยวกับบริการที่ลงทะเบียนใน RPC

บันทึก:โดยทั่วไปบนอินเทอร์เน็ตมีการตีความและการกำหนดวัตถุประสงค์ของไฟล์ xtab, etab, rmtab มากมายฉันไม่รู้ว่าใครจะเชื่อ #image.jpg แม้แต่ใน http://nfs.sourceforge.net/ การตีความไม่ชัดเจน

การตั้งค่าไฟล์ /etc/exports

ในกรณีปกติ ไฟล์ /etc/exports เป็นไฟล์เดียวที่ต้องการการแก้ไขสำหรับฟังก์ชันเซิร์ฟเวอร์ NFS ไฟล์นี้ควบคุมคุณสมบัติต่อไปนี้:

  • ลูกค้าแบบไหน.สามารถเข้าถึงไฟล์บนเซิร์ฟเวอร์ได้
  • ลำดับชั้นใด?ลูกค้าแต่ละรายสามารถเข้าถึงไดเร็กทอรีบนเซิร์ฟเวอร์ได้
  • ชื่อลูกค้าที่กำหนดเองจะเป็นอย่างไร จะถูกแสดงไปยังชื่อผู้ใช้ท้องถิ่น

ไม่ว่าไฟล์ส่งออกจะมีรูปแบบดังต่อไปนี้:

Export_point ลูกค้า 1 (ฟังก์ชั่น) [ลูกค้า 2 (ฟังก์ชั่น) ... ]

ที่ไหน ส่งออก_จุดเส้นทางที่แน่นอนของลำดับชั้นไดเรกทอรีที่ส่งออก ลูกค้า 1 - nชื่อไคลเอ็นต์หรือที่อยู่ IP ตั้งแต่ 1 รายการขึ้นไป โดยคั่นด้วยช่องว่าง ที่ได้รับอนุญาตให้เมานต์ ส่งออก_จุด. ฟังก์ชั่นร่างกฎการติดตั้งสำหรับลูกค้าที่ระบุก่อนตัวเลือก

นี่ก็เป็นอันธรรมดา ตัวอย่างการกำหนดค่าไฟล์ส่งออก:

ARCHIV ~ # cat /etc/exports /archiv1 ไฟล์ (rw,sync) 10.0.0.1(ro,sync) 10.0.230.1/24(ro,sync)

ในตัวอย่างนี้ ไฟล์คอมพิวเตอร์และ 10.0.0.1 ได้รับอนุญาตให้เข้าถึงจุดส่งออก /archiv1 ในขณะที่ไฟล์โฮสต์มีสิทธิ์การเข้าถึงแบบอ่าน/เขียน และโฮสต์ 10.0.0.1 และซับเน็ต 10.0.230.1/24 มีสิทธิ์การเข้าถึงแบบอ่านอย่างเดียว

คำอธิบายโฮสต์ใน /etc/exports ได้รับอนุญาตในรูปแบบต่อไปนี้:

  • ชื่อของแต่ละโหนดจะอธิบายเป็นไฟล์หรือ files.DOMAIN.local
  • คำอธิบายมาสก์โดเมนจัดทำขึ้นในรูปแบบต่อไปนี้: *DOMAIN.local รวมโหนดทั้งหมดของโดเมน DOMAIN.local
  • ซับเน็ตถูกระบุเป็นคู่ที่อยู่ IP/มาสก์ ตัวอย่างเช่น: 10.0.0.0/255.255.255.0 รวมโหนดทั้งหมดที่มีที่อยู่ขึ้นต้นด้วย 10.0.0
  • การระบุชื่อของกลุ่มเครือข่าย @myclients ที่มีสิทธิ์เข้าถึงทรัพยากร (เมื่อใช้เซิร์ฟเวอร์ NIS)

ฟังก์ชันทั่วไปสำหรับการส่งออกลำดับชั้นของไดเรกทอรี

ฟังก์ชันทั่วไปต่อไปนี้ใช้ในไฟล์ส่งออก:(ขั้นแรก ฟังก์ชั่นที่ใช้เป็นค่าเริ่มต้นในระบบส่วนใหญ่จะถูกระบุในวงเล็บ - ไม่ใช่ค่าเริ่มต้น):

  • auth_nlm (no_auth_nlm)หรือ Secure_locks (ไม่ปลอดภัย_ล็อค)- ระบุว่าเซิร์ฟเวอร์ควรค้นหาการรับรองความถูกต้องของคำขอล็อค (โดยใช้โปรโตคอล NFS Lock Manager)
  • โนฮิเดะ (ซ่อน)- หากเซิร์ฟเวอร์ส่งออกลำดับชั้นไดเรกทอรีสองลำดับชั้น ในขณะที่ลำดับชั้นหนึ่งซ้อน (ติดตั้ง) ภายในอีกลำดับชั้นหนึ่ง แน่นอนว่าไคลเอ็นต์จะต้องเมานต์ลำดับชั้นที่สอง (ชายน์) มิฉะนั้นจุดเมานต์ของลำดับชั้นชายน์จะดูเหมือนไดเร็กทอรีว่างเปล่า ฟังก์ชัน nohide ส่งผลให้เกิดลำดับชั้นของไดเร็กทอรีที่ 2 โดยไม่ต้องติดตั้งใดๆ เลย (หมายเหตุ: ฉันไม่สามารถใช้งานตัวเลือกนี้ได้...)
  • โร(rw)- อนุญาตเฉพาะคำขออ่าน (เขียน) เท่านั้น (ท้ายที่สุดแล้ว ไม่ว่าจะสามารถอ่าน/เขียนได้หรือไม่ก็ตามนั้นจะถูกกำหนดตามสิทธิ์ของระบบไฟล์ ทั้งหมดนี้เซิร์ฟเวอร์ไม่สามารถแยกความแตกต่างคำขออ่านไฟล์จากคำขอที่จะดำเนินการได้ ดังนั้นจึงอนุญาตให้อ่านได้หากผู้ใช้ มีสิทธิ์ในการอ่านหรือดำเนินการ)
  • ปลอดภัย (ไม่ปลอดภัย)- คำขอที่คำขอ NFS มาจากพอร์ตที่ปลอดภัย (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • subtree_check (no_subtree_check)- หากมีการส่งออกไดเรกทอรีย่อยของระบบไฟล์ แต่ไม่ใช่ทั้งระบบไฟล์ เซิร์ฟเวอร์จะตรวจสอบว่าไฟล์ที่ร้องขอนั้นอยู่ในไดเรกทอรีย่อยที่ส่งออกหรือไม่ การปิดใช้งานการยืนยันจะลดความปลอดภัยแต่จะเพิ่มความเร็วการถ่ายโอนข้อมูล
  • ซิงค์ (อะซิงโครนัส)- ระบุว่าเซิร์ฟเวอร์ควรตอบสนองต่อคำขอหลังจากเขียนการกำหนดค่าที่ดำเนินการโดยคำขอเหล่านั้นไปยังดิสก์เท่านั้น ฟังก์ชั่น async บอกให้เซิร์ฟเวอร์ไม่ต้องรอให้เขียนข้อมูลลงดิสก์ ซึ่งจะเพิ่มประสิทธิภาพ แต่ลดความน่าเชื่อถือ เนื่องจาก ในกรณีที่การเชื่อมต่อขาดหรืออุปกรณ์ขัดข้อง ข้อมูลอาจสูญหาย
  • ล่าช้า (no_wdelay)- สั่งให้เซิร์ฟเวอร์ชะลอการดำเนินการคำขอเขียนหากคำขอเขียนครั้งต่อไปอยู่ระหว่างการพิจารณา โดยเขียนข้อมูลในบล็อกขนาดใหญ่ สิ่งนี้ช่วยปรับปรุงประสิทธิภาพเมื่อส่งคำสั่งเขียนคิวจำนวนมาก no_wdelay ระบุว่าจะไม่ชะลอการดำเนินการของคำสั่งเขียน ซึ่งอาจมีประโยชน์หากเซิร์ฟเวอร์ได้รับคำสั่งที่ไม่เกี่ยวข้องโดยไม่จำกัดจำนวน

ส่งออกลิงก์สัญลักษณ์และไฟล์อุปกรณ์เมื่อส่งออกลำดับชั้นไดเร็กทอรีที่มีลิงก์สัญลักษณ์ ออบเจ็กต์ลิงก์จะต้องสามารถเข้าถึงได้โดยระบบไคลเอ็นต์ (ระยะไกล) กล่าวอีกนัยหนึ่ง กฎข้อใดข้อหนึ่งต่อไปนี้จะต้องเป็นจริง:

  • วัตถุลิงค์จะต้องมีอยู่บนระบบไฟล์ไคลเอนต์
  • จำเป็นต้องส่งออกและเมานต์วัตถุอ้างอิง

ไฟล์อุปกรณ์อ้างอิงถึงอินเทอร์เฟซเคอร์เนล Linux เมื่อคุณส่งออกไฟล์อุปกรณ์ อินเทอร์เฟซนี้จะถูกส่งออก หากระบบไคลเอ็นต์ไม่มีอุปกรณ์ประเภทเดียวกัน อุปกรณ์ที่ส่งออกจะไม่ทำงาน

บนระบบไคลเอ็นต์ เมื่อติดตั้งอ็อบเจ็กต์ NFS คุณสามารถใช้อ็อพชัน nodev เพื่อไม่ให้ใช้ไฟล์อุปกรณ์ในไดเร็กทอรีที่เมาท์

ฟังก์ชันเริ่มต้นอาจแตกต่างกันระหว่างระบบและสามารถพบได้ใน /var/lib/nfs/etab หลังจากอธิบายไดเร็กทอรีที่เอ็กซ์พอร์ตใน /etc/exports และรีสตาร์ทเซิร์ฟเวอร์ NFS แล้ว ฟังก์ชันที่ขาดหายไปทั้งหมด (อ่าน: ฟังก์ชันดีฟอลต์) จะปรากฏในไฟล์ /var/lib/nfs/etab

ฟังก์ชั่นสำหรับการแสดง (จับคู่) ID ผู้ใช้

เพื่อความเข้าใจที่ดีขึ้นในสิ่งต่อไปนี้ ฉันขอแนะนำให้คุณอ่านบทความการจัดการผู้ใช้ Linux ผู้ใช้ Linux แต่ละคนมี UID และ GID หลักของตัวเอง ซึ่งอธิบายไว้ในไฟล์ /etc/passwd และ /etc/group

เซิร์ฟเวอร์ NFS จะถือว่าระบบปฏิบัติการของโฮสต์ระยะไกลได้ตรวจสอบสิทธิ์ผู้ใช้และกำหนด UID และ GID ที่ถูกต้องให้กับพวกเขา การส่งออกไฟล์ทำให้ผู้ใช้ระบบไคลเอ็นต์สามารถเข้าถึงไฟล์เหล่านั้นได้เหมือนกับว่าพวกเขาบันทึกไว้บนเซิร์ฟเวอร์โดยตรง ดังนั้น เมื่อไคลเอ็นต์ NFS ส่งคำขอไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะใช้ UID และ GID เพื่อระบุผู้ใช้บนระบบโลคัล ซึ่งอาจนำไปสู่ปัญหาบางอย่างได้:


ฟังก์ชั่นต่อไปนี้กำหนดกฎสำหรับการแสดงผู้ใช้ระยะไกลในเครื่อง:

ตัวอย่างการใช้ไฟล์การแมปผู้ใช้:

ARCHIV ~ # cat /etc/file_maps_users # การแมปผู้ใช้ # ความคิดเห็นในเครื่องระยะไกล uid 0-50 หนึ่งพันสอง # ผู้ใช้การแมปด้วย UID ระยะไกล 0-50 ไปยัง UID ในเครื่อง หนึ่งพันสอง gid 0-50 หนึ่งพันสอง # ผู้ใช้การแมปด้วย /span GID ระยะไกล 0-50 ไปยัง GID 1002 ในเครื่อง

การจัดการเซิร์ฟเวอร์ NFS

เซิร์ฟเวอร์ NFS ได้รับการจัดการโดยใช้ยูทิลิตีต่อไปนี้:

  • nfsstat
  • showmsecure (ไม่ปลอดภัย) ติด
  • ส่งออกfs

nfsstat: สถิติ NFS และ RPC

ยูทิลิตี้ nfsstat ช่วยให้คุณดูสถิติของเซิร์ฟเวอร์ RPC และ NFS ฟังก์ชันของคำสั่งสามารถพบได้ใน man nfsstat

showmount: แสดงข้อมูลเกี่ยวกับสถานะ NFS

ยูทิลิตี้ showmountเคียวรี rpc.mountd บนรีโมตโฮสต์เกี่ยวกับระบบไฟล์ที่เมาท์ ตามค่าเริ่มต้น รายการเรียงลำดับของไคลเอ็นต์จะถูกส่งกลับ กุญแจ:

  • --ทั้งหมด- รายการไคลเอ็นต์และจุดเชื่อมต่อจะปรากฏขึ้นเพื่อระบุตำแหน่งที่ไคลเอ็นต์ติดตั้งไดเร็กทอรี ข้อมูลนี้อาจไม่น่าเชื่อถือ
  • --ไดเรกทอรี- รายการจุดเชื่อมต่อจะปรากฏขึ้น
  • --การส่งออก- รายการระบบไฟล์ที่ส่งออกจะได้รับตามความเชื่อของ nfsd

เมื่อคุณรัน showmount โดยไม่มีข้อโต้แย้ง ข้อมูลเกี่ยวกับระบบที่ได้รับอนุญาตให้เมานต์จะถูกพิมพ์ไปยังคอนโซล ท้องถิ่นคอลเลกชัน ตัวอย่างเช่น โฮสต์ ARCHIV มอบรายการไดเร็กทอรีที่ส่งออกพร้อมที่อยู่ IP ของโฮสต์ที่ได้รับอนุญาตให้เมานต์คอลเลกชันที่กำหนด:

FILES ~ # showmount --exports archive รายการส่งออกสำหรับการเก็บถาวร: /archiv-big 10.0.0.2 /archiv-small 10.0.0.2

หากคุณระบุชื่อโฮสต์/IP ในอาร์กิวเมนต์ ข้อมูลเกี่ยวกับโฮสต์นี้จะแสดง:

ARCHIV ~ # ไฟล์ showmount clnt_create: RPC: โปรแกรมไม่ได้ลงทะเบียน # ข้อความนี้บอกเราว่า NFSd ไม่ทำงานบนโฮสต์ FILES

Exportfs: จัดการไดเร็กทอรีที่ส่งออก

คำสั่งนี้ทำหน้าที่รวบรวมคอลเลกชันข้อมูลในไฟล์ที่ส่งออก /etc/exportsจะแม่นยำกว่าหากเขียนว่าไม่ได้ให้บริการ แต่ซิงโครไนซ์กับไฟล์ /var/lib/nfs/xtabและลบสิ่งที่ไม่มีออกจาก xtab Exportfs เสร็จสิ้นเมื่อรัน nfsd demon ด้วยอาร์กิวเมนต์ -r ยูทิลิตี้ Exportfs ในโหมดเคอร์เนล 2.6 พูดคุยกับ rpc.mountd imp ผ่านไฟล์ในไดเร็กทอรี /var/lib/nfs/ และไม่ได้พูดคุยกับเคอร์เนลโดยตรง หากไม่มีคุณลักษณะ จะแสดงรายการระบบไฟล์ที่ส่งออกในปัจจุบัน

คุณสมบัติการส่งออก:

  • [client:directory-name] - เพิ่มหรือลบระบบไฟล์ที่กำหนดสำหรับไคลเอนต์ที่กำหนด)
  • -v - แสดงข้อมูลเพิ่มเติม
  • -r - ส่งออกคอลเลกชันทั้งหมดอีกครั้ง (ซิงโครไนซ์ /etc/exports และ /var/lib/nfs/xtab)
  • -u - ลบออกจากรายการที่ส่งออก
  • -a - เพิ่มหรือลบระบบไฟล์ทั้งหมด
  • -o - ฟังก์ชันคั่นด้วยเครื่องหมายจุลภาค (คล้ายกับตัวเลือกที่ใช้ใน /etc/exports กล่าวคือ คุณสามารถเปลี่ยนฟังก์ชันของระบบไฟล์ที่ติดตั้งไว้แล้วได้)
  • -i - อย่าใช้ /etc/exports เมื่อทำการเพิ่ม เฉพาะคุณสมบัติของบรรทัดคำสั่งปัจจุบันเท่านั้น
  • -f - รีเซ็ตรายการระบบที่ส่งออกในเคอร์เนล 2.6

ไคลเอนต์ NFS

ก่อนที่จะเข้าถึงไฟล์บนระบบไฟล์รีโมต ไคลเอ็นต์จะต้อง ติดมันและรับจากเซิร์ฟเวอร์ ตัวชี้ไปที่มัน. เมาท์ NFSสามารถทำได้โดยใช้ คำสั่งเมานต์หรือใช้หนึ่งในเมานท์อัตโนมัติที่เพิ่มจำนวน (amd, autofs, automount, supermount, superpupermount) กระบวนการติดตั้งแสดงให้เห็นอย่างสมบูรณ์ในภาพประกอบด้านบน

บน ลูกค้า NFSไม่จำเป็นต้องปล่อยปีศาจใดๆ ฟังก์ชั่นไคลเอนต์สร้างเคอร์เนลโมดูล kernel/fs/nfs/nfs.ko ซึ่งใช้เมื่อติดตั้งระบบไฟล์ระยะไกล คอลเลกชันที่ส่งออกจากเซิร์ฟเวอร์สามารถติดตั้งบนไคลเอนต์ได้ด้วยวิธีต่อไปนี้:

  • ด้วยตนเองโดยใช้คำสั่ง mount
  • โดยอัตโนมัติเมื่อบูต เมื่อติดตั้งระบบไฟล์ที่ระบุใน /etc/fstab
  • โดยใช้อสูร autofs โดยอัตโนมัติ

ฉันจะไม่พิจารณาวิธีที่ 3 ด้วย autofs ในบทความนี้เนื่องจากมีข้อมูลจำนวนมาก อาจมีคำอธิบายแยกต่างหากในบทความถัดไป

การติดตั้งระบบไฟล์เครือข่ายด้วยคำสั่ง mount

ตัวอย่างของการใช้คำสั่ง mount แสดงอยู่ในโพสต์ Block Device Control Commands ที่นี่ฉันจะดูตัวอย่างของคำสั่ง mount สำหรับการติดตั้งระบบไฟล์ NFS:

FILES ~ # mount -t nfs archive:/archiv-small /archivs/archiv-small FILES ~ # mount -t nfs -o ro archivev:/archiv-big /archivs/archiv-big FILES ~ # mount ..... .. archivev:/archiv-small บน /archivs/archiv-small ประเภท nfs (rw,addr=10.0.0.6) archivev:/archiv-big บน /archivs/archiv-big ประเภท nfs (ro,addr=10.0.0.6)

คำสั่งที่ 1 จะเมาต์ไดเร็กทอรี /archiv-small ที่เอ็กซ์พอร์ตบนเซิร์ฟเวอร์การเก็บถาวรไปยังจุดเมานต์โลคัล /archivs/archiv-small พร้อมตัวเลือกดีฟอลต์ (หรืออีกนัยหนึ่งคือ อ่าน-เขียน)

แม้ว่า คำสั่งเมานต์ในการแจกแจงล่าสุด สามารถคิดได้ว่าจะใช้ระบบไฟล์ประเภทใดแม้ว่าจะไม่ได้ระบุประเภทก็ตาม อย่างไรก็ตาม ควรระบุพารามิเตอร์ -t nfs จะดีกว่า คำสั่งที่ 2 จะเมาท์ไดเร็กทอรีที่เอ็กซ์พอร์ต /archiv-big บนเซิร์ฟเวอร์ archivev ไปยังไดเร็กทอรีในเครื่อง /archivs/archiv-big ด้วยตัวเลือกอ่านอย่างเดียว (ro) คำสั่งเมานต์โดยไม่มีคุณสมบัติแสดงให้เราเห็นผลลัพธ์ของการติดตั้งอย่างชัดเจน นอกจากฟังก์ชันอ่านอย่างเดียว (ro) แล้ว ยังสามารถระบุฟังก์ชันอื่นๆ ได้อีกด้วย ฟังก์ชั่นหลักเมื่อติดตั้ง NFS:

  • โนซูอิด- ฟังก์ชั่นนี้ห้ามไม่ให้เรียกใช้โปรแกรม setuid จากไดเร็กทอรีที่เมาท์
  • โหนด(ไม่มีอุปกรณ์ - ไม่ใช่อุปกรณ์) - ฟังก์ชั่นนี้ห้ามการใช้อักขระและบล็อกไฟล์พิเศษเป็นอุปกรณ์
  • ล็อค (โนล็อค)- อนุญาตให้ล็อก NFS (ค่าเริ่มต้น) nolock ปิดใช้งานการล็อก NFS (ไม่เรียกใช้การล็อก) และสะดวกเมื่อทำงานกับเซิร์ฟเวอร์รุ่นเก่าที่ไม่รองรับการล็อก NFS
  • mounthost=ชื่อ- ชื่อของโฮสต์ที่ NFS mountless กำลังทำงานอยู่ - mountd
  • เมานต์พอร์ต=n -พอร์ตที่ใช้โดย mountd imp
  • พอร์ต=n- พอร์ตที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ NFS (ค่าเริ่มต้นคือ 2049 หากไม่ได้ลงทะเบียน rpc.nfsd บนเซิร์ฟเวอร์ RPC) หาก n=0 (ค่าเริ่มต้น) NFS จะส่งคำร้องขอไปยังพอร์ตแมปบนเซิร์ฟเวอร์เพื่อค้นหาพอร์ต
  • rsize=n(ขนาดบล็อกการอ่าน - ขนาดบล็อกการอ่าน) - จำนวนไบต์ที่อ่านในแต่ละครั้งจากเซิร์ฟเวอร์ NFS มาตรฐาน - 4096
  • ขนาด=n(ขนาดบล็อกการเขียน - ขนาดบล็อกการเขียน) - จำนวนไบต์ที่เขียนไปยังเซิร์ฟเวอร์ NFS ในแต่ละครั้ง มาตรฐาน - 4096
  • ทีพีพีหรือ udp- หากต้องการเมานต์ NFS ให้ใช้โปรโตคอล TCP หรือ UDP ตามลำดับ
  • บีจี- หากคุณสูญเสียการเข้าถึงเซิร์ฟเวอร์ ให้ทำการทดสอบซ้ำในเบื้องหลังเพื่อไม่ให้ขัดจังหวะกระบวนการบูตระบบ
  • - หากคุณสูญเสียการเข้าถึงเซิร์ฟเวอร์ ให้ทำการทดสอบซ้ำในโหมดลำดับความสำคัญ ตัวเลือกนี้สามารถบล็อกกระบวนการบูตระบบได้โดยการพยายามเมาต์ซ้ำ ด้วยเหตุนี้ พารามิเตอร์ fg จึงใช้สำหรับการดีบักเป็นหลัก

ฟังก์ชันที่ส่งผลต่อการแคชแอ็ตทริบิวต์บนการเมาท์ NFS

คุณสมบัติไฟล์, เก็บไว้ใน inod (ตัวอธิบายดัชนี) เช่น เวลาแก้ไข, ขนาด, ฮาร์ดลิงก์, เจ้าของ มักจะเปลี่ยนแปลงเป็นครั้งคราวสำหรับไฟล์ธรรมดาและบ่อยน้อยกว่าสำหรับไดเร็กทอรี หลายโปรแกรม เช่น ls เข้าถึงไฟล์แบบอ่านอย่างเดียว และไม่เปลี่ยนคุณสมบัติของไฟล์หรือเนื้อหา แต่จะเปลืองทรัพยากรระบบในการดำเนินการเครือข่ายที่มีราคาแพง

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

  • เอซี (โนแอค)(แคชแอตทริบิวต์ - การแคชแอตทริบิวต์) - อนุญาตการแคชแอตทริบิวต์ (โดยค่าเริ่มต้น) แม้ว่า noac จะทำให้เซิร์ฟเวอร์ช้าลง แต่ก็หลีกเลี่ยงความล้าสมัยของแอตทริบิวต์เมื่อไคลเอนต์หลายรายกำลังเขียนข้อมูลลงในลำดับชั้นทั่วไป
  • acdirmax=n(ไฟล์ไดเรกทอรีแคชแอตทริบิวต์สูงสุด - การแคชแอตทริบิวต์สูงสุดสำหรับไฟล์ไดเรกทอรี) - จำนวนวินาทีสูงสุดที่ NFS รอก่อนที่จะอัปเดตแอตทริบิวต์ไดเรกทอรี (ค่าเริ่มต้นหกสิบวินาที)
  • acdirmin=n(ขั้นต่ำของไฟล์ไดเรกทอรีแคชแอตทริบิวต์ - การแคชแอตทริบิวต์ขั้นต่ำสำหรับไฟล์ไดเรกทอรี) - จำนวนวินาทีเล็กน้อยที่ NFS รอก่อนอัปเดตแอตทริบิวต์ไดเรกทอรี (ค่าเริ่มต้น 30 วินาที)
  • เอเคอร์แม็กซ์=n(แคชแอตทริบิวต์ไฟล์ปกติสูงสุด - การแคชแอตทริบิวต์สูงสุดสำหรับไฟล์ปกติ) - จำนวนวินาทีสูงสุดที่ NFS รอก่อนที่จะอัปเดตแอตทริบิวต์ของไฟล์ปกติ (ค่าเริ่มต้น: หกสิบวินาที)
  • เอเคอร์มิน=n(ขั้นต่ำของไฟล์แคชแอตทริบิวต์ปกติ - การแคชแอตทริบิวต์ขั้นต่ำสำหรับไฟล์ปกติ) - จำนวนวินาทีเล็กน้อยที่ NFS รอก่อนที่จะอัปเดตแอตทริบิวต์ของไฟล์ปกติ (ค่าเริ่มต้นสามวินาที)
  • แอคติเมโอ=n(หมดเวลาแคชแอตทริบิวต์ - หมดเวลาแคชแอตทริบิวต์) - แทนที่ค่าสำหรับตัวเลือกข้างต้นทั้งหมด หากไม่ได้ระบุ actimeo ค่าข้างต้นจะใช้เป็นค่าเริ่มต้น

ฟังก์ชั่นการจัดการข้อผิดพลาด NFS

ฟังก์ชันต่อไปนี้ควบคุมสิ่งที่ NFS ดำเนินการเมื่อไม่มีการตอบกลับจากเซิร์ฟเวอร์หรือเมื่อเกิดข้อผิดพลาด I/O:

  • เอฟจี(บีจี)(เบื้องหน้า - เบื้องหน้า พื้นหลัง - พื้นหลัง) - สร้างโพรบการเมานต์ NFS ที่ล้มเหลวในเบื้องหน้า/เบื้องหลัง
  • แข็ง (อ่อน)- แสดงข้อความ "เซิร์ฟเวอร์ไม่ตอบสนอง" ไปยังคอนโซลเมื่อถึงระยะหมดเวลาและทำการทดสอบต่อ ด้วยฟังก์ชั่นนี้ อ่อนนุ่ม- ในระหว่างหมดเวลา รายงานข้อผิดพลาด I/O ไปยังโปรแกรมที่เรียกใช้การดำเนินการ (ไม่แนะนำให้ใช้ตัวเลือกแบบอ่อน)
  • นนทร์ (intr)(ไม่มีการขัดจังหวะ) - ไม่อนุญาตให้สัญญาณขัดจังหวะการทำงานของไฟล์ในลำดับชั้นไดเร็กทอรีแบบฮาร์ดเมาท์เมื่อถึงระยะหมดเวลาขนาดใหญ่ ภายใน- เปิดใช้งานการหยุดชะงัก
  • รีทรานส์=n(ค่าการส่งสัญญาณใหม่) - หลังจากการหมดเวลาเล็กน้อย NFS จะสร้างการหมดเวลาขนาดใหญ่ (ค่าเริ่มต้น 3) การหมดเวลาขนาดใหญ่จะหยุดการดำเนินการหรือพิมพ์ข้อความ "เซิร์ฟเวอร์ไม่ตอบสนอง" ไปยังคอนโซล ขึ้นอยู่กับว่ามีการระบุฟังก์ชันฮาร์ด/ซอฟต์ไว้หรือไม่
  • ลองอีกครั้ง=n(ค่าลองใหม่) - จำนวนนาทีที่บริการ NFS จะดำเนินการเมาต์ซ้ำก่อนที่จะยอมแพ้ (ค่าเริ่มต้น 10,000)
  • เวลา=n(ค่าการหมดเวลา) - จำนวนวินาทีที่ 10 ที่บริการ NFS รอก่อนที่จะส่งอีกครั้งในกรณีของ RPC หรือการหมดเวลาเล็กน้อย (ค่าเริ่มต้น 7) ค่านี้จะเพิ่มขึ้นตามการหมดเวลาแต่ละครั้งเป็นค่าที่มากขึ้นเป็นหกสิบวินาที หรือจนกว่าจะเกิดการหมดเวลาขนาดใหญ่ หากเครือข่ายไม่ว่าง เซิร์ฟเวอร์ทำงานช้า หรือการร้องขอผ่านเราเตอร์หรือเกตเวย์หลายตัว การเพิ่มค่านี้อาจปรับปรุงประสิทธิภาพได้

เมานต์ NFS อัตโนมัติเมื่อบู๊ต (คำอธิบายของระบบไฟล์ใน /etc/fstab)

ฉันแตะที่คำอธิบายของไฟล์ /etc/fstab ในบทความที่เกี่ยวข้อง ในตัวอย่างปัจจุบัน ฉันจะดูตัวอย่างต่างๆ ของการติดตั้งระบบไฟล์ NFS พร้อมคำอธิบายของตัวเลือกต่างๆ:

ไฟล์ ~ # cat /etc/fstab | grep nfs archivev:/archiv-small /archivs/archiv-small nfs rw,timeo=4,rsize=16384,wsize=16384 Null Null nfs-server:/archiv-big /archivs/archiv-big nfs rw,timeo=50 ,ฮาร์ด,fg ศูนย์ 0

ตัวอย่างที่ 1 เมาท์ระบบไฟล์ /archiv-small จากโฮสต์การเก็บถาวรไปยังจุดเมานต์ /archivs/archiv-small ประเภทระบบไฟล์ถูกระบุเป็น nfs (ต้องระบุสำหรับประเภทนี้เสมอ) ระบบไฟล์จะถูกเมาท์ด้วย ตัวเลือกอ่าน-เขียน (rw)

โฮสต์ไฟล์เก็บถาวรเชื่อมต่อผ่านช่องทางท้องถิ่นที่รวดเร็ว ดังนั้นเพื่อเพิ่มประสิทธิภาพ พารามิเตอร์ timeo จึงลดลง และค่า rsize และ wsize ได้รับการเพิ่มขึ้นอย่างมาก ฟิลด์สำหรับโปรแกรมดัมพ์และ fsck ถูกตั้งค่าเป็นศูนย์ เพื่อให้โปรแกรมเหล่านี้ไม่ใช้ระบบไฟล์ที่เมาท์ NFS

ตัวอย่างที่ 2 ติดตั้งระบบไฟล์ /archiv-big จากโฮสต์เซิร์ฟเวอร์ nfs เพราะ เราเชื่อมต่อกับโฮสต์เซิร์ฟเวอร์ nfs ผ่านการเชื่อมต่อที่ช้า พารามิเตอร์ timeo จะเพิ่มขึ้นเป็น 5 วินาที (50 ใน 10 วินาที) และพารามิเตอร์ hard จะถูกตั้งค่าแบบ hard เพื่อให้ NFS ยังคงติดตั้งระบบไฟล์ต่อไปหลังจากผ่านไปนาน หมดเวลา พารามิเตอร์ fg จะถูกตั้งค่าด้วย ดังนั้นเมื่อระบบบูทและโฮสต์เซิร์ฟเวอร์ nfs ไม่พร้อมใช้งาน ระบบจะไม่ค้าง

ก่อนที่จะบันทึกการกำหนดค่าใน /etc/fstab อย่าลืมลองติดตั้งด้วยตนเอง และตรวจสอบให้แน่ใจว่าทุกอย่างใช้งานได้!!!

ปรับปรุงประสิทธิภาพของ NFS

ประสิทธิภาพการทำงานของ NFS อาจได้รับผลกระทบจากหลายปัจจัย โดยเฉพาะอย่างยิ่งเมื่อรันผ่านการเชื่อมต่อที่ช้า เมื่อทำงานกับการเชื่อมต่อที่ช้าและโหลดหนัก ควรใช้พารามิเตอร์ hard ดีกว่าเพื่อไม่ให้การหมดเวลาทำให้โปรแกรมหยุดทำงาน แต่คุณต้องพิจารณาว่าหากคุณเมานต์ระบบไฟล์ผ่าน NFS ด้วยพารามิเตอร์ฮาร์ดผ่าน fstab และไม่สามารถเข้าถึงโฮสต์ระยะไกลได้ ระบบจะหยุดทำงานเมื่อทำการบูท

นอกจากนี้ หนึ่งในวิธีที่ง่ายที่สุดในการเพิ่มประสิทธิภาพ NFS คือการเพิ่มจำนวนไบต์ที่ถ่ายโอนในแต่ละครั้ง ขนาดของสี่พันเก้าสิบหกไบต์นั้นเล็กมากสำหรับการเชื่อมต่อที่รวดเร็วสมัยใหม่ การเพิ่มค่านี้เป็นแปดพัน 100 เก้าสิบสองหรือมากกว่านั้นสามารถพบได้ในการทดลองเพื่อค้นหาความเร็วที่ดีที่สุด

นอกจากนี้ก็ไม่ควรละสายตาจาก ฟังก์ชันการหมดเวลา- NFS รอการตอบสนองต่อการถ่ายโอนข้อมูลภายในระยะเวลาที่ระบุในฟังก์ชัน timeo หากไม่ได้รับการตอบกลับภายในเวลานี้ จะทำการถ่ายโอนซ้ำ

แต่สำหรับการเชื่อมต่อที่ไม่ว่างและช้า เวลานี้อาจน้อยกว่าเวลาตอบสนองของเซิร์ฟเวอร์และความจุช่องทางการสื่อสาร ส่งผลให้มีการส่งสัญญาณซ้ำโดยไม่จำเป็นซึ่งทำให้การทำงานช้าลง ตามค่าเริ่มต้น timeo คือ 0.7 วินาที (700 มิลลิวินาที) หลังจากไม่มีการตอบสนองเป็นเวลาเจ็ดร้อย ms เซิร์ฟเวอร์จะส่งอีกครั้งและเพิ่มเวลารอเป็นสองเท่าเป็น 1.4 วินาที เวลาที่เพิ่มขึ้นจะยังคงเป็นค่าที่สูงขึ้นต่อไปที่หกสิบวินาที ถัดไป ขึ้นอยู่กับพารามิเตอร์ hard/soft การดำเนินการบางอย่างจะเกิดขึ้น (ดูด้านบน)

คุณสามารถเลือกเวลาที่ดีที่สุดสำหรับค่าเฉพาะของแพ็กเก็ตที่ส่ง (ค่า rsize/wsize) โดยใช้คำสั่ง ping:

ไฟล์ ~ # ping -s 30 สองพันเจ็ดร้อยหกสิบแปดไฟล์เก็บถาวร PING archive.DOMAIN.local (10.0.0.6) 32768(32796) ไบต์ของข้อมูล 30 สองพันเจ็ดร้อย 70 6 ไบต์จากarchiv.domain.local (10.0.0.6): icmp_req=1 ttl=64 time=0.931 ms 30 สองพันเจ็ดร้อย 70 6 ไบต์จากarchiv.domain.local (10.0.0.6): icmp_req= 2 ttl=64 เวลา=0.958 ms 30 สองพันเจ็ดร้อย 70 6 ไบต์จากarchiv.domain.local (10.0.0.6): icmp_req=3 ttl=64 เวลา=1.03 ms 30 สองพันเจ็ดร้อย 70 6 ไบต์จากไฟล์เก็บถาวร .domain.local (10.0.0.6): icmp_req=4 ttl=64 time=1.00 ms 30 สองพันเจ็ดร้อย 70 6 ไบต์จาก archivev.domain.local (10.0.0.6): icmp_req=5 ttl=64 time=1.08 ms ^C --- สถิติการ Ping ของ archivev.DOMAIN.local --- 5 แพ็กเก็ตที่ส่ง, 5 ได้รับ, 0% การสูญเสียแพ็กเก็ต, เวลา 4006ms rtt min/avg/max/mdev = 0.931/1.002/1.083/0.061 ms

อย่างที่คุณเห็น เมื่อส่งแพ็คเก็ตขนาด 30 สองพันเจ็ดร้อยหกสิบแปด (32Kb) เวลาเดินทางจากไคลเอนต์ไปยังเซิร์ฟเวอร์และย้อนกลับจะลอยประมาณหนึ่งมิลลิวินาที หากเวลานี้เกินสองร้อย ms คุณควรพิจารณาเพิ่มค่า timeo เพื่อให้เกินมูลค่าการแลกเปลี่ยนสามถึงสี่เท่า ดังนั้นจึงเป็นการดีกว่าถ้าทำการทดสอบนี้ระหว่างที่มีการโหลดเครือข่ายจำนวนมาก

การเปิดตัว NFS และการตั้งค่าไฟร์วอลล์

บันทึกนี้คัดลอกมาจากบล็อก http://bog.pp.ru/work/NFS.html ขอบคุณมาก!!!

เรียกใช้เซิร์ฟเวอร์ NFS, เมานต์, บล็อก, โควต้า และสถานะด้วยพอร์ต "ถูกต้อง" (สำหรับไฟร์วอลล์)

  • ควรยกเลิกการต่อเชื่อมทรัพยากรทั้งหมดบนไคลเอนต์ก่อนจะดีกว่า
  • หยุดและปิดการใช้งาน rpcidmapd ไม่ให้เริ่มต้นหากไม่มีการวางแผน NFSv4: chkconfig --level สามร้อย 40 5 rpcidmapd ปิดบริการ rpcidmapd หยุด
  • หากจำเป็น ให้อนุญาตให้บริการ portmap, nfs และ nfslock เริ่มต้น: chkconfig --levels Threeร้อย 40 5 portmap/rpcbind บน chkconfig --levels Threeร้อย 40 5 nfs บน chkconfig --levels สามร้อย 40 5 nfslock on
  • หากจำเป็น ให้หยุดบริการ nfslock และ nfs เริ่ม portmap/rpcbind ยกเลิกการโหลดโมดูล บริการ nfslock หยุดบริการ nfs หยุดบริการ portmap start # service rpcbind start umount /proc/fs/nfsd service rpcidmapd stop rmmod nfsd service autofs stop # ที่ไหนสักแห่งในภายหลัง จะต้องเปิดใช้งาน rmmod nfs rmmod nfs_acl rmmod lockd
  • เปิดพอร์ตใน iptables
    • สำหรับ RPC: UDP/111, TCP/111
    • สำหรับ NFS: UDP/2049, TCP/2049
    • สำหรับ rpc.statd: UDP/4000, TCP/4000
    • สำหรับล็อค: UDP/4001, TCP/4001
    • สำหรับการติดตั้ง: UDP/4002, TCP/4002
    • สำหรับ rpc.rquota: UDP/4003, TCP/4003
  • สำหรับเซิร์ฟเวอร์ rpc.nfsd ให้เพิ่มบรรทัด RPCNFSDARGS="--port 2049" ไปที่ /etc/sysconfig/nfs
  • สำหรับเซิร์ฟเวอร์เมานท์ ให้เพิ่มบรรทัด MOUNTD_PORT=4002 ใน /etc/sysconfig/nfs
  • สำหรับฟังก์ชัน rpc.rquota สำหรับเวอร์ชันใหม่ คุณต้องเพิ่มบรรทัด RQUOTAD_PORT=4003 ใน /etc/sysconfig/nfs
  • สำหรับฟังก์ชัน rpc.rquota จำเป็นสำหรับเวอร์ชันเก่า (เพราะคุณต้องมีแพ็คเกจโควต้า 3.08 หรือใหม่กว่า) เพิ่มใน /etc/services rquotad 4003/tcp rquotad 4003/udp
  • จะตรวจสอบความเพียงพอของ /etc/exports
  • เรียกใช้บริการ rpc.nfsd, mountd และ rpc.rquota (เปิดตัว rpcsvcgssd และ rpc.idmapd พร้อมกันหากคุณลืมลบออก) บริการ nfsd start หรือในเวอร์ชันใหม่ บริการ nfs start
  • สำหรับเซิร์ฟเวอร์การบล็อกสำหรับระบบใหม่ ให้เพิ่มบรรทัด LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001 ใน /etc/sysconfig/nfs
  • สำหรับเซิร์ฟเวอร์ล็อคสำหรับระบบเก่า ให้เพิ่มโดยตรงไปที่ /etc/modprobe[.conf]: ตัวเลือก lockd nlm_udpport=4001 nlm_tcpport=4001
  • ผูกเซิร์ฟเวอร์สถานะ rpc.statd กับพอร์ตสี่พัน (สำหรับระบบเก่า ให้รัน rpc.statd ด้วยคีย์ -p 4000 ใน /etc/init.d/nfslock) STATD_PORT=4000
  • เริ่มบริการ lockd และ rpc services.statd nfslock start
  • ตรวจสอบให้แน่ใจว่าพอร์ตทั้งหมดถูกผูกไว้ตามปกติโดยใช้ "lsof -i -n -P" และ "netstat -a -n" (บางพอร์ตถูกใช้โดยโมดูลเคอร์เนลที่ lsof ไม่เห็น)
  • หากก่อนที่จะ "สร้างใหม่" เซิร์ฟเวอร์ถูกใช้โดยไคลเอนต์และไม่สามารถยกเลิกการต่อเชื่อมได้ คุณจะต้องรีสตาร์ทบริการติดตั้งอัตโนมัติบนไคลเอนต์ (am-utils, autofs)

ตัวอย่างการกำหนดค่าเซิร์ฟเวอร์ NFS และไคลเอ็นต์

การกำหนดค่าเซิร์ฟเวอร์

หากคุณต้องการทำให้ไดเร็กทอรีที่แบ่งพาร์ติชัน NFS ของคุณเป็นแบบสาธารณะและสามารถเขียนได้ คุณสามารถใช้ตัวเลือก all_squash ร่วมกับตัวเลือก anonuid และ anongid ตัวอย่างเช่น หากต้องการตั้งค่าการอนุญาตสำหรับผู้ใช้ "nobody" ในกลุ่ม "nobody" คุณสามารถดำเนินการดังต่อไปนี้:

ARCHIV ~ # cat /etc/exports # สิทธิ์การอ่านและเขียนสำหรับลูกค้าบน 192.168.0.100 พร้อมการเข้าถึง rw สำหรับผู้ใช้ Ninety-nine พร้อม gid Ninety-nine /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid = 99)) # การเข้าถึงการอ่านและเขียนสำหรับลูกค้าบน 192.168.0.100 ด้วยการเข้าถึง rw สำหรับผู้ใช้เก้าสิบเก้าด้วย gid เก้าสิบเก้า /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

นอกจากนี้ยังหมายความว่าหากคุณต้องการอนุญาตให้เข้าถึงไดเร็กทอรีที่กำหนด none.nobody จะต้องเป็นเจ้าของไดเร็กทอรีที่แชร์:

# chown -R none.nobody /files

การกำหนดค่าไคลเอ็นต์

บนไคลเอ็นต์ คุณต้องเมานต์ไดเร็กทอรีระยะไกลด้วยวิธีที่สะดวก เช่น ด้วยคำสั่ง mount:

ไฟล์ ~ # mount -t ไฟล์เก็บถาวร nfs:/files /archivs/files

ประวัติย่อ

วุ้ย... บทความจบแล้ว ปัจจุบันเราได้ศึกษา ระบบไฟล์เครือข่ายคืออะไรและวิธีการรับประทาน ในบทความหน้าผมจะลองทำ HOWTO ด้วย Kerberos Authentication กันดูครับ ฉันหวังว่าเนื้อหาจะเข้าใจได้และจำเป็น

ฉันยินดีที่จะเห็นการเพิ่มเติมและความคิดเห็นของคุณ!

NFS HOWTO, nfs.sourceforge, คน nfs? มนุษย์เมานต์ มนุษย์ส่งออก

RFC หนึ่งพันเก้าสิบสี่ - NFSv1, v2
RFC หนึ่งพันแปดร้อยสิบสาม - NFSv3
RFC สามพัน 500 30 - NFSv4
RFC 5 พัน 600 หกสิบเอ็ด - NFSv4.1
NFS HOWTO
nfs.sourceforge.net
มนุษย์เมานต์
การส่งออกของมนุษย์

ระบบไฟล์เครือข่าย (NFS)- โปรโตคอลการเข้าถึงเครือข่ายสำหรับระบบไฟล์ ช่วยให้คุณสามารถเชื่อมต่อระบบไฟล์ระยะไกลได้
เดิมพัฒนาโดย Sun Microsystems ในปี 1984 โดยมีพื้นฐานคือ Sun RPC: Remote Procedure Call NFS ไม่ขึ้นกับประเภทระบบไฟล์ของเซิร์ฟเวอร์และไคลเอ็นต์ มีการใช้งานเซิร์ฟเวอร์และไคลเอนต์ NFS มากมายสำหรับระบบปฏิบัติการต่างๆ NFS v.4 เวอร์ชันปัจจุบันรองรับวิธีการพิสูจน์ตัวตนที่หลากหลาย (โดยเฉพาะ Kerberos และ LIPKEY โดยใช้โปรโตคอล RPCSEC GSS) และรายการควบคุมการเข้าถึง (ทั้งประเภท POSIX และ Windows)
NFS ช่วยให้ไคลเอ็นต์สามารถเข้าถึงไฟล์และระบบไฟล์ของเซิร์ฟเวอร์ได้อย่างโปร่งใส แตกต่างจาก FTP ตรงที่โปรโตคอล NFS เข้าถึงเฉพาะส่วนของไฟล์ที่กระบวนการเข้าถึงเท่านั้น และข้อดีหลักของมันคือทำให้การเข้าถึงนี้โปร่งใส ด้วยเหตุนี้ แอปพลิเคชันไคลเอนต์ใด ๆ ที่สามารถทำงานกับไฟล์ในเครื่องจึงสามารถทำงานกับไฟล์ NFS ได้สำเร็จเช่นเดียวกันโดยไม่ต้องเปลี่ยนตัวโปรแกรมเอง
ไคลเอ็นต์ NFS เข้าถึงไฟล์บนเซิร์ฟเวอร์ NFS โดยการส่งคำร้องขอ RPC ไปยังเซิร์ฟเวอร์ สิ่งนี้สามารถนำไปใช้ได้โดยใช้กระบวนการผู้ใช้ปกติ กล่าวคือ ไคลเอนต์ NFS อาจเป็นกระบวนการผู้ใช้ที่ทำการเรียก RPC เฉพาะไปยังเซิร์ฟเวอร์ ซึ่งอาจเป็นกระบวนการของผู้ใช้ได้เช่นกัน

รุ่นต่างๆ
NFSv1 มีไว้สำหรับใช้ภายในเพื่อการทดลองเท่านั้น รายละเอียดการใช้งานถูกกำหนดไว้ใน RFC 1094
NFSv2 (RFC 1094, มีนาคม 1989) เดิมทีรันผ่าน UDP ทั้งหมด
NFSv3 (RFC 1813, มิถุนายน 1995) File descriptor ในเวอร์ชัน 2 เป็นอาร์เรย์ที่มีขนาดคงที่ 32 ไบต์ ในเวอร์ชัน 3 เป็นอาร์เรย์ขนาดตัวแปรที่มีขนาดสูงสุด 64 ไบต์ อาร์เรย์ที่มีความยาวผันแปรได้ใน XDR ถูกกำหนดโดยตัวนับ 4 ไบต์ตามด้วยไบต์จริง ซึ่งจะช่วยลดขนาดของตัวอธิบายไฟล์ในการใช้งานเช่น UNIX ซึ่งต้องใช้เพียงประมาณ 12 ไบต์ แต่อนุญาตให้การใช้งานที่ไม่ใช่ Unix สามารถแลกเปลี่ยนข้อมูลเพิ่มเติมได้
เวอร์ชัน 2 จำกัดจำนวนไบต์ต่อการอ่านหรือเขียน RPC ไว้ที่ 8192 ไบต์ ข้อจำกัดนี้ใช้ไม่ได้กับเวอร์ชัน 3 ซึ่งหมายความว่าการใช้ UDP ขีดจำกัดจะมีขนาดเท่ากับดาตาแกรม IP เท่านั้น (65535 ไบต์) ซึ่งช่วยให้สามารถใช้แพ็กเก็ตขนาดใหญ่สำหรับการอ่านและเขียนบนเครือข่ายที่รวดเร็ว
ขนาดไฟล์และออฟเซ็ตไบต์เริ่มต้นสำหรับขั้นตอน READ และ WRITE ตอนนี้ใช้การกำหนดแอดเดรสแบบ 64 บิต แทนที่จะเป็น 32 บิต ซึ่งช่วยให้ทำงานกับไฟล์ขนาดใหญ่ได้
คุณลักษณะของไฟล์จะถูกส่งกลับทุกครั้งที่เรียกซึ่งอาจส่งผลต่อคุณลักษณะ
การเขียน (WRITE) สามารถเป็นแบบอะซิงโครนัสได้ ในขณะที่เวอร์ชัน 2 ควรจะเป็นแบบซิงโครนัส
หนึ่งขั้นตอนถูกลบออก (STATFS) และเพิ่มเจ็ดขั้นตอน: ACCESS (ตรวจสอบสิทธิ์ของไฟล์), MKNOD (สร้างไฟล์ Unix พิเศษ), READDIRPLUS (ส่งคืนชื่อไฟล์ในไดเร็กทอรีพร้อมกับคุณลักษณะ), FSINFO (ส่งคืนข้อมูลทางสถิติเกี่ยวกับ ระบบไฟล์ ), FSSTAT (ส่งคืนข้อมูลระบบไฟล์ไดนามิก), PATHCONF (ส่งคืนข้อมูลไฟล์ POSIX.1) และ COMMIT (คอมมิตการเขียนแบบอะซิงโครนัสที่ทำไว้ก่อนหน้านี้ไปยังที่เก็บข้อมูลถาวร)
ในช่วงเวลาของการเปิดตัวเวอร์ชัน 3 นักพัฒนาเริ่มใช้ TCP มากขึ้นเป็นโปรโตคอลการขนส่ง แม้ว่านักพัฒนาบางรายจะใช้ TCP สำหรับ NFSv2 อยู่แล้ว แต่ Sun Microsystems ได้เพิ่มการรองรับ TCP ใน NFS เวอร์ชัน 3 ซึ่งทำให้การใช้ NFS ผ่านทางอินเทอร์เน็ตเป็นไปได้มากขึ้น
NFSv4 (RFC 3010, ธันวาคม 2000, RFC 3530, แก้ไขเดือนเมษายน 2003) ซึ่งได้รับอิทธิพลจาก AFS และ CIFS รวมถึงการปรับปรุงประสิทธิภาพ ความปลอดภัยระดับสูง และกลายเป็นโปรโตคอลเต็มรูปแบบ เวอร์ชัน 4 เป็นเวอร์ชันแรกที่พัฒนาร่วมกับ Internet Engineering Task Force (IETF) หลังจากที่ Sun Microsystems ถ่ายโอนการพัฒนาโปรโตคอลไปยัง NFS NFS v4.1 ได้รับการอนุมัติโดย IESG ในเดือนมกราคม 2010 และได้รับหมายเลข RFC 5661 นวัตกรรมที่สำคัญในเวอร์ชัน 4.1 คือข้อกำหนดของ pNFS - Parallel NFS ซึ่งเป็นกลไกสำหรับการเข้าถึงไคลเอ็นต์ NFS แบบขนานไปยังข้อมูลจากเซิร์ฟเวอร์ NFS แบบกระจายหลายตัว การมีอยู่ของกลไกดังกล่าวในมาตรฐานระบบไฟล์เครือข่ายจะช่วยสร้างระบบจัดเก็บข้อมูลและข้อมูล "คลาวด์" แบบกระจาย

โครงสร้าง NFS
โครงสร้าง NFS ประกอบด้วยสามองค์ประกอบในระดับที่แตกต่างกัน:
เลเยอร์แอปพลิเคชัน (NFS เอง) ประกอบด้วยการเรียกขั้นตอนระยะไกล (rpc) ซึ่งดำเนินการที่จำเป็นกับไฟล์และไดเร็กทอรีบนฝั่งเซิร์ฟเวอร์
ฟังก์ชั่นของเลเยอร์การนำเสนอดำเนินการโดยโปรโตคอล XDR (eXternal Data Representation) ซึ่งเป็นมาตรฐานการแยกข้อมูลข้ามแพลตฟอร์ม โปรโตคอล XDR อธิบายรูปแบบการแสดงข้อมูลแบบครบวงจรและเป็นที่ยอมรับซึ่งไม่ได้ขึ้นอยู่กับสถาปัตยกรรมของระบบคอมพิวเตอร์ เมื่อส่งแพ็กเก็ต ไคลเอ็นต์ RPC จะแปลงข้อมูลในเครื่องเป็นรูปแบบมาตรฐาน และเซิร์ฟเวอร์จะดำเนินการย้อนกลับ
บริการ RPC (การเรียกขั้นตอนระยะไกล) ซึ่งอนุญาตให้ไคลเอนต์ร้องขอขั้นตอนระยะไกลและดำเนินการบนเซิร์ฟเวอร์ แสดงถึงฟังก์ชันระดับเซสชัน การเชื่อมต่อทรัพยากรเครือข่าย
ขั้นตอนการเชื่อมต่อทรัพยากรเครือข่ายโดยใช้ NFS เรียกว่า "การส่งออก" ไคลเอนต์สามารถร้องขอให้เซิร์ฟเวอร์แสดงรายการทรัพยากรที่ส่งออกที่เป็นตัวแทน เซิร์ฟเวอร์ NFS เองไม่ได้ออกอากาศรายการทรัพยากรที่ส่งออก
ขึ้นอยู่กับตัวเลือกที่ระบุ ทรัพยากรที่ส่งออกสามารถติดตั้ง (แนบ) "อ่านอย่างเดียว" คุณสามารถกำหนดรายการโฮสต์ที่ได้รับอนุญาตให้เมานต์ ระบุการใช้ RPC ที่ปลอดภัย (secureRPC) ฯลฯ หนึ่งในตัวเลือก กำหนดวิธีการติดตั้ง: "แข็ง" ( แข็ง) หรือ "อ่อน" (อ่อน)
ด้วยการเมานต์แบบ "ฮาร์ด" ไคลเอนต์จะพยายามเมานต์ระบบไฟล์โดยเสียค่าใช้จ่ายทั้งหมด หากเซิร์ฟเวอร์ล่ม จะทำให้บริการ NFS ทั้งหมดค้าง: กระบวนการที่เข้าถึงระบบไฟล์จะเข้าสู่สถานะรอให้คำขอ RPC ดำเนินการให้เสร็จสิ้น จากมุมมองของกระบวนการผู้ใช้ ระบบไฟล์จะดูเหมือนดิสก์ในเครื่องที่ช้ามาก เมื่อเซิร์ฟเวอร์กลับสู่สถานะการทำงาน บริการ NFS จะยังคงทำงานต่อไป
ด้วยซอฟต์เมาต์ ไคลเอ็นต์ NFS จะพยายามเชื่อมต่อกับเซิร์ฟเวอร์หลายครั้ง หากเซิร์ฟเวอร์ไม่ตอบสนอง ระบบจะแสดงข้อความแสดงข้อผิดพลาดและหยุดการพยายามเมาต์ จากมุมมองของตรรกะของการดำเนินการไฟล์เมื่อเซิร์ฟเวอร์ล้มเหลว การเมาท์แบบ "soft" จะจำลองความล้มเหลวของดิสก์ในเครื่อง
การเลือกโหมดขึ้นอยู่กับสถานการณ์ หากข้อมูลบนไคลเอ็นต์และเซิร์ฟเวอร์ต้องซิงโครไนซ์ระหว่างที่บริการล้มเหลวชั่วคราว ควรติดตั้งแบบ "ฮาร์ด" โหมดนี้ยังขาดไม่ได้ในกรณีที่ระบบไฟล์ที่เมาท์ประกอบด้วยโปรแกรมและไฟล์ที่มีความสำคัญต่อการทำงานของไคลเอ็นต์ โดยเฉพาะสำหรับเครื่องที่ไม่มีดิสก์ ในกรณีอื่นๆ โดยเฉพาะอย่างยิ่งเมื่อพูดถึงระบบแบบอ่านอย่างเดียว โหมดซอฟต์เมาท์ดูเหมือนจะสะดวกกว่า

การแชร์บนเครือข่ายแบบผสม
NFS เหมาะอย่างยิ่งสำหรับเครือข่ายที่ใช้ UNIX เนื่องจากมาพร้อมกับระบบปฏิบัติการเวอร์ชันส่วนใหญ่ นอกจากนี้ การสนับสนุน NFS ยังถูกนำมาใช้ในระดับเคอร์เนล UNIX การใช้ NFS บนคอมพิวเตอร์ไคลเอนต์ Windows สร้างปัญหาบางอย่างที่เกี่ยวข้องกับความจำเป็นในการติดตั้งซอฟต์แวร์ไคลเอนต์พิเศษและมีราคาค่อนข้างแพง ในเครือข่ายดังกล่าว การใช้เครื่องมือการแบ่งปันทรัพยากรตามโปรโตคอล SMB/CIFS โดยเฉพาะซอฟต์แวร์ Samba ดูเหมือนจะดีกว่า

มาตรฐาน
RFC 1094 NFS: ข้อกำหนดโปรโตคอลระบบไฟล์เครือข่าย] (มีนาคม 1989)
ข้อมูลจำเพาะโปรโตคอล RFC 1813 NFS เวอร์ชัน 3] (มิถุนายน 1995)
โครงร่าง URL RFC 2224 NFS
RFC 2339 ข้อตกลงระหว่าง Internet Society, IETF และ Sun Microsystems, Inc. ในเรื่องของโปรโตคอล NFS V.4
RFC 2623 NFS เวอร์ชัน 2 และเวอร์ชัน 3 ปัญหาด้านความปลอดภัยและการใช้ RPCSEC_GSS และ Kerberos V5 ของโปรโตคอล NFS
ข้อควรพิจารณาในการออกแบบ RFC 2624 NFS เวอร์ชัน 4
โปรโตคอล RFC 3010 NFS เวอร์ชัน 4
โปรโตคอล RFC 3530 Network File System (NFS) เวอร์ชัน 4
RFC 5661 Network File System (NFS) เวอร์ชัน 4 โปรโตคอลรองเวอร์ชัน 1

แหล่งที่มาที่ใช้
1. ru.wikipedia.org
2. ru.science.wikia.com
3.phone16.ru
4. 4stud.info
5. yandex.ru
6.google.com

ฉันกำลังให้คำแนะนำในการติดตั้งและกำหนดค่า NFS (Network File System) NFS คือระบบไฟล์เครือข่ายที่ช่วยให้คุณเข้าถึงไฟล์และไดเร็กทอรีบนคอมพิวเตอร์ระยะไกล (เซิร์ฟเวอร์) เสมือนว่าไฟล์และไดเร็กทอรีเหล่านี้อยู่ในเครื่อง ข้อได้เปรียบหลักของระบบดังกล่าวคือ แต่ละเวิร์กสเตชันสามารถใช้พื้นที่ดิสก์ของตนเองน้อยลง เนื่องจากข้อมูลที่ใช้ร่วมกันจะถูกจัดเก็บไว้ในเครื่องที่แยกต่างหาก (คลังข้อมูล) และพร้อมใช้งานสำหรับเครื่องอื่นบนเครือข่าย NFS เป็นแอปพลิเคชันไคลเอ็นต์-เซิร์ฟเวอร์ที่กำหนดบทบาทหน่วยเก็บข้อมูลให้กับเซิร์ฟเวอร์ ผู้เข้าร่วมเครือข่ายแต่ละรายคือไคลเอนต์ NFS ที่ติดตั้งไดรฟ์เครือข่ายของเซิร์ฟเวอร์ในระบบไฟล์

ลองใช้ Ubuntu 12.04 เป็นเซิร์ฟเวอร์
เราจะใช้และทดสอบ Centos และ Winows 7 ในฐานะลูกค้า

เซิร์ฟเวอร์หลัก: 192.168.2.213 (Ubuntu)

ลูกค้า: 192.168.2.72 (Centos), 192.168.2.180 (Windows)

การตั้งค่าเซิร์ฟเวอร์

ก่อนอื่นคุณต้องกำหนดค่าเซิร์ฟเวอร์ เนื่องจากเราจะใช้ Ubuntu เป็นเซิร์ฟเวอร์ เราจึงต้องติดตั้งแพ็คเกจที่เหมาะสม

Root@ubuntu:~# apt-get ติดตั้ง nfs-kernel-server

หลังจากติดตั้งแพ็คเกจที่จำเป็นแล้ว เราได้สร้างไฟล์คอนฟิกูเรชันขึ้นมาสองไฟล์ จากบันทึกการติดตั้ง:

... การสร้างไฟล์ปรับแต่ง /etc/idmapd.conf ด้วยเวอร์ชันใหม่ การสร้างไฟล์ปรับแต่ง /etc/default/nfs-common ด้วยเวอร์ชันใหม่ ...

ไฟล์แรกอธิบายผู้ใช้ (สร้างขึ้นเมื่อติดตั้งแพ็คเกจ) และกลุ่มที่จะมีส่วนร่วมในการแมป (การระบุผู้ใช้)

Root@ubuntu:~# cat /etc/idmapd.conf Verbosity = 0 Pipefs-Directory = /run/rpc_pipefs # ตั้งค่าโดเมนของคุณเองที่นี่ หาก id แตกต่างจาก FQDN ลบชื่อโฮสต์ # Domain = localdomainไม่มีใคร-ผู้ใช้ = ไม่มีใครไม่มีใครกลุ่ม = ไม่มีกลุ่ม

ดังที่เราทราบใน Linux แต่ละไฟล์เป็นของผู้ใช้เฉพาะซึ่งมี UID, GID เป็นของตัวเอง แต่ในระบบ Windows รูปแบบจะแตกต่างกันเล็กน้อย และในเรื่องนี้ได้มีการคิดค้นกลไกการทำแผนที่ซึ่งแปลผู้ใช้ที่แตกต่างกันจากระบบปฏิบัติการที่แตกต่างกันไปเป็นรูปแบบที่เข้าใจได้สำหรับระบบไฟล์ Linux
ไฟล์ที่สองจำเป็นสำหรับกำหนดค่าการตรวจสอบสิทธิ์ Kerberos และกำหนดค่าพอร์ตที่ไม่ได้มาตรฐานซึ่ง daemon จะรับฟัง เรายังไม่ต้องการเขา เราจะกล่าวถึงการตั้งค่า Kerberos ในบทความถัดไป

Root@ubuntu:~# cat /etc/default/nfs-common # หากคุณไม่ได้ตั้งค่าสำหรับตัวเลือก NEED_ พวกเขาจะพยายาม # ตรวจจับอัตโนมัติ นี่ควรจะเพียงพอสำหรับคนส่วนใหญ่ ทางเลือกที่ถูกต้อง # สำหรับตัวเลือก NEED_ คือ "ใช่" และ "ไม่" # คุณต้องการเริ่มต้น statd daemon หรือไม่? ไม่จำเป็นสำหรับ NFSv4 NEED_STATD= # ตัวเลือกสำหรับ rpc.statd # rpc.statd ควรฟังบนพอร์ตเฉพาะหรือไม่ สิ่งนี้มีประโยชน์อย่างยิ่ง # เมื่อคุณมีไฟร์วอลล์แบบพอร์ต หากต้องการใช้พอร์ตคงที่ ให้ตั้งค่าตัวแปร # นี้ให้เป็นอาร์กิวเมนต์ statd เช่น: "--port 4000 --outgoing-port 4001" # สำหรับข้อมูลเพิ่มเติม โปรดดูที่ rpc.statd(8) หรือ http://wiki.debian.org/SecuringNFS STATDOPTS= # คุณต้องการเริ่ม gssd daemon หรือไม่ จำเป็นสำหรับการเมาท์ Kerberos NEED_GSSD=

ตอนนี้เรามาดำเนินการตั้งค่าต่อ
ไดเร็กทอรีทั้งหมดสำหรับการแชร์ต้องลงทะเบียนในไฟล์ /etc/exports ขั้นแรก เรามาสร้าง 2 โฟลเดอร์ในโฮมไดเร็กตอรี่แล้ววางไฟล์ลงไป แผนผังไดเร็กทอรีและไฟล์สำหรับการส่งออก:

Root@ubuntu:~# tree /home/alex/ /home/alex/ ├── nfs_dir1 │ ├── file1_dir1 │ ├── file2_dir1 │ └── file3_dir1 ├── nfs_dir2 ├─ ─ file1_dir2 ├── file2_dir2 └─ ─ file3_dir2

ตอนนี้คุณต้องกำหนดผู้ใช้และกลุ่มสำหรับไดเร็กทอรีเหล่านี้ (นำมาจากไฟล์ /etc/idmapd.conf)

Root@ubuntu:~# chown –R none:nogroup nfs_dir1/ root@ubuntu:~# chown –R none:nogroup nfs_dir2/

ขั้นแรก ให้ส่งออกไดเร็กทอรี nfs_dir1 สำหรับ IP ที่ระบุ แก้ไขไฟล์ /etc/exprots.

Root@ubuntu:~# vim /etc/exports # สำหรับโฮสต์เฉพาะ (Windows) /home/alex/nfs_dir1 192.168.2.180(rw,sync,all_squash,no_subtree_check,insecure) # สำหรับโฮสต์ใด ๆ บนซับเน็ต /home/alex /nfs_dir2 192.168 .2.0/24(rw,no_root_squash,ซิงค์,no_subtree_check)

ต่อไปนี้เป็นชุดตัวเลือกขั้นต่ำเพื่อให้พื้นที่เก็บข้อมูลทำงานอย่างถูกต้องกับ Windows OS

  • /home/อเล็กซ์/nfs_dir1– เส้นทางไปยังโฟลเดอร์ที่ได้รับสิทธิ์การเข้าถึง
  • 192.168.2.180 – IP address ที่ให้สิทธิ์เข้าถึงโฟลเดอร์ (ระบุทั้งเครือข่ายได้ โดยรายการจะมีลักษณะเป็น 192.168.2.0/24)
  • (rw, ซิงค์, all_squash, no_subtree_check)– ชุดตัวเลือก

ตัวเลือกยอดนิยม:

  • ร.ร–อ่าน/เขียน (สามารถรับค่า ro - อ่านอย่างเดียว)
  • no_root_squash– โดยค่าเริ่มต้น ผู้ใช้รูทบนเครื่องไคลเอนต์จะไม่สามารถเข้าถึงไดเร็กทอรีที่ใช้ร่วมกันของเซิร์ฟเวอร์ ด้วยตัวเลือกนี้ เราจะลบข้อจำกัดนี้ ด้วยเหตุผลด้านความปลอดภัย ไม่ควรทำเช่นนี้
  • ซิงค์– โหมดการเข้าถึงแบบซิงโครนัส (สามารถรับค่าตรงกันข้ามได้ – อะซิงโครนัส);
  • ไม่มีการเข้าถึง– ปฏิเสธการเข้าถึงไดเร็กทอรีที่ระบุ อาจมีประโยชน์หากก่อนหน้านี้คุณตั้งค่าการเข้าถึงสำหรับผู้ใช้เครือข่ายทั้งหมดไปยังไดเร็กทอรีบางรายการ และตอนนี้คุณต้องการจำกัดการเข้าถึงไดเร็กทอรีย่อยเฉพาะผู้ใช้บางรายเท่านั้น
  • all_squash– บอกเป็นนัยว่าการเชื่อมต่อทั้งหมดจะทำจากผู้ใช้ที่ไม่ระบุชื่อ (จำเป็นสำหรับไคลเอนต์ Windows)
  • ไม่ระบุ= 1,000 – เชื่อมโยงผู้ใช้ที่ไม่ระบุชื่อกับผู้ใช้ “ท้องถิ่น”
  • อนงค์ิด= 1,000 – ผูกผู้ใช้ที่ไม่ระบุชื่อเข้ากับกลุ่มผู้ใช้ "ท้องถิ่น"
  • no_subtree_check (subtree_check)–หากมีการส่งออกไดเรกทอรีย่อยของระบบไฟล์ แต่ไม่ใช่ทั้งระบบไฟล์ เซิร์ฟเวอร์จะตรวจสอบว่าไฟล์ที่ร้องขอนั้นอยู่ในไดเรกทอรีย่อยที่ส่งออกหรือไม่ การปิดใช้งานการยืนยันจะลดความปลอดภัยแต่จะเพิ่มความเร็วการถ่ายโอนข้อมูล
  • โดยทั่วไปแล้ว Linux (และระบบปฏิบัติการที่คล้าย Unix อื่นๆ) จะสำรองพอร์ต TCP และ UDP ตั้งแต่ 1-1023 (เรียกว่าพอร์ตที่ปลอดภัย) เพื่อใช้งานโดยกระบวนการผู้ใช้รูท เพื่อให้แน่ใจว่ารูทเริ่มต้นการเชื่อมต่อระยะไกล NFS โดยทั่วไปเซิร์ฟเวอร์ NFS ต้องใช้ไคลเอ็นต์ระยะไกลเพื่อใช้พอร์ตที่ปลอดภัย อย่างไรก็ตาม ระบบปฏิบัติการบางระบบไม่ปฏิบัติตามแบบแผนนี้ (เช่น Windows) ในกรณีเช่นนี้ตัวเลือก ไม่ปลอดภัยอนุญาตให้ไคลเอ็นต์ NFS ใช้พอร์ต TCP/UDP ใดก็ได้ โดยปกติแล้วจะจำเป็นเมื่อให้บริการไคลเอนต์ Windows

ตัวเลือกและไวยากรณ์ที่มีทั้งหมดสำหรับการเขียนโฮสต์ กลุ่มโฮสต์ ฯลฯ คุณสามารถอ่านได้ในคู่มือ

รูท@ubuntu:~#exportfs –a

ตอนนี้เรามาตรวจสอบสิ่งที่เราส่งออกไป

Root@ubuntu:~# Exportfs -v /home/alex/nfs_dir1 192.168.2.180(rw,wdelay,all_squash,no_subtree_check,ไม่ปลอดภัย) /home/alex/nfs_dir2 192.168.2.0/24(rw,wdelay,no_root_squash,no_subtree_check)

เซิร์ฟเวอร์ได้รับการกำหนดค่าแล้ว

การตั้งค่าลูกค้า

การตั้งค่าไคลเอนต์ Windows

หากไม่มีข้อความแสดงข้อผิดพลาด คุณสามารถเริ่มติดตั้งบนฝั่งไคลเอ็นต์ได้
ขั้นแรก คุณต้องเพิ่มบริการ NFS (บริการลูกค้า) โดยไปที่ เริ่ม -> แผงควบคุม -> โปรแกรมและคุณสมบัติและคลิกที่รายการเมนูด้านซ้าย เปิดหรือปิดคุณสมบัติ Windows- ในหน้าต่างที่ปรากฏขึ้น ให้เลือก ลูกค้าสำหรับ NFSและคลิก ตกลง(รูปที่ 1)


รูปที่ 1

ต่อไปคุณจะต้องเมานต์ดิสก์ ในการดำเนินการนี้คุณสามารถใช้บรรทัดคำสั่งหรือเพียงคลิก คลิกขวาที่ My Computer และเลือก Map Network Drive- และ เข้าบรรทัด \\192.168.2.213\home\alex\nfs_dir1- นี่คือ IP ของเซิร์ฟเวอร์และเส้นทางไปยังโฟลเดอร์ (รูปที่ 2)


รูปที่ 2

หากทุกอย่างเรียบร้อยเราจะเห็นดิสก์ (รูปที่ 3)


รูปที่ 3

สามารถทำได้โดยใช้บรรทัดคำสั่ง (รูปที่ 4)


รูปที่ 4

ข้อผิดพลาดที่เป็นไปได้:

คุณจะไม่สามารถเชื่อมต่อไดรฟ์เครือข่าย NFS กับ Windows OS (รูปที่ 5) ได้หาก
1. ไม่ได้ติดตั้งไคลเอนต์ NFS
2. เปิดใช้งานไฟร์วอลล์ (ไม่ได้กำหนดค่า)
3. ไม่มีการเข้าถึงเครือข่ายไปยังเซิร์ฟเวอร์
4. ป้อนพารามิเตอร์การเมานต์ไม่ถูกต้อง
5. ไม่ได้กำหนดค่าการส่งออก (ไม่ได้ใช้การตั้งค่า) บนเซิร์ฟเวอร์
6. เพิ่มตัวเลือกที่ไม่ปลอดภัยในการตั้งค่าการส่งออก


รูปที่ 5 – เกิดข้อผิดพลาดในการเชื่อมต่อไดรฟ์เครือข่าย NFS

คุณจะไม่สามารถเพิ่มไฟล์ลงในระบบไฟล์ที่เมาท์ได้ (รูปที่ 6) หาก:
1. ไม่ได้ตั้งค่าการอนุญาตโฟลเดอร์บนเซิร์ฟเวอร์ (nobody:nogroup)
2. ตัวเลือก all_squash ไม่ได้ถูกตั้งค่าไว้ในการตั้งค่าการส่งออก
3. ตัวเลือก rw ไม่ได้ถูกตั้งค่าไว้ในการตั้งค่าการส่งออก


รูปที่ 6 – ข้อผิดพลาดเมื่อเพิ่มไฟล์ลงในดิสก์ NFS

การตั้งค่าไคลเอ็นต์ Centos

การตั้งค่าระบบ Linux ค่อนข้างง่ายและไม่ยุ่งยาก คุณเพียงแค่ต้องติดตั้งแพ็คเกจที่จำเป็นและติดตั้งดิสก์ Centos ต้องการแพ็คเกจดังต่อไปนี้

# yum ติดตั้ง nfs-utils nfs-utils-lib

# mkdir -p /mnt/nfs # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/nfs # mount /dev/mapper/vg_slave-lv_root บน / พิมพ์ ext4 (rw) proc บน /proc ประเภท proc (rw) sysfs บน /sys ประเภท sysfs (rw) devpts บน /dev/pts ประเภท devpts (rw,gid=5,mode=620) tmpfs บน /dev/shm ประเภท tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0" ) /dev/sda1 บน /boot ประเภท ext4 (rw) ไม่มีบน /proc/sys/fs/binfmt_misc ประเภท binfmt_misc (rw) sunrpc บน /var/lib/nfs/rpc_pipefs ประเภท rpc_pipefs (rw) 192.168.2.213:/home/ alex/nfs_dir1 บน /mnt/nfs พิมพ์ nfs (rw,vers=4,addr=192.168.2.213,clientaddr=192.168.2.72)

ในกรณีนี้ เราสามารถเพิ่มไฟล์และไดเร็กทอรีใดๆ ลงในโฟลเดอร์ nfs_dir1 ที่เมาท์ในนามของผู้ใช้ใดๆ บนระบบ ( all_squash- แต่ถ้าเราเมานต์โฟลเดอร์ที่สอง nfs_dir2 มีเพียงรูทเท่านั้นที่สามารถเขียนลงไปได้เนื่องจากมีตัวเลือกอยู่ที่นั่น no_root_squash- มาตรวจสอบกัน

# mkdir /mnt/dir1 # mkdir /mnt/dir2 # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/dir1 # mount 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 หรือ # mount -t nfs4 -o rw,hard,intr,bg 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 # echo "Hello" > /mnt/dir1/file1 # echo "Hello" > /mnt/dir2/file1 # su alex $ echo "Hello" > /mnt/dir1/file1 $ echo "Hello" > /mnt/dir2/file1 bash: /mnt/dir2/file1: การอนุญาตถูกปฏิเสธ

ธงติดที่เป็นไปได้

ธง คำอธิบาย
ร.ร ติดตั้งระบบไฟล์สำหรับการอ่าน/เขียน (เซิร์ฟเวอร์จะต้องส่งออกในโหมดอ่าน/เขียน)
ไทย การติดตั้งระบบไฟล์แบบอ่านอย่างเดียว
บีจี หากไม่สามารถเมานต์ระบบไฟล์ได้ (เซิร์ฟเวอร์ไม่ตอบสนอง) คุณควรย้ายการดำเนินการไปที่พื้นหลังและดำเนินการประมวลผลคำขอเมานต์อื่น ๆ ต่อไป
แข็ง หากเซิร์ฟเวอร์ล่ม การดำเนินการที่พยายามเข้าถึงจะถูกบล็อกจนกว่าเซิร์ฟเวอร์จะกลับมาออนไลน์อีกครั้ง
อ่อนนุ่ม หากเซิร์ฟเวอร์ล่ม การดำเนินการที่พยายามเข้าถึงจะล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาด แฟล็กนี้มีประโยชน์ในการตั้งค่าเพื่อป้องกันไม่ให้กระบวนการหยุดทำงานในกรณีที่การติดตั้งระบบไฟล์ที่ไม่สำคัญไม่สำเร็จ
ภายใน ช่วยให้คุณสามารถขัดจังหวะการทำงานที่ถูกบล็อกจากแป้นพิมพ์ (ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น)
นนทร ไม่อนุญาตให้คุณขัดจังหวะการทำงานที่ถูกบล็อกจากแป้นพิมพ์
รีทรานส์=n ระบุจำนวนครั้งที่ต้องทำซ้ำคำร้องขอก่อนที่จะส่งคืนข้อความแสดงข้อผิดพลาด (สำหรับระบบไฟล์ที่เมาท์ด้วยแฟล็กซอฟต์)
เวลา=n ตั้งค่าช่วงเวลาหมดเวลาสำหรับคำขอ (ในหน่วยสิบของวินาที)
rsize=n ตั้งค่าขนาดบัฟเฟอร์การอ่านเป็น n ไบต์
wsize=fl ตั้งค่าขนาดบัฟเฟอร์การเขียนเป็น n ไบต์
วินาที=โหมด ตั้งค่าโหมดความปลอดภัย
เวิร์ส=น ตั้งค่าเวอร์ชันโปรโตคอล NFS
โปรโต = โปรโตคอล เลือกโปรโตคอลการขนส่ง ควรเป็นโปรโตคอล TCP สำหรับ NVS เวอร์ชัน 4

คุณยังสามารถตรวจสอบจากคอนโซลได้ว่าเซิร์ฟเวอร์ส่งออกระบบไฟล์อย่างถูกต้องหรือไม่

Root@centos ~# showmount -e 192.168.2.213 รายการส่งออกสำหรับ 192.168.2.213: /home/alex/nfs_dir2 192.168.2.0/24 /home/alex/nfs_dir1 192.168.2.180

การเพิ่มการเมานต์เพื่อเริ่มต้น

# cat /etc/fstab ... 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 nfs4 rw,bg,intr,hard,nodev,nosuid 0 0

Root@centos ~# mount -a -t nfs4

ข้อผิดพลาดที่เป็นไปได้

Root@centos ~# mount -a -t nfs4 mount.nfs4: จุดเมานต์ /mnt/dir2 ไม่มีอยู่ root@centos ~# mount -a -t nfs4 mount.nfs4: การแชร์ระยะไกลไม่อยู่ในรูปแบบ "host:dir"

ในกรณีแรก คุณต้องสร้างโฟลเดอร์ ส่วนที่สองมีข้อผิดพลาดทางไวยากรณ์ใน fstab
หากคุณพบข้อผิดพลาดเมื่อติดตั้งพาร์ติชัน NFS ให้ดำเนินการตามรายการ ข้อผิดพลาดที่เป็นไปได้จากส่วนที่แล้ว
คุณยังสามารถใช้ autofs เพื่อเมานต์พาร์ติชัน NFS จะมีการพูดคุยเรื่องอะไรใน.

เอ็น เอฟเอส ( ระบบไฟล์เครือข่าย) ออกแบบมาเพื่อการแบ่งปันเป็นหลัก ไฟล์และ โฟลเดอร์ระหว่าง / ยูนิกซ์ระบบจาก ซัน ไมโครซิสเต็มส์วี 1980- ช่วยให้คุณสามารถเมานต์ระบบไฟล์ในเครื่องผ่านเครือข่ายและโฮสต์ระยะไกลเพื่อโต้ตอบกับระบบเหล่านั้นราวกับว่าพวกเขาติดตั้งในเครื่องบนระบบเดียวกัน โดยการใช้ อฟสเราก็สามารถตั้งค่าการแชร์ไฟล์ระหว่างกันได้ ยูนิกซ์วี ลินุกซ์ระบบและ ลินุกซ์สำหรับระบบ ยูนิกซ์.

ประโยชน์ของ NFS

  1. อฟสสร้างการเข้าถึงไฟล์ระยะไกลในเครื่อง
  2. ใช้สถาปัตยกรรมมาตรฐาน ลูกค้า/เซิร์ฟเวอร์เพื่อแชร์ไฟล์ระหว่างเครื่องที่ใช้ * ทั้งหมด ห้าม.
  3. โดยการใช้ อฟสไม่จำเป็นต้องให้ทั้งสองเครื่องทำงานบนเครื่องเดียวกัน ระบบปฏิบัติการ.
  4. โดยการใช้ อฟสเราสามารถปรับแต่งโซลูชันได้ ที่เก็บข้อมูลแบบรวมศูนย์.
  5. ผู้ใช้ได้รับของพวกเขา ข้อมูลโดยไม่คำนึงถึงที่ตั้งทางกายภาพของพวกเขา
  6. อัตโนมัติ อัปเดตสำหรับไฟล์ใหม่
  7. เวอร์ชันใหม่กว่า อฟสรองรับการติดตั้ง บัญชีรายชื่อ, หลอกใต้ราก
  8. สามารถป้องกันได้ ไฟร์วอลล์และ เคอร์เบรอส.

บริการ NFS

บริการ เปิดตัวระบบ V- แพ็คเกจเซิร์ฟเวอร์ อฟสรวมผลิตภัณฑ์สามรายการที่รวมอยู่ในแพ็คเกจ พอร์ตแมปและ nfs-Utils.

  1. พอร์ตแมป: แสดงการโทรจากเครื่องอื่นไปยังบริการที่ถูกต้อง อาร์พีซี(ไม่จำเป็นกับ NFSv4).
  2. เอ็นเอฟเอส: แปลงคำขอระยะไกล การแชร์ไฟล์เพื่อร้องขอบนระบบไฟล์ในเครื่อง
  3. rpc.mountd: บริการนี้มีหน้าที่รับผิดชอบ การติดตั้งและ ยกเลิกการต่อเชื่อมระบบไฟล์

ไฟล์คอนฟิกูเรชันที่สำคัญสำหรับ NFS

  1. /etc/exports: ไฟล์คอนฟิกูเรชันหลัก อฟสส่งออกทั้งหมด ไฟล์และ แคตตาล็อกซึ่งกำหนดไว้ในไฟล์นี้และใน เซิร์ฟเวอร์ปลายทาง NFS.
  2. /etc/fstab: เพื่อติด ไดเร็กทอรี NFSบนระบบของคุณโดยไม่มี รีบูตเราต้องบันทึกเข้าไป /etc/fstab.
  3. /etc/sysconfig/nfs: ไฟล์กำหนดค่า อฟสเพื่อควบคุมพอร์ตไหน อาร์พีซีและบริการอื่นๆ ออดิชั่น.

การตั้งค่าและติดตั้ง NFS บนเซิร์ฟเวอร์ Linux

เพื่อกำหนดค่าการเมานท์ อฟสเราจะต้องมีรถอย่างน้อยสองคัน ลินุกซ์/ยูนิกซ์- ในบทช่วยสอนนี้ เราจะใช้เซิร์ฟเวอร์สองตัว

  1. เซิร์ฟเวอร์ NFS: nfsserver.example.ru พร้อม IP – 192.168.0.55
  2. ไคลเอนต์ NFS: nfsclient.example.ru พร้อม IP – 192.168.0.60

การติดตั้งเซิร์ฟเวอร์ NFS และไคลเอนต์ NFS

เราจำเป็นต้องติดตั้งแพ็คเกจ อฟสของเรา เซิร์ฟเวอร์ NFSและโดยรถยนต์ด้วย ไคลเอนต์ NFS- เราสามารถติดตั้งได้โดยใช้ “ ” ( หมวกแดง Linux) และแพ็คเกจการติดตั้ง “ ฉลาดรับ” (เดเบียนและ อูบุนตู).

# yum ติดตั้ง nfs-utils nfs-utils-lib # yum ติดตั้ง portmap (ไม่จำเป็นกับ NFSv4) # apt-get ติดตั้ง nfs-utils nfs-utils-lib

ตอนนี้วิ่ง บริการบนทั้งสองเครื่อง

# /etc/init.d/portmap start # /etc/init.d/nfs start # chkconfig --level 35 portmap on # chkconfig --level 35 nfs on

หลังจากติดตั้งแพ็คเกจและเรียกใช้บริการบนทั้งสองเครื่องแล้ว เราจำเป็นต้องกำหนดค่าทั้งสองเครื่องเพื่อแชร์ไฟล์

การตั้งค่าเซิร์ฟเวอร์ NFS

ขั้นแรกเรามาตั้งค่าเซิร์ฟเวอร์กันก่อน อฟส.

การตั้งค่าไดเร็กทอรีการส่งออก

#mkdir/nfsshare

ตอนนี้เราต้องสร้างรายการใน “ /etc/exports" และ รีสตาร์ทบริการเพื่อทำให้ไดเร็กทอรีของเราสามารถแชร์ได้บนเว็บ

# vi /etc/exports /nfsshare 192.168.0.60(rw,sync,no_root_squash)

ในตัวอย่างข้างต้น มีไดเร็กทอรีอยู่ข้างใต้ / เรียกว่า " nfsshare“ ปัจจุบันแชร์กับไคลเอนต์ IP “ 192.168.0.60 ” พร้อมสิทธิพิเศษ การอ่านและ บันทึก (รว) คุณยังสามารถใช้ ชื่อโฮสต์ลูกค้าแทน ไอพีในตัวอย่างข้างต้น

การตั้งค่า NFS

ตัวเลือกอื่น ๆ ที่เราสามารถใช้ในไฟล์ได้” /etc/exports” การแชร์ไฟล์มีลักษณะเช่นนี้

  1. โร: ด้วยตัวเลือกนี้เราสามารถให้ได้ การเข้าถึงแบบอ่านอย่างเดียวไปยังไฟล์ที่แชร์นั่นคือ ลูกค้าจะทำได้แค่เท่านั้น อ่าน.
  2. ร.ร: ตัวเลือกนี้อนุญาต ลูกค้าไปยังเซิร์ฟเวอร์เข้าถึงได้ทั้งสองอย่าง การอ่านและ บันทึกภายในแค็ตตาล็อกทั่วไป
  3. ซิงค์: การซิงโครไนซ์ยอมรับคำขอไปยังไดเร็กทอรีที่แชร์หลังจากนั้นเท่านั้น การเปลี่ยนแปลงมีความมุ่งมั่น
  4. no_subtree_check: ตัวเลือกนี้ป้องกันการตรวจสอบ ต้นไม้ย่อย- เมื่อไดเร็กทอรีที่ใช้ร่วมกันเป็นไดเร็กทอรีย่อยของระบบไฟล์ที่ใหญ่กว่า อฟสสแกนทุกไดเร็กทอรีที่อยู่ด้านบนเพื่อตรวจสอบสิทธิ์และรายละเอียด กำลังปิดใช้งานการยืนยัน ต้นไม้ย่อยสามารถปรับปรุงความน่าเชื่อถือได้ อฟสแต่ลด ความปลอดภัย.
  5. no_root_squash: วลีนี้อนุญาต ราก, เชื่อมต่อไปยังโฟลเดอร์เฉพาะ

สำหรับตัวเลือกเพิ่มเติมด้วย “ /etc/exports“แนะนำให้อ่าน หน้าคู่มือสำหรับ ส่งออก.

การตั้งค่าไคลเอ็นต์ NFS

หลังจากตั้งค่าแล้ว อฟส-เซิร์ฟเวอร์ เราต้องการ เมานต์ไดเรกทอรีหรือพาร์ติชันที่ใช้ร่วมกันนี้เปิดอยู่ ลูกค้าเซิร์ฟเวอร์

การติดตั้งไดเร็กทอรีที่แบ่งใช้บนไคลเอนต์ NFS

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

# showmount -e 192.168.0.55 รายการส่งออกสำหรับ 192.168.0.55: /nfsshare 192.168.0.60

การติดตั้งไดเร็กทอรีที่สามารถเข้าถึงได้บน NFS

เพื่อ เมานต์ทั่วไป อฟสไดเร็กทอรี เราสามารถใช้คำสั่ง mount ต่อไปนี้

# เมานต์ -t nfs 192.168.0.55:/nfsshare /mnt/nfsshare

คำสั่งดังกล่าวจะตั้งค่าไดเรกทอรีที่ใช้ร่วมกันเป็น “ /mnt/nfsshare” บนเซิร์ฟเวอร์ไคลเอนต์ คุณสามารถตรวจสอบได้ด้วยคำสั่งต่อไปนี้

#เมานท์ | grep nfs sunrpc บน /var/lib/nfs/rpc_pipefs ประเภท rpc_pipefs (rw) nfsd บน /proc/fs/nfsd ประเภท nfsd (rw) 192.168.0.55:/nfsshare บน /mnt ประเภท nfs (rw,addr=192.168.0.55)

คำสั่งเมานต์ข้างต้นเมานต์ไปที่ ไดเร็กทอรีที่ใช้ร่วมกันของ NFSบน ไคลเอนต์ NFSชั่วคราวเพื่อเมานต์ไดเร็กทอรี NFS อย่างสม่ำเสมอในระบบของคุณ โดยไม่คำนึงถึงการรีบูต เราจำเป็นต้องป้อนข้อมูลใน “ /etc/fstab“.

# vi /etc/fstab

เพิ่มบรรทัดใหม่ดังต่อไปนี้ตามที่แสดงด้านล่าง

192.168.0.55:/nfsshare /mnt nfs เริ่มต้น 0 0

การทดสอบโหมดการติดตั้ง NFS

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

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

เราได้สร้างไฟล์ข้อความใหม่ชื่อ “ nfstest.txt” ในไดเรกทอรีที่ใช้ร่วมกันนี้

# cat > /nfsshare/nfstest.txt นี่เป็นไฟล์ทดสอบเพื่อทดสอบการทำงานของการตั้งค่าเซิร์ฟเวอร์ NFS

บนฝั่งไคลเอ็นต์ nfsclient

ไปที่ไดเรกทอรีที่ใช้ร่วมกันบน เซิร์ฟเวอร์ไคลเอนต์และคุณจะพบไฟล์ที่แชร์โดยไม่มีการอัพเดตด้วยตนเองหรือบริการรีบูต

# ll /mnt/nfsshare รวม 4 -rw-r--r-- 1 รูทรูท 61 กันยายน 21 เวลา 21:44 น. nfstest.txt root@nfsclient ~]# cat /mnt/nfsshare/nfstest.txt นี่เป็นไฟล์ทดสอบ ทดสอบการทำงานของการตั้งค่าเซิร์ฟเวอร์ NFS

การถอดการเมานท์ NFS

ถ้าคุณต้องการ ถอนเมานต์ไดเร็กทอรีที่แชร์นี้จากเซิร์ฟเวอร์หลังจากที่คุณแชร์ไฟล์เสร็จแล้วคุณก็ทำได้ง่ายๆ ถอนเมานต์ไดเร็กทอรีเฉพาะนั้นโดยใช้คำสั่ง “ จำนวน- ดูตัวอย่างด้านล่างนี้

Root@nfsclient ~]# umount /mnt/nfsshare

คุณจะเห็นว่าการเมานท์นั้นถูกลบออกจากระบบไฟล์แล้ว

# df -h -F nfs

คุณจะเห็นว่าไดเร็กทอรีที่แชร์เหล่านี้ไม่สามารถใช้งานได้อีกต่อไป

คำสั่งที่สำคัญสำหรับ NFS

คำสั่งที่สำคัญกว่าสำหรับ อฟส .

  1. showmount -e: รายการที่มีอยู่ วัตถุที่ใช้ร่วมกันบนเครื่องคอมพิวเตอร์ของคุณ
  2. showmount -e : รายการที่มีอยู่ วัตถุที่ใช้ร่วมกันบน ระยะไกลเซิร์ฟเวอร์
  3. โชว์เมาท์ -d: รายการทั้งหมด ไดเรกทอรีย่อย
  4. ส่งออกfs-v: แสดงรายการที่แชร์ ไฟล์และ ตัวเลือกบนเซิร์ฟเวอร์
  5. ส่งออกfs -a: ส่งออกวัตถุที่มีอยู่ทั้งหมดที่อยู่ในรายการ /etc/exportsหรือชื่อ
  6. ส่งออกfs -u: ส่งออกวัตถุที่มีอยู่ทั้งหมดที่อยู่ในรายการอีกครั้ง /etc/exportsหรือชื่อ
  7. ส่งออกfs -r: อัปเดตรายชื่อเซิร์ฟเวอร์หลังการเปลี่ยนแปลง /etc/exports

มันคือทั้งหมดที่เกี่ยวกับ การเมานต์ NFSขณะนี้หากสนใจสามารถอ่านคำแนะนำเกี่ยวกับเรื่องนั้นได้ ทิ้งคุณไว้

เมื่อพูดถึงเครือข่ายคอมพิวเตอร์ คุณมักจะได้ยินพูดถึง NFS อยู่เสมอ คำย่อนี้หมายถึงอะไร?

เป็นโปรโตคอลระบบไฟล์แบบกระจายที่พัฒนาโดย Sun Microsystems ในปี 1984 ทำให้ผู้ใช้บนคอมพิวเตอร์ไคลเอนต์สามารถเข้าถึงไฟล์ผ่านเครือข่ายได้ คล้ายกับการเข้าถึงที่เก็บข้อมูลในเครื่อง เช่นเดียวกับโปรโตคอลอื่นๆ NFS ที่ใช้ระบบ Open Network Computing Remote Procedure Call (ONC RPC)

กล่าวอีกนัยหนึ่ง NFS คืออะไร? เป็นมาตรฐานแบบเปิด ซึ่งกำหนดโดย Request for Comments (RFC) ซึ่งอนุญาตให้ใครก็ตามสามารถนำโปรโตคอลไปปฏิบัติได้

รุ่นและรูปแบบต่างๆ

นักประดิษฐ์ใช้เฉพาะเวอร์ชันแรกเพื่อการทดลองของตนเอง เมื่อทีมพัฒนาเพิ่มการเปลี่ยนแปลงที่สำคัญกับ NFS ดั้งเดิมและเผยแพร่นอกเหนือจากการประพันธ์ของ Sun พวกเขากำหนดให้เวอร์ชันใหม่เป็น v2 เพื่อให้สามารถทดสอบการทำงานร่วมกันระหว่างการแจกแจงและสร้างทางเลือกสำรอง

NFS เวอร์ชัน 2

เวอร์ชัน 2 เริ่มแรกทำงานผ่าน User Datagram Protocol (UDP) เท่านั้น นักพัฒนาซอฟต์แวร์ต้องการคงฝั่งเซิร์ฟเวอร์ไว้โดยไม่ปิดกั้นการใช้งานนอกโปรโตคอลหลัก

อินเทอร์เฟซระบบไฟล์เสมือนช่วยให้สามารถใช้งานโมดูลาร์ได้ซึ่งสะท้อนให้เห็นในโปรโตคอลแบบง่าย ภายในเดือนกุมภาพันธ์ พ.ศ. 2529 มีการสาธิตโซลูชันสำหรับระบบปฏิบัติการ เช่น System V รีลีส 2, DOS และ VAX/VMS โดยใช้ Eunice NFS v2 อนุญาตให้อ่านไฟล์ได้เพียง 2 GB แรกเท่านั้น เนื่องจากข้อจำกัดแบบ 32 บิต

NFS เวอร์ชัน 3

ข้อเสนอแรกในการพัฒนา NFS เวอร์ชัน 3 ที่ Sun Microsystems ได้รับการประกาศไม่นานหลังจากการเผยแพร่การแจกจ่ายครั้งที่สอง แรงจูงใจหลักคือพยายามลดปัญหาประสิทธิภาพของการบันทึกแบบซิงโครนัส ภายในเดือนกรกฎาคม พ.ศ. 2535 การปรับปรุงเชิงปฏิบัติได้แก้ไขข้อบกพร่องหลายประการของ NFS เวอร์ชัน 2 เหลือเพียงการรองรับไฟล์ที่ไม่เพียงพอ (ขนาดไฟล์ 64 บิตและออฟเซ็ตไฟล์)

  • รองรับขนาดไฟล์ 64 บิตและออฟเซ็ตเพื่อจัดการข้อมูลที่มีขนาดใหญ่กว่า 2 กิกะไบต์ (GB)
  • รองรับการบันทึกแบบอะซิงโครนัสบนเซิร์ฟเวอร์เพื่อปรับปรุงประสิทธิภาพ
  • คุณลักษณะของไฟล์เพิ่มเติมในหลาย ๆ คำตอบเพื่อหลีกเลี่ยงการดึงข้อมูลซ้ำอีกครั้ง
  • การดำเนินการ READDIRPLUS เพื่อรับข้อมูลและคุณลักษณะพร้อมกับชื่อไฟล์เมื่อสแกนไดเร็กทอรี
  • การปรับปรุงอื่น ๆ อีกมากมาย

ในระหว่างการเปิดตัวเวอร์ชัน 3 การรองรับ TCP ในฐานะโปรโตคอลเลเยอร์การขนส่งเริ่มเพิ่มขึ้น การใช้ TCP เป็นวิธีการถ่ายโอนข้อมูลที่ดำเนินการโดยใช้ NFS บน WAN เริ่มอนุญาตให้ถ่ายโอนไฟล์ขนาดใหญ่เพื่อดูและเขียนได้ ด้วยเหตุนี้ นักพัฒนาจึงสามารถเอาชนะข้อจำกัด 8 KB ที่กำหนดโดย User Datagram Protocol (UDP) ได้

NFS v4 คืออะไร?

เวอร์ชัน 4 ซึ่งได้รับอิทธิพลจาก Endres File System (AFS) และ Server Message Block (SMB หรือที่เรียกว่า CIFS) มีการปรับปรุงประสิทธิภาพ ให้ความปลอดภัยที่ดีขึ้น และแนะนำโปรโตคอลการปฏิบัติตามข้อกำหนด

เวอร์ชัน 4 เป็นการเผยแพร่ครั้งแรกที่พัฒนาโดย Internet Engineering Task Force (IETF) หลังจากการพัฒนาโปรโตคอลจากภายนอกของ Sun Microsystems

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

โปรโตคอลระบบไฟล์ใหม่ล่าสุด NFS 4.2 (RFC 7862) เปิดตัวอย่างเป็นทางการในเดือนพฤศจิกายน 2559

ส่วนขยายอื่น ๆ

ด้วยการพัฒนามาตรฐาน เครื่องมือที่เกี่ยวข้องสำหรับการทำงานร่วมกับมาตรฐานก็ปรากฏขึ้น ตัวอย่างเช่น WebNFS ซึ่งเป็นส่วนขยายสำหรับเวอร์ชัน 2 และ 3 ช่วยให้ Network File System Access Protocol สามารถรวมเข้ากับเว็บเบราว์เซอร์ได้ง่ายขึ้น และเปิดใช้งานการทำงานข้ามไฟร์วอลล์ได้

โปรโตคอลบุคคลที่สามต่างๆ ยังเชื่อมโยงกับ NFS อีกด้วย ที่มีชื่อเสียงที่สุดคือ:

  • Network Lock Manager (NLM) พร้อมการสนับสนุนโปรโตคอลไบต์ (เพิ่มเพื่อรองรับ API การล็อคไฟล์ UNIX System V)
  • โควต้าระยะไกล (RQUOTAD) ซึ่งอนุญาตให้ผู้ใช้ NFS สามารถดูโควต้าพื้นที่เก็บข้อมูลบนเซิร์ฟเวอร์ NFS
  • NFS บน RDMA เป็นการดัดแปลง NFS ที่ใช้การเข้าถึงหน่วยความจำโดยตรงระยะไกล (RDMA) เป็นสื่อกลางในการส่งข้อมูล
  • NFS-Ganesha เป็นเซิร์ฟเวอร์ NFS ที่ทำงานในพื้นที่ผู้ใช้และรองรับ CephFS FSAL (File System Abstraction Layer) โดยใช้ libcephfs

แพลตฟอร์ม

Network File System มักใช้กับระบบปฏิบัติการ Unix (เช่น Solaris, AIX, HP-UX), MacOS ของ Apple และระบบปฏิบัติการที่คล้าย Unix (เช่น Linux และ FreeBSD)

นอกจากนี้ยังพร้อมใช้งานสำหรับแพลตฟอร์ม เช่น Acorn RISC OS, OpenVMS, MS-DOS, Microsoft Windows, Novell NetWare และ IBM AS/400

โปรโตคอลการเข้าถึงไฟล์ระยะไกลทางเลือก ได้แก่ Server Message Block (SMB หรือที่เรียกว่า CIFS), Apple Transfer Protocol (AFP), NetWare Core Protocol (NCP) และ OS/400 Server File System (QFileSvr.400)

นี่เป็นเพราะข้อกำหนดของ NFS ซึ่งส่วนใหญ่มุ่งเป้าไปที่ "เชลล์" ที่มีลักษณะคล้าย Unix

อย่างไรก็ตาม โปรโตคอล SMB และ NetWare (NCP) ถูกใช้บ่อยกว่า NFS บนระบบที่ใช้ Microsoft Windows AFP พบบ่อยที่สุดบนแพลตฟอร์ม Apple Macintosh และ QFileSvr.400 พบบ่อยที่สุดบน OS/400

การใช้งานทั่วไป

สมมติว่าสถานการณ์สไตล์ Unix ทั่วไปที่คอมพิวเตอร์เครื่องหนึ่ง (ไคลเอนต์) ต้องการเข้าถึงข้อมูลที่เก็บไว้ในอีกเครื่องหนึ่ง (เซิร์ฟเวอร์ NFS):

  • เซิร์ฟเวอร์ใช้กระบวนการ Network File System ซึ่งทำงานตามค่าเริ่มต้นเป็น nfsd เพื่อให้ลูกค้าเข้าถึงข้อมูลแบบสาธารณะได้ ผู้ดูแลระบบเซิร์ฟเวอร์กำหนดวิธีการเอ็กซ์พอร์ตชื่อไดเร็กทอรีและการตั้งค่า โดยทั่วไปจะใช้ไฟล์คอนฟิกูเรชัน /etc/exports และคำสั่ง Exportfs
  • การจัดการความปลอดภัยของเซิร์ฟเวอร์ทำให้มั่นใจได้ว่าสามารถจดจำและอนุมัติไคลเอ็นต์ที่ได้รับการตรวจสอบสิทธิ์ได้ การกำหนดค่าเครือข่ายทำให้มั่นใจได้ว่าลูกค้าที่มีสิทธิ์สามารถเจรจาผ่านระบบไฟร์วอลล์ใดก็ได้
  • เครื่องไคลเอ็นต์ร้องขอการเข้าถึงข้อมูลที่ส่งออก โดยปกติแล้วจะออกคำสั่ง จะสอบถามเซิร์ฟเวอร์ (rpcbind) ที่ใช้พอร์ต NFS และเชื่อมต่อในภายหลัง
  • หากทุกอย่างเกิดขึ้นโดยไม่มีข้อผิดพลาด ผู้ใช้บนเครื่องไคลเอนต์จะสามารถดูและโต้ตอบกับระบบไฟล์ที่ติดตั้งบนเซิร์ฟเวอร์ภายในพารามิเตอร์ที่อนุญาต

ควรสังเกตว่าระบบอัตโนมัติของกระบวนการ Network File System สามารถเกิดขึ้นได้ - อาจใช้ etc/fstab และ/หรือเครื่องมืออื่นที่คล้ายคลึงกัน

การพัฒนาจนถึงปัจจุบัน

ภายในศตวรรษที่ 21 โปรโตคอลที่แข่งขันกัน DFS และ AFS ไม่ประสบความสำเร็จทางการค้าที่สำคัญใดๆ เมื่อเทียบกับ Network File System IBM ซึ่งก่อนหน้านี้ได้รับสิทธิ์ทางการค้าทั้งหมดในเทคโนโลยีข้างต้น ได้บริจาคซอร์สโค้ด AFS ส่วนใหญ่ให้กับชุมชนซอฟต์แวร์เสรีในปี 2000 โครงการ Open AFS ยังคงมีอยู่ในปัจจุบัน ในช่วงต้นปี พ.ศ. 2548 IBM ได้ประกาศยุติการขาย AFS และ DFS

ในทางกลับกัน ในเดือนมกราคม พ.ศ. 2553 Panasas ได้เสนอ NFS v 4.1 ที่ใช้เทคโนโลยีที่ปรับปรุงความสามารถในการเข้าถึงข้อมูลแบบขนาน โปรโตคอล Network File System v 4.1 กำหนดวิธีการแยกข้อมูลเมตาของระบบไฟล์ออกจากตำแหน่งของไฟล์เฉพาะ ดังนั้นจึงเป็นมากกว่าการแยกชื่อ/ข้อมูลธรรมดาๆ

NFS ของเวอร์ชันนี้ในทางปฏิบัติคืออะไร? คุณลักษณะข้างต้นทำให้แตกต่างจากโปรโตคอลแบบเดิมซึ่งประกอบด้วยชื่อไฟล์และข้อมูลภายใต้การเชื่อมต่อกับเซิร์ฟเวอร์เพียงครั้งเดียว ด้วย Network File System v 4.1 ไฟล์บางไฟล์สามารถแชร์ผ่านเซิร์ฟเวอร์หลายโหนดได้ แต่การมีส่วนร่วมของไคลเอ็นต์ในการแชร์ข้อมูลเมตาและข้อมูลนั้นมีจำกัด

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

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