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

สามเงื่อนไขตัดสินว่าตัวเลือกนี้สำคัญหรือไม่

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

ConditionIf yesIf no
Version is 4.0The option can matterSkip it; inspect the session instead
Server can reach the addressAdvertise itFix reachability first
Failure is a callbackDiagnose callback pathLook at mount and export

การตอบคำถามเหล่านี้ผิดลำดับคือวิธีที่ผู้คนเพิ่มที่อยู่เรียกกลับเข้าไปในการเมานต์ 4.2 แล้วสรุปว่าตัวเลือกนี้เสีย

อ่านเวอร์ชันย่อยก่อน

nfsstat -m

สำหรับการเมานต์ที่มีอยู่แล้ว คำสั่งนี้พิมพ์ข้อมูลและแฟล็กของการเมานต์ รวมถึงเวอร์ชันที่มีผลเป็น vers=4.0, vers=4.1 หรือ vers=4.2 บันทึกที่บอกเพียง “NFSv4” จะละรายละเอียดเดียวที่ตัดสินว่าตัวเลือกนี้เกี่ยวข้องหรือไม่ อ่านตัวเลข ไม่ใช่คำ

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

สำหรับ 4.0 ให้ประกาศที่อยู่ที่เซิร์ฟเวอร์เข้าถึงได้

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

mount -t nfs -o vers=4.0,clientaddr=10.8.0.6 10.8.0.1:/export /mnt/share

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

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

4.1 และ 4.2 ไม่ใช้ตัวเลือกนี้

Linux NFSv4.1 และ 4.2 พาการเรียกกลับผ่านการเชื่อมต่อที่ไคลเอนต์สร้างขึ้น และ 4.1 เรียกกลไกนั้นว่า backchannel พวกมันไม่ได้ขึ้นกับการที่เซิร์ฟเวอร์เปิดการเชื่อมต่อใหม่ไปยังที่อยู่ที่ประกาศ ดังนั้น clientaddr จึงไม่ได้ซ่อมเส้นทางเรียกกลับของ 4.1 หรือ 4.2

นั่นไม่ได้หมายความว่า 4.1 และ 4.2 ไม่มีปัญหาการเรียกกลับ แต่หมายความว่าการวินิจฉัยต่างกัน ตรวจสอบเซสชันที่สร้างขึ้นและสถานะ backchannel ของมัน แทนที่จะมองหาพอร์ตเรียกกลับขาเข้าที่ไม่ควรมีอยู่เลย การไม่มีกฎขาเข้าคือสถานะที่คาดไว้ ไม่ใช่ข้อบกพร่องที่ต้องแก้

แยกความล้มเหลวในการเมานต์ออกจากความล้มเหลวของการเรียกกลับ

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

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

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

บทความที่เกี่ยวข้อง