ฉันจะใช้ inotify หรือตั้งชื่อ pipes ผ่าน SSHFS ได้อย่างไร


12

ด้วยsshfsความมหัศจรรย์ฉันสามารถติดตั้ง dir บ้านของฉันจากเซิร์ฟเวอร์ระยะไกลด้วย

sshfs user@server:/home/user ~/remote

ในแง่ดีฉันคิดว่าฉันตั้งค่าโลคัลinotify-hook on ~/remote/logFile(ในsshfsmount) ดังนั้นโปรแกรมโลคัลสามารถตอบสนองต่อการเปลี่ยนแปลงบันทึกระยะไกล

cd ~/remote
touch logFile                                # create remote file
inotifywait logFile &                        # set up local inotify-hook
ssh user@server -x touch /home/user/logFile  # touch file from remote

ไม่มีอะไรเกิดขึ้น inotifywaitจะเงียบถ้าฉันtouchไฟล์ในเครื่อง การเขียนไปป์ที่มีชื่อล้มเหลวในทำนองเดียวกัน

ทำไมนี้
ฉันจะเชื่อมช่องว่างนี้ได้อย่างไร

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


2
ฉันไม่คิดว่าจะมีวิธีใดที่inotifyระบบโลคัลสามารถตรวจจับการเปลี่ยนแปลงในระบบไฟล์ระยะไกลได้ เคอร์เนลในระบบไม่อยู่ในลูปในการเปลี่ยนแปลงเหล่านั้น คุณต้องรันinotifywaitบนเซิร์ฟเวอร์ไม่ใช่ไคลเอนต์
Barmar

@Barmar แต่แล้วลูกค้า (เครื่องท้องถิ่น) จะไม่ทราบเกี่ยวกับการเปลี่ยนแปลง ฉันแก้ไขเพื่อเพิ่มเล็กน้อยเกี่ยวกับที่
Anko

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

คุณตรวจดู gamin ไหม?
Janus Troelsen

@JanusTroelsen ฉันไม่เคยได้ยินเรื่อง gamin ตามหน้าภาพรวมมันใช้ inotify ด้วย มันมีประโยชน์สำหรับการกระจายการปรับปรุงดังกล่าวผ่านเครือข่ายหรือไม่?
Anko

คำตอบ:


10

ระบบไฟล์ SSHFS นี้สร้างขึ้นบนโปรโตคอลSFTP SFTP จัดหาสิ่งอำนวยความสะดวกเพียงอย่างเดียวในการจัดการไฟล์ในรูปแบบ "คลาสสิค" ไคลเอนต์ทำการร้องขอไปยังเซิร์ฟเวอร์ (รายการไดเรกทอรีอัปโหลดไฟล์ ฯลฯ ) และเซิร์ฟเวอร์ตอบสนอง ไม่มีสิ่งอำนวยความสะดวกในโพรโทคอลนี้สำหรับเซิร์ฟเวอร์เพื่อแจ้งลูกค้าโดยทันทีว่ามีบางสิ่งเกิดขึ้น

สิ่งนี้ทำให้ไม่สามารถจัดหาสิ่งอำนวยความสะดวกเช่น inotify ภายใน SSHFS เป็นไปได้ที่จะขยาย SSHFS ด้วยส่วนขยายที่เป็นกรรมสิทธิ์หรือเสริมด้วยการเชื่อมต่อ SSH ที่เต็มเปี่ยม แต่ฉันไม่รู้จักส่วนขยายดังกล่าวกับ SSHFS

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

FAM (inotify อนาล็อกใน SGI IRIX ซึ่งถูกย้ายไปยัง Linux) จัดเตรียม daemon ซึ่งอนุญาตให้ส่งการแจ้งเตือนผ่านเครือข่าย Linux ค่อนข้างเลิกใช้งาน FAM ตั้งแต่ inotify เข้ามาในฉากดังนั้นฉันไม่ทราบว่าการเรียกใช้งาน FAM ให้ทำงานจะง่ายกว่าการกลิ้งระบบแจ้งเตือนเฉพาะแอปพลิเคชันของคุณเองหรือไม่ คุณต้องตั้งค่าการส่งต่อพอร์ตผ่าน SSH หรือสร้าง VPN เพื่อรักษาความปลอดภัยให้กับลิงก์เครือข่ายสำหรับ FAM และ NFS

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


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