Katakanlah saya membuka terminal, dan melalui terminal itu saya telah membuka cd
beberapa direktori. Melalui terminal lain, saya menghapus direktori itu dan memulihkannya kembali dari cadangan yang sama. Ketika saya mencoba ke vim
file dari terminal pertama, di direktori yang sama, mengapa saya mendapatkan pesan kesalahan tentang file handle yang basi? Apa artinya? (Di samping catatan, saya telah menemukan bahwa adalah mungkin untuk melewati masalah ini cd $(pwd)
.)
101
touch
pada host A agar bisa normal.Jawaban:
Ketika direktori dihapus, inode untuk direktori itu (dan inode untuk isinya) didaur ulang. Pointer yang dimiliki shell Anda ke inode direktori itu (dan inode isinya) sekarang tidak lagi valid. Ketika direktori dipulihkan dari cadangan, inode lama tidak (harus) digunakan kembali; direktori dan isinya disimpan di inode acak. Satu-satunya hal yang tetap sama adalah direktori induk menggunakan kembali nama yang sama untuk direktori yang dipulihkan (karena Anda menyuruhnya).
Sekarang jika Anda mencoba untuk mengakses konten direktori yang masih diarahkan oleh shell asli Anda, itu mengkomunikasikan permintaan itu ke sistem file sebagai permintaan untuk inode asli, yang telah didaur ulang (dan bahkan mungkin digunakan untuk sesuatu sangat berbeda sekarang). Jadi Anda mendapatkan
stale file handle
pesan karena Anda meminta beberapa data yang tidak ada.Saat Anda melakukan
cd
operasi, shell mengevaluasi ulang lokasi inode dari tujuan apa pun yang Anda berikan. Sekarang shell Anda mengetahui inode baru untuk direktori (dan inode baru untuk isinya), permintaan masa depan untuk isinya akan valid.sumber