ฉันจะทราบได้อย่างไรว่ารีโมต NFS กำลังเอ็กซ์พอร์ตไดเร็กทอรีหรือไม่?


11

ในสคริปต์ของฉันฉันมีสถานะหลายเลเยอร์:

  1. ระยะไกลสามารถใช้ได้ (ping)
  2. บริการ NFS ระยะไกลเปิดใช้งานอยู่
  3. รีโมต NFS กำลังเอ็กซ์พอร์ตไดเร็กทอรีที่แน่นอน
  4. รีโมต NFS ถูกเมาท์ (เมาท์)

สำหรับ (2) และ (3) ฉันเชื่อว่าrcpinfoเป็นทางออกที่ดีที่สุด สำหรับ (2) ฉันไม่สามารถหาวิธี จำกัด คิวรีของฉันให้แคบลงไปยังบริการ NFS โดยไม่ต้องเริ่ม subshell (ซึ่งไม่เป็นที่ยอมรับสำหรับแอปพลิเคชันนี้) สำหรับ (3) ฉันไม่แน่ใจว่าข้อมูลนี้สามารถใช้งานได้จากระยะไกล (โดยไม่ต้องsshเข้าร่วม)

ฉันกำลังทำงานกับ RHEL 6 และไม่สามารถเข้าถึงโปรแกรมที่ไม่รวมอยู่ในการกระจายมาตรฐาน

คำตอบ:


16

สำหรับ 3) คุณอาจต้องการใช้showmount -e remote_nfs_serverซึ่งจะแสดงว่า remote_nfs_server ส่งออกสิ่งใดหรือไม่

และสำหรับ 2) หากคุณไม่ต้องการใช้ shubshell และรู้ว่าเซิร์ฟเวอร์ระยะไกลรัน NFSv3 หรือ NFSv4 และหาก TCP หรือ UDP คุณสามารถค้นหาโดยเฉพาะกับ rpcinfo:
rpcinfo -u remote_nfs_server nfs 3 สำหรับ NFSv3 ผ่าน UDP และ
rpcinfo -t remote_nfs_server nfs 4NFSv4 ผ่าน TCP

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


ข้อมูลเพิ่มเติม:


showmount -r remoteจะบอกฉันว่าremoteกำลังส่งออกอะไรหรือไม่ แต่มีวิธีใดบ้างที่ฉันจะตรวจสอบว่าremote:/mnt/dirมีการส่งออกโดยไม่เริ่มต้น subshell (เช่นไปป์ไลน์) หรือไม่
Sean Allred

showmount -e remoteจะบอกคุณถ้าremoteมีการส่งออกอะไร showmount -rจะให้ข้อความข้อผิดพลาดแก่คุณเท่านั้นเนื่องจากไม่มีตัวเลือกนั้น คุณสามารถลองใช้การจับคู่สตริงย่อยของเชลล์เพื่อ grep โดยทั่วไปสำหรับนิพจน์ทั่วไปในเอาต์พุต showmount อาจดูได้เช่นstackoverflow.com/questions/12619720/…
doktor5000

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

ความผิดพลาดของฉันกับ-rตัวเลือกเมื่อเทียบกับ-e- นั่นคือสิ่งที่ฉันหมายถึง :) แนะนำ 'วิธีการพยายาม' ได้รับก่อน ฉันไม่ชอบมันเป็นพิเศษ แต่มันดูเหมือนตัวเลือกจริง
Sean Allred

5

คุณสามารถใช้showmount -e <server>สำหรับบางแง่มุมของ # 3 เมื่อการส่งออกเป็นแบบง่าย ๆ อย่างน้อยก็จะแนะนำว่ามีการส่งออกไดเรกทอรี (หรืออาจเป็นไดเรกทอรีหลักของไดเรกทอรีดังกล่าว)

# showmount -e server
/export                               (everyone)

สำหรับ # 2 ฉันไม่แน่ใจว่าคุณกำลังมองหาอะไร หากคุณกำลังใช้ NFSv3 คุณจะมองหาอย่างน้อย mountd และ nfs (และในบางกรณีอาจต้องการยืนยันตัวจัดการล็อก) คุณสามารถตรวจสอบ rpcinfo ใด ๆ อย่างชัดเจนตามที่คุณพูด

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting

showmount -r remoteจะบอกฉันว่าremoteกำลังส่งออกอะไรหรือไม่ แต่มีวิธีใดบ้างที่ฉันจะตรวจสอบว่าremote:/mnt/dirมีการส่งออกโดยไม่เริ่มต้น subshell (เช่นไปป์ไลน์) หรือไม่
Sean Allred

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

ฉันกำลังเขียนสคริปต์ของฉันใน Python 2.6 และใช้subprocessโมดูล ฉันสามารถตั้งค่าไปป์ไลน์กับมันได้ แต่ฉันก็ไม่ได้ยุ่งกับการออกแบบมาก ฉันต้องหลีกเลี่ยงการเริ่ม subshell เพื่อให้สคริปต์สามารถฆ่าได้อย่างสง่างาม - ถ้ามันถูกฆ่ากระบวนการลูกจะถูกฆ่า แต่ไม่ใช่ลูกของกระบวนการลูก ดังนั้น subshell จะถูกฆ่า แต่ไม่ใช่กระบวนการที่ subshell วางไข่ ฉันยังสังเกตเห็นrpcinfoอาจใช้เวลาถึงสามนาทีในการส่งคืนซึ่งเป็นพื้นฐานดั้งเดิมสำหรับสิ่งที่ไม่ต้องทำย่อย สายเกินไปที่จะเปลี่ยนแปลงในตอนนี้แม้ว่า
Sean Allred

เขียนสคริปต์แยกต่างหากที่ทำในสิ่งที่คุณต้องการ (เช่นเรียก showmount แต่รับอาร์กิวเมนต์สำหรับไดเรกทอรีและส่งคืนความสำเร็จ / ความล้มเหลวและรวมการหมดเวลาที่เหมาะสมสำหรับวัตถุประสงค์ของคุณ) จากนั้นเรียกสคริปต์นั้นจาก python ของคุณ
BowlOfRed

ฉันสามารถสัญญากับคุณได้ว่ามันไม่ง่ายอย่างที่คุณคิดทันที - เมื่อมันถูกล็อกดังนั้นrpcinfoไม่ตอบสนองอะไรนอกจาก SIGKILL (ซึ่งเป็นข้อมูลที่ผิดพลาด - ระบบปฏิบัติการเพิ่งฆ่ากระบวนการ) ไม่ว่าในกรณีใดก็ตามก็จะยังคงเริ่มเชลล์เพื่อเริ่มต้นrpcinfo- ปัญหาพื้นฐานยังคงอยู่
Sean Allred

0

แสดงรายการไดเร็กทอรีการเอ็กซ์พอร์ต root แบบหลอก NFS-V4 ทั้งหมด

ls /net/ip-addr-nfs-server

ตรวจสอบคำตอบของฉันในหัวข้ออื่น


เพื่อให้/netเมาต์ทำงาน/etc/auto.netสคริปต์ต้องสร้างว่าเซิร์ฟเวอร์มีการเอ็กซ์พอร์ตที่สอดคล้องกัน สิ่งนี้ใช้showmountคำสั่ง ถ้าเซิร์ฟเวอร์ที่มีเพียง NFSv4 มันเคยชินทำงาน (แสดง showmount RPC: Program not registeredและ/net/serverจะเป็นเพียงแค่รายงานFile not found)
Ale
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.