ฉันมีปัญหานี้กับโฟลเดอร์ในระบบไฟล์ btrfs การตรวจสอบจุดเชื่อมต่อและ lsof เป็นสิ่งปกติที่จะมองหา ในกรณีของฉันมันเป็นความเสียหายที่เกิดจากข้อผิดพลาดเก่าตั้งแต่แก้ไข:
สิ่งปกติที่ต้องตรวจสอบ:
- lsof + D <path> - นี้จะลิตรฉันs T ทั้งหมดoปากกาฉไมล์ คุณไม่สามารถลบโฟลเดอร์ที่มีไฟล์ที่เปิดอยู่ แต่โดยปกติแล้วจะมีข้อผิดพลาดแตกต่างกันเล็กน้อย: "อุปกรณ์หรือทรัพยากรไม่ว่าง" โปรดทราบว่าหากคุณออกจาก "+ D <path>" lsof จะแสดงรายการสำหรับโฟลเดอร์ทั้งหมดในระบบไฟล์ทั้งหมด - ซึ่งจะเสียเวลา ;)
- mount : นี่จะแสดงระบบไฟล์ที่เมาท์อยู่ในปัจจุบัน คุณไม่สามารถลบจุดเมานต์ที่เมาท์หรือโฟลเดอร์พาเรนต์
- btrfs รายการย่อย <path> : คล้ายกับจุดติดคุณไม่สามารถลบ btrfs subvolume ยกเว้นโดยใช้คำสั่ง btrfs เฉพาะ: btrfs subvolume ลบ <path>
วิธีแก้ปัญหาการทุจริต
ในกรณีที่เกิดความเสียหายที่ไม่สามารถแก้ไขได้ง่ายวิธีแก้ปัญหาพื้นฐานคือการสำรองข้อมูลจัดรูปแบบระบบไฟล์แล้วเรียกคืน (ทิ้งข้อมูลที่ไม่ดี) ขึ้นอยู่กับจำนวนข้อมูลที่คุณมีในระบบไฟล์สิ่งนี้อาจเป็นงานที่น่าเบื่อ : - /
ในกรณีของฉันโฟลเดอร์ปัญหาอยู่ใน subvolume ดังนั้นฉันสามารถทำข้างต้น แต่โดยการลบเฉพาะ subvolume แทนที่จะเป็นระบบไฟล์ทั้งหมด ผมได้รับการสนับสนุนข้อมูลของฉันและลบ subvolume: btrfs ย่อยเด <subvolume เส้นทาง> จากนั้นฉันก็สามารถกู้คืนไปยังไดรฟ์ย่อยใหม่ได้โดยไม่ต้องออกจากโฟลเดอร์ปัญหา
ความเสียหายของ i_size
สาเหตุในกรณีของฉันพบว่าเป็นความเสียหายของi_sizeที่ไม่ใช่ศูนย์ Btrfs ใช้ i_size เพื่อบอกว่าโฟลเดอร์ว่างเปล่าหรือไม่ หากต้องการตรวจสอบสิ่งนี้ให้เรียกใช้:
stat -c %s <foldername>
i_size ของโฟลเดอร์ว่างใน btrfs ควรเป็นศูนย์ โดยทั่วไปแล้วมันคือ 4k
ลิ้งค์ที่มีความเกี่ยวข้อง:
https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#I_cannot_delete_an_empty_directory
rm -r
เทอร์มินัลคืออะไร? คุณได้ลองคำตอบของโพสต์นี้หรือยัง?