วิธีการลบไฟล์. fuse_hidden *


34

ฉันมีเซิร์ฟเวอร์ Linux ขนาดเล็ก (Debian Squeeze) ซึ่งใช้งานเซิร์ฟเวอร์ Samba ซึ่งได้รับการกำหนดค่าให้แชร์บางโฟลเดอร์กับเครื่อง windows บางเครื่อง ในขณะที่พยายามลบหนึ่งในไดเรกทอรีจาก windows ฉันได้รับข้อผิดพลาด "ไม่สามารถลบโฟลเดอร์"

ฉันพยายามลบไดเรกทอรีออกจากคอนโซลของ linux ฉันพบข้อผิดพลาดที่คล้ายกัน:

# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty

ฉันแสดงรายการเนื้อหาของไดเรกทอรีและพบไฟล์ชื่อ. fuse_hidden แล้วตามด้วยเลขฐานสิบหก (000bd8c100000185)

# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185

ฉันพยายามลบไฟล์. fuse_hidden แต่ไฟล์ใหม่สร้างขึ้นทันที (สังเกตการเปลี่ยนเลขฐานสิบหก)

# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186

ฉันพยายามใช้ Midnight Commander เพื่อลบไฟล์โดยไม่ประสบความสำเร็จ

โซลูชันอื่น ๆ ที่ฉันพบว่าเกี่ยวข้องกับ GUI และฉันมีคอนโซลเท่านั้น

ข้อเสนอแนะใด ๆ ที่ชื่นชม


3
ดูเหมือนว่าภูตฟิวส์จะทำงานอยู่ หยุดมันก่อนที่จะลบไฟล์
ott--

ฉันเปลี่ยนความคิดเห็นของฉันในเวลาเดียวกัน
ott--

นั่นเป็นความคิดแรกของฉัน แต่ฉันไม่สามารถหาบริการฟิวส์ที่จะหยุดฉันเริ่มต้นแซมบ้าแทนแก้ปัญหาไฟล์หายไป ขอบคุณ
Lando

rm dir-name -rf?
Hauke ​​Laging

คำตอบ:


52

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

  • ล็อกอินเข้าสู่ระบบที่ไฟล์นั้นมีอยู่จริง (ไม่มีการเชื่อมต่อเครือข่าย)
  • ดำเนินการlsof dir-name/.fuse_hidden000bd8c100000185เพื่อค้นหาว่าโปรเซสใดเปิดไฟล์ที่จัดการไว้
  • ยุติกระบวนการเหล่านั้นหากเหมาะสมหรือหาว่าขั้นตอนใดที่คุณสามารถทำได้เพื่อ "ดำเนินการอย่างสง่างาม" ปล่อยที่จับเปิดไฟล์โดยไม่ต้องยุติกระบวนการ

โดยปกติเมื่อคุณลบไฟล์บนระบบไฟล์โลคัลของคุณที่กระบวนการอื่นเปิดขึ้น OS จะปฏิบัติตามคำขอของคุณและลบออกจากแผนผังไดเรกทอรี แต่ inode ที่ Tree ชี้ไปนั้นยังคงถูกใช้งานโดยระบบปฏิบัติการ ทุกครั้งที่มีการเปิดไฟล์การเพิ่มจำนวน "ลิงก์นับ" จะเพิ่มขึ้นทีละหนึ่งและพื้นที่จะถูกปล่อยอย่างแท้จริงเมื่อจำนวนการเชื่อมโยงนั้นถึงศูนย์

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


ฉันเดาว่ามันเกี่ยวข้องกับบริการบางอย่างที่ยังคงใช้ไฟล์ (ในกรณีนี้แซมบ้า) ฉันลืมเรื่อง lsof
Lando

นำฉันไปสู่ปัญหา lsofช่วยฉันระบุกระบวนการที่ยังอ่านไฟล์อยู่และฉันสามารถลบทุกอย่างได้แล้ว!
ThanksForAllTheFish

ฉันมีปัญหาที่lsofและfuserไม่นำเสนอกระบวนการใด ๆ สำหรับไฟล์นั้นคำแนะนำใด ๆ
mxmlnkn

0

ขอบคุณสำหรับคำแนะนำ แต่ไม่มีอะไรทำงานให้ฉัน แต่ฉันพบวิธีแก้ไข: ฉันย้าย SSD ภายนอกไปยังพีซีที่ใช้ windows การใช้ File Explorer (เมื่อเลือก "รายการที่ซ่อนอยู่") ฉันไปที่.Trashesไดเรกทอรีก็สามารถลบ.fuser_hiddenไฟล์ได้

หวังว่านี่จะช่วยได้!

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