บังคับให้ unmount ไดเร็กทอรีที่เมาท์ NFS [ปิด]


163

ฉันมีไดเรกทอรีที่ติดตั้ง NFS บนเครื่อง Linux ที่หยุดทำงาน ฉันพยายามบังคับให้ unmount แต่ดูเหมือนจะไม่ทำงาน:

$ umount -f /mnt/data
$ umount2: Device or resource busy
$ umount: /mnt/data: device is busy

ถ้าฉันพิมพ์ " mount" ปรากฏว่าไดเรกทอรีนั้นไม่ได้ถูกเมานท์อีกต่อไป แต่มันแฮงค์ถ้าฉันทำ " ls /mnt/data" และถ้าฉันพยายามลบจุดเมานท์ฉันจะได้รับ:

$ rmdir /mnt/data
rmdir: /mnt/data: Device or resource busy

มีอะไรที่ฉันสามารถทำได้นอกเหนือจากการรีบูตเครื่อง?


3
ฉันเห็นด้วยใครก็ตามที่ลงคะแนนให้ปิดความสับสนนี้อย่างจริงจัง ปัญหานี้ได้รบกวนฉันมาหลายปีและคำตอบด้านล่าง umount -l สำหรับ Linux เป็นทางออกแรกที่ฉันพบว่าใช้งานได้
Lizardx

1
ตกลง แต่คุณสามารถหาได้จาก Super User แม้ว่าฉันจะไม่เห็นว่าทำไมคำถามจึงไม่ย้ายแทนที่จะปิด
deeenes

สำหรับ umount --forceจะพยายามให้ถอนการเชื่อมต่อยากขึ้นและ-vหรือ-vvvจะเปิดเผยสิ่งที่เป็นปัญหากับการเมาน ดังนั้นลอง:umount -vvv --force /badmount
gaoithe

5
@deeenes เนื่องจากคำถามนี้ถูกถามในเดือนกันยายน 2008 และผู้ใช้ระดับสูงไม่ได้เปิดตัวจนถึงเดือนกรกฎาคม 2009 ;-)
Martin Tournoij

@Carpetsmoker แต่ถูกทำเครื่องหมายเป็น off-topic ในปี 2013
hintss

คำตอบ:


254

คุณอาจลอง unmount ขี้เกียจ:

umount -l

3
สิ่งนี้ไม่ได้ดำเนินการทุกที่ ตัวอย่างเช่นฉันไม่ได้ใช้ FreeBSD
Daniel Papasian

28
@ แดเนียล: แน่นอน แต่มันเป็นคำถามของ Linux (ติดแท็กเช่นนั้น) และ Linux ก็มี
Jürgen A. Erhard

5
ฉันลองคำสั่งนี้บน Ubuntu และมันใช้งานไม่ได้
Kieran Andrews

1
สิ่งนี้ใช้ได้สำหรับฉัน (Slackware 14.0) ฉันมี CIFS mount ไม่ใช่ NFS ที่แขวนทุกอย่าง (รวมถึงlsof) ฉันทำให้เกิดปัญหาโดยแยกออกจากสคริปต์สำรองที่ฉันเขียน สคริปต์ติดตั้งและถอนการติดตั้งไดเรกทอรี แต่มีบางอย่างเกี่ยวกับการแยกความrsyncยุ่งเหยิงของฉันออก ฉันไม่รู้เกี่ยวกับการถอนการเชื่อมต่อที่ขี้เกียจ อาจเป็นอุปกรณ์ NAS ที่ก่อให้เกิดปัญหาทั้งหมด หลังจากเลิกเมานท์เรียบร้อยแล้วมันกลับกลายเป็นว่าฉันต้องรีบูทอุปกรณ์ก่อนที่จะเมานต์อุปกรณ์อีกครั้ง
ข้าวเปลือก

10
@KieranAndrews และคนอื่น ๆ fusermount -uz /path/to/fileในอูบุนตูลอง ใช้เสน่ห์สำหรับฉัน! :)
Matt Fletcher

78

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

ลินุกซ์

คำสั่งสำหรับสิ่งนั้นเป็นสิ่งที่ประมาณ:

ifconfig eth0:fakenfs 192.0.2.55 netmask 255.255.255.255

โดยที่ 192.0.2.55 เป็น IP ของเซิร์ฟเวอร์ NFS ที่หายไป จากนั้นคุณควรจะสามารถ ping ที่อยู่และคุณควรจะสามารถ unmount ระบบไฟล์ (ใช้ unmount -f) จากนั้นคุณควรทำลายอินเทอร์เฟซที่ใช้นามแฝงดังนั้นคุณจะไม่กำหนดเส้นทางทราฟฟิกไปยังเซิร์ฟเวอร์ NFS เก่าให้กับตัวเองอีกต่อไปด้วย:

ifconfig eth0:fakenfs down

FreeBSD และระบบปฏิบัติการที่คล้ายกัน

คำสั่งจะเป็นอย่างไร:

ifconfig em0 alias 192.0.2.55 netmask 255.255.255.255

จากนั้นให้ลบออก:

ifconfig em0 delete 192.0.2.55

คน ifconfig (8) มากขึ้น!


5
การรวมกันของifconfig eth0:fakenfs ...' and umount -f -l / my / mount / dir 'ช่วยแก้ปัญหาให้ฉัน
pts

1
ฉันด้วยปัญหา unmount ป้องกันฉันจากการระงับแล็ปท็อปของฉันดังนั้นวิธีนี้มีประโยชน์จริงๆ ฉันได้สร้างสคริปต์ของตัวเองโดยอัตโนมัติเช่นกัน
albfan

ดังนั้นสำหรับการลบนามแฝงจาก Linux มันจะเป็นifconfig eth0:fakenfs deleteอย่างไร หรือฉันกำลังมองหาอย่างอื่น? ชอบifconfig eth0 delete 192.0.2.55ไหม
Ehtesh Choudhury

2
@Shurane ภายใต้ Linux การลบนามแฝงด้วยifconfig eth0:fakenfs downควรทำเคล็ดลับ
Sven

1
ขอบคุณทำงานที่ยอดเยี่ยม! ในกรณีของฉันเซิร์ฟเวอร์ nfs กลับมาออนไลน์และยังคงไม่สามารถ
ถอนการติดตั้ง

20

ลองวิ่ง

lsof | grep /mnt/data

ควรแสดงรายการกระบวนการใด ๆ ที่กำลังเข้าถึง / mnt / data ที่จะป้องกันไม่ให้ถูกเมานท์


1
มีประโยชน์แน่นอนแม้ว่าจะไม่ได้ช่วยชีวิตฉันอย่างสมบูรณ์ แต่มีประโยชน์
James T Snell

2
เมื่อ lsof แฮงค์ตลอดกาลลอง "lsof -b" (มีข้อผิดพลาด lsof เกิดขึ้นกับ NFS โปรดดูเช่น bugzilla.redhat.com/show_bug.cgi?id=962755 )
dr0i

11

ฉันมีปัญหาเดียวกันและทั้ง umount /path -fไม่ umount.nfs /path -fและไม่ fuser -km /pathได้ทำงาน

ในที่สุดฉันก็พบทางออกที่ง่าย>. <

sudo /etc/init.d/nfs-common restartจากนั้นให้ทำอย่างง่ายumount;-)


5
ทำงานให้ฉันด้วยumount -f -l ...
mivk

บนเซิร์ฟเวอร์อูบุนตู 14.04 ฉันต้องsudo service nfs-kernel-server restartแต่คำตอบของคุณพาฉันไปยังเส้นทางที่ถูกต้องแน่นอน!
Murmel

4

เซิร์ฟเวอร์ NFS ของคุณหายไป

ทางออกที่ดีที่สุดของคุณคือถ้าเซิร์ฟเวอร์ NFS กลับมา

หากไม่เป็นเช่นนั้น "umount -f" ควรทำเคล็ดลับ มันไม่ได้ผลเสมอไป แต่มักจะเป็นเช่นนั้น

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

สุดท้ายฉันคิดว่าคุณต้องรีบูต

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


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

4

ไม่พบคำตอบที่ใช้การได้ที่นี่; แต่บน linux คุณสามารถเรียกใช้ "umount.nfs4 / volume -f" และมัน unmount มันอย่างแน่นอน


4
ไม่ใช่ umount.nfs4 คำสั่งย่อยสำหรับ umount หรือไม่ ในคำอื่น ๆเป็นเช่นเดียวกับumount -f /some/mountpoint umount.nfs4 /some/mountpoint -f
วิลล์

1
น่าสนใจ ที่ด้านข้างของฉัน (หลังจาก NFS-Server หายไป): การumountโทรumount.nfsแฮงตลอดกาล (ไม่คำนึงถึงตัวเลือก) umount.nfs4 /mnt -fใช้เวลาค่อนข้างนาน แต่ก็เสร็จสมบูรณ์ umount.nfs4 /mnt -lเสร็จสิ้นทันที (อาจเป็นเพราะไม่รอกระบวนการ)
Tino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.