$ cat important_file > /dev/null &
[1] 9711
$ rm important_file
$ killall -STOP cat
[1]+ Stopped cat important_file > /tmp/p
$ ls -l /proc/`pidof cat`/fd/
total 0
lrwx------ 1 vi vi 64 May 13 20:32 0 -> /dev/pts/29
l-wx------ 1 vi vi 64 May 13 20:32 1 -> /tmp/p
lrwx------ 1 vi vi 64 May 13 20:32 2 -> /dev/pts/29
lr-x------ 1 vi vi 64 May 13 20:32 3 -> /home/vi/important_file (deleted)
Bagaimana cara memulihkannya important_file
?
Saya mencoba sesuatu seperti
injcode -m dup2 -ofd=3 -ofilename=/tmp/recovered_file -oflags=O_CREAT $PID_OF_CAT
tetapi tidak melakukan apa-apa.
linux
file-recovery
Vi.
sumber
sumber
readlink /proc/13381/fd/3
-> "/ home / vi / important_file (dihapus)" dan/home/vi/important_file\ \(deleted\)
jelas tidak ada.... lebih baik daripada menyalin pada waktu tertentu (dan mengumpulkan hanya snapshot waktu dari konten file) adalah dengan "
tail -f
" file itu menjadi file baru:(Terima kasih kepada programmer yang berhati-hati, yang bahkan akan bekerja dengan output biner.)
Selama runtime,
tail -f
itu sendiri membuat file tetap terbuka, dengan aman mencegahnya dibersihkan dari disk ketika program asli berakhir. Dengan demikian, tidak menghentikantail -f
segera setelah program Anda berakhir asli - memeriksa tail'ed/new/path/to/file
pertama apakah itu adalah apa yang Anda inginkan. Jika tidak (atau tidak memuaskan karena alasan lain), Anda dapat menyalin file asli lagi, tetapi kali ini setelah semua penulisan itu selesai dengan "Program" dan daritail -f
'proc / PIDoftail / yang masih berjalan fd / direktori.sumber
Invalid cross-device link
.Gunakan lsof untuk menemukan nomor inode, dan debugfs untuk membuat ulang tautan yang sulit. Sebagai contoh:
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 dils
. 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!
sumber
Anda bisa langsung
cp
file, yaitu:Tentu saja, jika file tersebut masih sedang dimodifikasi, Anda akan mengalami masalah dengan pendekatan ini.
sumber