อุปกรณ์ sshfs ไม่ว่าง


30

ฉันติดตั้งระบบไฟล์ระยะไกลโดยใช้ sshfs (รุ่น 2.8.4)

sshfs -o allow_root joeuser@example.com: ./example

แต่การยกเลิกการต่อเชื่อมมันล้มเหลว

> fusermount -u example
umount: /home/joeuser/example: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

ความคิดเห็นใด ๆ เกี่ยวกับสิ่งที่อาจทำให้เกิดข้อผิดพลาดนี้และจะแก้ไขได้อย่างไร

คำตอบ:


14

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

lsof +f -- exampleเพื่อตรวจสอบการทำงาน มันจะบอกว่ากระบวนการ (es) กำลังใช้ระบบไฟล์ ตัดสินใจด้วยตัวคุณเองว่าจะให้ปิดไฟล์ฆ่าพวกเขาหรือเลื่อนการทำงานของ unmount


lsof แปลกไม่ได้แสดงกระบวนการ gvfsd-archive ซึ่งถูกทิ้งไว้จากการเปิด (และปิด?) ไฟล์เก็บถาวรจาก GUI จัดการไฟล์ ดังนั้นตรวจสอบps aux | grep gvfsd-archiveด้วย
alexei

ให้คำเตือนว่า lstat ไม่สามารถดำเนินการได้และข้อมูลอาจไม่สมบูรณ์และไม่ได้ระบุผู้กระทำผิด ในกรณีของฉันฉันมีเทอร์มินัลที่เปิดอยู่พร้อมกับไดเร็กตอรี่การทำงานภายในไดรฟ์
Jānis Elmeris

36

ฉันคิดว่าคุณต้องการ unmount ขี้เกียจ:

sudo umount -l example

1
ฉันคิดว่าคำแนะนำของคุณไม่ถูกต้อง ตามที่หน้าคู่มือ Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem *as soon as it is not busy* anymoreumount ดังนั้นจะไม่สามารถแก้ไขปัญหาเดิมได้ ตกลงกับ @Gilles lsofควรช่วยที่นี่

2
จริงๆแล้วมันใช้งานได้สำหรับฉัน lsof ไม่พบไฟล์ที่เปิด แต่umount -lทำงานได้
gerrit

1
วิธีนี้ใช้ได้ผลกับฉันด้วย!
ด่าน

1
ประสบปัญหาเดียวกันกับ sshfs สิ่งนี้ก็ใช้ได้กับฉันเช่นกัน
Orun

4

ฉันเพิ่งมีปัญหานี้และไม่สามารถkill -9อ่านจากระบบไฟล์ที่ติดตั้งได้ kill -9ไม่ทำงานแม้หลังจากfusermount -zu /mount/pointหรือumount -l /mount/point(ซึ่งทำงาน) pkill -9 sshfsสิ่งเดียวที่ทำงานเป็น


1
fusermount -zu /mount/pointทำงานให้ฉัน ขอบคุณ!
ostrokach

3

การใช้งาน Ubuntu man fusermountจะบอกเกี่ยวกับ-zตัวเลือกซึ่งมีเอกสารว่า "lazy unmount" ดูเหมือนว่าจะมีความเกี่ยวข้อง แต่ต้องการการยืนยันซึ่งได้รับจากหน้าคนอื่น ๆ นี้: fusermount (man.he.net)ซึ่งบอกว่า "ขี้เกียจเดินเท้า (ทำงานแม้ว่าทรัพยากรจะยังยุ่งอยู่)" หนึ่งจะต้องใช้มันกับ-uที่-zตัวเลือกเพียงอย่างเดียวจะสร้างข้อผิดพลาด ฉันลอง-zตัวเลือกแล้วและสามารถยืนยันได้ว่ามันเป็นการหลอกลวง แต่นี่ดูเหมือนจะหลอกลวงมากเกินไป: มันทำอะไรกันแน่? ทำให้เลิกเมานท์โดยอัตโนมัติทันทีที่ไดเรกทอรีไม่ว่างอีกต่อไปหรือไม่ ฉันไม่รู้ไม่เอกสารไม่ปลอดภัย

ดังนั้นนี่คืออีกทางเลือกหนึ่ง verbose มากขึ้น แต่ปลอดภัยกว่า: พยายาม unmount จนกว่าจะประสบความสำเร็จหลายครั้งตามที่ต้องการในลูป

echo -n "Unmounting...";
fusermount -u -q "$MOUNT_POINT";
OK="$?";

while [ "$OK" != "0" ]
do
   sleep 1;
   echo -n ".";
   fusermount -u -q "$MOUNT_POINT";
   OK="$?";
done

echo;

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

ตัวเลือกนี้เป็นที่ยอมรับจากเชลล์สคริปต์ สำหรับการโต้ตอบบรรทัดรับคำสั่งการใช้-zตัวเลือกมีประโยชน์มากกว่า แต่อย่างใดอย่างหนึ่งอาจต้องทราบว่า man page ไม่ได้จัดทำเอกสารและอาจมีข้อสงสัยเกี่ยวกับสิ่งที่ทำ


2

ฉันมักจะเห็น "อุปกรณ์ไม่ว่าง" พร้อม sshfs เมื่อฉันเปิดหน้าต่างเทอร์มินัลไปยังไดเรกทอรีที่แชร์ sshfs การออกจากเทอร์มินัลหรือการเปลี่ยนไดเรกทอรีเป็นการแชร์ภายในเครื่องจากนั้นเรียกใช้ fusermount -u แก้ปัญหาของฉัน



1

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

  • fuser -vm /mount/point และ / หรือ
  • lsof /mount/point เพื่อค้นหาพวกเขา
  • ออกจาก / kill / do_something_with_them เพื่อไม่ให้ใช้/mount/pointอีกต่อไป

ลอง:

  • pkill -KILL sshfs แล้ว
  • fusermount -u /mount/point.

มันช่วยฉันเมื่อฉันสูญเสียการเชื่อมต่อเครือข่ายและไม่สามารถขยายจุดเชื่อมต่อ sshfs ที่ไม่ตอบสนองได้

นอกจากนี้หากคุณต้องการให้ sshfs หยุดโดยอัตโนมัติเมื่อการเชื่อมต่อเครือข่ายขาดหายให้แจ้งแอปพลิเคชันโดยใช้ sshfs ของข้อผิดพลาด I / O (เพื่อไม่ให้ติดค้างไม่สิ้นสุด) ติดตั้งด้วย:

  • sshfs -o ServerAliveInterval=15 remote-srv:/remote/dir /local/mountpoint

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

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