'stale file handle' ใน Linux หมายถึงอะไร


104

สมมติว่าฉันมีเทอร์มินัลเปิดอยู่และผ่านเทอร์มินัลนั้นฉันมีcd'ed to some directory ผ่านเทอร์มินัลอื่นฉันลบไดเร็กทอรีนั้นและกู้คืนจากข้อมูลสำรองที่เหมือนกัน เมื่อฉันพยายามvimเรียกไฟล์จากเทอร์มินัลแรกในไดเร็กทอรีเดียวกันเหตุใดฉันจึงได้รับข้อผิดพลาดเกี่ยวกับแฮนเดิลไฟล์เก่า หมายความว่าอย่างไร? (ในบันทึกด้านข้างฉันพบว่าเป็นไปได้ที่จะข้ามปัญหานี้ไปcd $(pwd)ได้)


หากคุณติดตั้งไดเร็กทอรี NFS (ตั้งชื่อ adir) จากโฮสต์ A ไปยังโฮสต์ B จากนั้นทำการลบและกู้คืนสำหรับ adir บนโฮสต์ A คุณจะได้รับข้อผิดพลาด "Stale file handle" เมื่อคุณเข้าถึง adir บนโฮสต์ B. ใช้คำสั่งtouchบนโฮสต์ A สามารถทำให้เป็นปกติได้
rustyhu

คำตอบ:


86

เมื่อไดเร็กทอรีถูกลบไอโหนดสำหรับไดเร็กทอรีนั้น (และ inodes สำหรับเนื้อหา) จะถูกรีไซเคิล ตัวชี้เชลล์ของคุณมีต่อ inode ของไดเร็กทอรี (และ inodes ของเนื้อหา) ไม่สามารถใช้ได้อีกต่อไป เมื่อไดเร็กทอรีถูกเรียกคืนจากการสำรองข้อมูล inodes เก่าจะไม่ถูกนำมาใช้ซ้ำ (จำเป็น) ไดเร็กทอรีและเนื้อหาจะถูกเก็บไว้ใน inodes แบบสุ่ม สิ่งเดียวที่อยู่เหมือนกันคือการที่ผู้ปกครองไดเรกทอรี reuses ชื่อเดียวไดเรกทอรีบูรณะ (เพราะคุณบอกว่ามันไป)

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

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


อ่านี่เป็นเพียงวิธีของระบบในการจัดการตัวชี้ไอโหนดที่ไม่ถูกต้อง / เป็นโมฆะ?
IDDQD

ใช่. ฉันไม่รู้รายละเอียดมากพอที่จะรู้ว่าจะเกิดอะไรขึ้นเช่นคุณพยายามอ้างอิงไอโหนดที่รีไซเคิลไปแล้วให้ชี้ไปที่อย่างอื่น คุณจะยังคงได้รับไฟล์เก่าหรือไม่? หรือคุณจะได้รับข้อมูลที่ไม่คาดคิด?
dg99

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