Gunakan lsof untuk menemukan nomor inode, dan debugfs untuk membuat ulang tautan yang sulit. Sebagai contoh:
# lsof -p 12345 | grep /var/log/messages
syslogd 12345 root 3w REG 8,3 3000 987654 /var/log/messages (deleted)
# mount | grep var
/dev/sda2 on /var type ext3 (rw)
# debugfs -w /dev/sda2
debugfs: cd log
debugfs: ln <987654> tmp
debugfs: mi tmp
Mode [0100600]
User ID [0]
Group ID [0]
Size [3181271]
Creation time [1375916400]
Modification time [1375916322]
Access time [1375939901]
Deletion time [9601027] 0
Link count [0] 1
Block count [6232]
File flags [0x0]
...snip...
debugfs: q
# mv /var/log/tmp /var/log/messages
# ls -al /var/log/messages
-rw------- 0 root root 3301 Aug 8 10:10 /var/log/messages
Sebelum Anda mengeluh, saya memalsukan transkrip di atas karena saya tidak memiliki file yang dihapus saat ini ;-)
Saya gunakan mi
untuk mengatur ulang waktu hapus dan jumlah tautan ke nilai yang masuk akal (masing-masing 0 dan 1), tetapi tidak berfungsi dengan baik - Anda dapat melihat jumlah tautan tetap nol di ls
. Saya pikir kernel mungkin menyimpan data inode. Anda mungkin harus fsck pada kesempatan paling awal setelah menggunakan debugfs, untuk berada di sisi yang aman.
Dalam pengalaman saya, Anda harus membuat tautan menggunakan nama file sementara dan kemudian mengganti nama menjadi nama yang tepat. Menautkannya langsung ke nama file asli tampaknya menyebabkan korupsi direktori. YMMV!
readlink /proc/13381/fd/3
-> "/ home / vi / important_file (dihapus)" dan/home/vi/important_file\ \(deleted\)
jelas tidak ada.