Apakah ada perintah untuk memulihkan / membatalkan penghapusan file yang dihapus rm
?
$ rm -rf /path/to/myfile
Bagaimana saya bisa sembuh myfile
? Jika ada alat seperti itu, bagaimana saya bisa menggunakannya?
Apakah ada perintah untuk memulihkan / membatalkan penghapusan file yang dihapus rm
?
$ rm -rf /path/to/myfile
Bagaimana saya bisa sembuh myfile
? Jika ada alat seperti itu, bagaimana saya bisa menggunakannya?
Jawaban:
Tautan yang diberikan seseorang dalam komentar adalah peluang terbaik Anda.
Linux debugfs Hack: Membatalkan Penghapusan File
Tulisan itu meskipun tampak sedikit mengintimidasi sebenarnya cukup mudah untuk diikuti. Secara umum langkah-langkahnya adalah sebagai berikut:
Gunakan debugfs untuk melihat log filesystem
$ debugfs -w /dev/mapper/wks01-root
Pada prompt debugfs
debugfs: lsdel
Output sampel
Inode Owner Mode Size Blocks Time deleted
23601299 0 120777 3 1/ 1 Tue Mar 13 16:17:30 2012
7536655 0 120777 3 1/ 1 Tue May 1 06:21:22 2012
2 deleted inodes found.
Jalankan perintah dalam debugfs
debugfs: logdump -i <7536655>
Tentukan file inode
...
...
....
output truncated
Fast_link_dest: bin
Blocks: (0+1): 7235938
FS block 7536642 logged at sequence 38402086, journal block 26711
(inode block for inode 7536655):
Inode: 7536655 Type: symlink Mode: 0777 Flags: 0x0 Generation: 3532221116
User: 0 Group: 0 Size: 3
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
atime: 0x4f9fc730 -- Tue May 1 06:21:20 2012
mtime: 0x4f9fc72f -- Tue May 1 06:21:19 2012
dtime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
Fast_link_dest: bin
Blocks: (0+1): 7235938
No magic number at block 28053: end of journal.
Dengan info inode di atas, jalankan perintah berikut
# dd if=/dev/mapper/wks01-root of=recovered.file.001 bs=4096 count=1 skip=7235938
# file recovered.file.001
file: ASCII text, with very long lines
File telah dipulihkan ke recovered.file.001
.
Jika di atas bukan untuk Anda, saya telah menggunakan alat seperti photorec
untuk memulihkan file di masa lalu, tetapi itu ditujukan untuk file gambar saja. Saya telah menulis tentang metode ini secara ekstensif di blog saya di artikel berjudul:
debugfs -w /dev/sdb2
tetapi lsdel
sais:0 deleted inodes found.
extundelete
lebih mudah untuk ext3 / 4 dan mungkin akan mengarah pada hasil yang sama.
/dev/mapper/wks01-root: No such file or directory while opening filesystem
mana Anda mendapatkan ini /dev/mapper/wks01-root
?
Dengan sedikit peluang, kadang-kadang saya dapat memulihkan file yang dihapus dengan skrip ini atau solusi berikutnya dalam jawabannya:
#!/bin/bash
if [[ ! $1 ]]; then
echo -e "Usage:\n\n\t$0 'file name'"
exit 1
fi
f=$(ls 2>/dev/null -l /proc/*/fd/* | fgrep "$1 (deleted" | awk '{print $9}')
if [[ $f ]]; then
echo "fd $f found..."
cp -v "$f" "$1"
else
echo >&2 "No fd found..."
exit 2
fi
Ada trik lain yang bermanfaat: jika Anda tahu pola dalam file yang dihapus, ketik alt+ sys+ resuountuk mem-boot ulang + remount dalam read-only, kemudian dengan live-cd, gunakan grep
untuk mencari di hard-drive:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
lalu edit /tmp/recover
untuk menyimpan hanya apa file Anda sebelumnya.
Hei, jika dengan filosofi unix semua adalah file, saatnya mengambil keuntungan dari ini, bukan?
grep
Solusi berbasis Anda sangat pintar dan bekerja untuk saya, bahkan dengan sistem file yang masih terpasang. Terima kasih!
grep -av "[^[:print:]]"
grep
solusi bekerja untuk saya dengan modifikasi: saya lakukan sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee lines
dan mendapat offset byte (seperti 123123123:line\n456456456:another\n...
), kemudian melakukan n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$n
dan n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$n
berbeda dengan n
nilai-nilai.
Apa yang berhasil untuk saya diberikan oleh arch (hanya berlaku untuk file teks):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
di mana /dev/sdXN
partisi berisi file yang hilang (tanyakan mount
jika tidak yakin).
Butuh sedikit waktu, tetapi berhasil ketika saya secara tidak sengaja menghapus beberapa kode sumber yang belum saya komit!
rm data/*.json python myFile.py
bukanrm data/*.json && python myFile.py
/dev/sdXN
untuk sistem file, kan? Saya menemukan milik saya dengandf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
Meskipun Pertanyaan ini sudah terpecahkan dan berumur beberapa tahun, saya ingin menyebutkan utilitas testdisk .
Cara memulihkan file dengan testdisk dijelaskan dengan baik dalam tutorial ini . Untuk memulihkan file, jalankan testdisk /dev/sdX
dan pilih jenis tabel partisi Anda. Setelah ini, pilih [ Advanced ] Filesystem Utils
, lalu pilih partisi Anda dan pilih [Undelete]
. Sekarang Anda dapat menelusuri dan memilih file yang dihapus dan menyalinnya ke lokasi lain di sistem file Anda.
Saya memiliki masalah yang sama minggu lalu dan saya mencoba banyak program, seperti debugfs, photorec, ext3grep dan extundelete. ext3grep adalah program terbaik untuk memulihkan file. Sintaksnya sangat mudah:
ext3grep image.img --restore-all
atau:
ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’
Video ini adalah tutorial mini yang dapat membantu Anda.
Alternatif mungkin menggunakan del
alih-alih rm
untuk menghapus:
http://fex.belwue.de/fstools/del.html
del
memiliki fungsi hapus dan bekerja dengan sistem file apa pun.
Tentu saja itu bukan solusi jika Anda sudah menghapus file Anda dengan "take no prisones" rm: -}
del
perintah.
menghubungkan drive melalui antarmuka eksternal
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
Lihat tautan ini untuk info lebih lanjut: batalkan penghapusan file yang baru saja dihapus di ext4 dengan extundelete .
Alat Pemulihan - Baris Perintah:
Alat Pemulihan - Gui:
Informasi :
Dalam pengalaman pribadi saya, saya mendapatkan data saya kembali menggunakan ufs-explorer dan photorec
(1) = Tidak open source, tidak gratis
(2) = Tidak open source, gratis
(3) = Sumber terbuka dan gratis
(4) = Miliki dukungan ntfs
(5) = Memiliki fitur struktur direktori
Saya tidak setuju bahwa itu tidak mungkin, hanya sangat sangat sulit, dan saya juga tidak pernah melakukannya di Linux:
Ketika file dihapus, mereka sebenarnya tidak dihapus. Apa yang terjadi adalah bahwa ruang yang ada di hard-drive semacam reset, sehingga jika komputer mencoba menulis data di sana, tidak ada yang mengeluh. Secara umum, data pada hard drive yang Anda pikir Anda hapus dapat berada di sana hampir setahun kemudian. Atau setidaknya, ini pengalaman saya di mesin Windows. Apakah itu bekerja dengan cara yang sama dari commandline di Linux, saya tidak yakin, tetapi Anda mungkin akan membutuhkan Live CD terpisah untuk membuka partisi seperti itu, dan juga tidak ada jaminan file-file itu masih ada. Saya telah melakukan ini pada windows xp beberapa kali menggunakan Zero Assumption Recovery. Saya yakin ada alat serupa di sekitar jika Anda terlihat cukup keras.
Saat Anda menghapus file, jumlah tautan dalam tabel inode untuk file itu berkurang satu. Di Unix, ketika jumlah tautan turun ke 0, blok data untuk file itu ditandai sebagai bebas dan biasanya, referensi ke blok data tersebut hilang. Saya baru saja menemukan dari komentar @ fedorqui bahwa mungkin ada beberapa cara untuk mengakses blok-blok itu tetapi itu hanya berlaku untuk sistem file ext3.
Salah satu cara untuk melestarikan file adalah dengan menulis fungsi yang memungkinkan Anda memindahkan file ke area sampah (katakanlah $HOME/.trash
) dan memulihkan file yang diperlukan dari sana. Fungsi ini dapat alias rm
. Anda dapat menjadwalkan tugas cron untuk menghapus file yang telah ada di area sampah selama beberapa hari tertentu.
Ini mungkin menghemat masalah bagi sebagian dari Anda.
Jika Anda pernah menggunakan gedit untuk mengedit file itu, secara default salinan file itu akan dibuat.
Misalnya, misalkan kita telah menghapus 'myfile.txt' secara tidak sengaja.
Dalam folder yang berisi file yang baru saja Anda hapus, gunakan perintah ini dan Anda akan memulihkan salinannya dari sana:
ls | grep 'myfile.txt~'
Dengan sedikit keberuntungan Anda akan menemukannya dan kemudian:
cp 'myfile.txt~' 'myfile.txt'
Saya telah memulihkan file yang sekarang menggunakan metode ini. Semoga berhasil!