Saya memiliki file yang dihapus, tetapi masih dibuka oleh suatu program. Saya menemukan nomor inode menggunakan lsof. Bagaimana saya bisa membuat tautan keras kembali ke inode itu?
14
Anda tidak dapat membuat tautan ke sana, tetapi Anda bisa mendapatkannya kembali. Mari kita lakukan percobaan:
$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt
myfile.txt sekarang hilang, tetapi inode tetap hidup oleh perintah tail. Untuk mendapatkan file Anda kembali, pertama-tama temukan PID dari proses menjaga inode:
$ ps auxw | grep tail
sunny 409 0.0 0.0 8532 824 pts/5 S 18:07 0:00 tail -f myfile.txt
PID adalah 409. chdir ke / proc / 409 / fd / dan daftar isinya:
dr-x------ 2 sunny sunny 0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny 0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)
Direktori / proc / [PID] / fd / berisi symlink ke file deskriptor semua file yang digunakan proses. Dalam hal ini symlink "3" menunjuk ke file yang dihapus. Jadi, untuk memulihkan file, salin konten ke file baru:
$ cat 3 >/home/mydir/saved_file.txt
untuk mendapatkan seluruh file jika masih ditulis untuk mencoba
tail -c +1 -f
dari: /unix/25527/how-to-follow-a-la-tail-fa-binary-file-from-the-beginning
(btw: ld dari fd on / proc tidak berfungsi, coba saja)
sumber
Tidak ada cara portabel untuk melakukan ini di Linux. Cara terbaik mungkin adalah dengan mendapatkan semua aktivitas pada sistem file untuk berhenti, membunuh program yang membuat file terbuka, unmount sistem file dan menggunakan debugger file-sistem untuk melampirkan kembali ke direktori. Jika Anda memiliki sistem file yang diekspor melalui NFS, setidaknya beberapa versi NFS memungkinkan Anda untuk membaca data file di NFS.
sumber