Bagaimana memulihkan file yang dihapus di Linux?

65

Secara tidak sengaja, saya menggunakan rmfile yang tidak ingin saya hapus. Apakah ada cara agar saya bisa mendapatkannya kembali di Linux?

HaiYuan Zhang
sumber
@Nav, rmadalah perintah UNIX / Linux "berbahaya" (baca $ man rm). Gunakan dengan sangat hati-hati . Dengan itu, ini adalah cara cepat untuk menghapus file yang Anda yakini. Lingkungan Linux Modern dan Unix Desktop memang menyediakan solusi "Tempat Sampah" , sehingga pengguna dapat dengan mudah memulihkan file yang terhapus secara tidak sengaja.
Jose Elera
1
beberapa jawaban terkini: unix.stackexchange.com/questions/122305/…
Ben Crowell
Jangan gunakan "rm" jika Anda ingin mengembalikan file di masa depan. Gunakan
Natesh bhat

Jawaban:

51

Berikut ini adalah langkah-langkah umum untuk memulihkan file teks.

  1. Pertama gunakan perintah dinding untuk memberi tahu pengguna bahwa sistem akan mati dalam mode pengguna tunggal:

    # wall
    System is going down to .... please save your work.
    

    Tekan CTRL + D untuk mengirim pesan.

  2. Selanjutnya gunakan perintah init 1 untuk membawa sistem ke mode pengguna tunggal:

    # init 1
    
  3. Menggunakan grep (cara UNIX tradisional) untuk memulihkan file

    Gunakan sintaks grep berikut:

    grep -b 'search-text' /dev/partition > file.txt
    

    ATAU

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
    

    Dimana,

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character.
    -a : Process a binary file as if it were text
    -B Print number lines/size of leading context before matching lines.
    -A: Print number lines/size of trailing context after matching lines.
    

    Untuk memulihkan file teks dimulai dengan kata "nixCraft" di / dev / sda1 Anda dapat mencoba perintah berikut:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. Selanjutnya gunakan vi untuk melihat file.txt.

    Metode ini HANYA berguna jika file yang dihapus adalah file teks. Jika Anda menggunakan sistem file ext2, cobalah perintah recover.

Ditemukan di http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html

Gabriel L. Oliveira
sumber
16
Patut dicatat bahwa Anda TIDAK BISA MELAKUKANNYA Mode pengguna tunggal ini JAUH mematikan jaringan
Quinma
1
Metode ini sangat bagus untuk file teks, terima kasih! Apa yang saya suka tentang itu adalah bahwa itu tidak bergantung pada jurnal filesystem (seperti extundelete), tetapi sebenarnya memindai byte mentah dari seluruh drive sebagai gantinya. Jika perintah ini tidak menemukan file Anda, tidak akan ada.
Benjamin B.
1
@ Quinma, metode ini dapat bekerja dari jarak jauh dengan hanya sedikit modifikasi ... Alih-alih berjalan init 1, bunuh secara manual setiap daemon sistem kecuali sshd. Saya juga berpikir pada titik ini Anda harus me-remount semua RO filesystem dan menyimpan ke tmpfs (dengan asumsi file temp Anda akan cocok di ram) untuk menghindari menimpa file dengan data temp. Anda tentu saja harus menyalinnya di tempat lain nanti, baik ke server jarak jauh atau kembali ke sistem file lokal setelah remount mereka RW.
Thomas Guyot-Sionnest
apa partisi_Anda ??? Saya memiliki kesalahan: / dev / sda1: Tidak ada file atau direktori seperti itu
coolcool1994
1
@ Balik, saya benar-benar tidak tahu. Seperti yang dinyatakan, saya hanya mengikuti langkah demi langkah. Tetapi init 1 dimaksudkan untuk tugas administratif, dan mungkin mematikan proses yang tidak terkait dengan skenario runlevel itu. Itu dapat membantu mencegah harddisk digunakan, menimpa file yang Anda coba pulihkan.
Gabriel L. Oliveira
13
  • Jika ini sangat-sangat penting, ambil disk dari komputer dan sewa perusahaan untuk melakukannya untuk Anda.
  • Jika hanya sangat penting, pasang disk read-only, salin seluruh partisi ke file menggunakan dddan cobalah untuk menemukan file di dalamnya (menggunakan grep, atau editor).

Sunting: terkadang ddrescuebekerja lebih baik daripada dd.

Sjoerd
sumber
1
"Cobalah untuk menemukan file di dalamnya" Saya bingung, bagaimana cara membuka file 15+ GB dan mencari atau menyalurkan binatang ini ke grep? Dan apa yang akan Anda lakukan ketika Anda menemukan teks? Bagaimana pemulihan ini?
TheLQ
1
Hal pertama yang harus dilakukan adalah mencoba beberapa alat umum sebelum membakar banyak uang untuk hasil yang tidak pasti. BTW, grep tidak akan membantu, photorec atau ext3grep.
wazoox
8

Testdisk memiliki opsi hapus yang harus bekerja dengan Linux.

Ada langkah-langkah untuk Linux . Perhatikan bahwa ini berfungsi untuk ext2 , ext3 , dan ext4 .

James T
sumber
1
extundelete juga berguna jika partisi tersebut ext3 / 4. Namun, hal pertama yang harus dilakukan adalah melepas partisi.
billc.cn
5
  • Satu-satunya jawaban yang benar adalah: pulihkan file Anda dari cadangan. Setiap orang harus memiliki cadangan. Untuk file yang sangat penting, Anda harus memiliki dua cadangan. Kamu tidak? Yah, sangat buruk, inilah pelajaran yang dipetik (Maaf kedengarannya kasar, tapi saya dalam penyimpanan data, dan orang-orang tidak membuat cadangan sampai mereka kehilangan beberapa data penting, itu fakta yang diberikan. Jadi ya, Anda terlihat bodoh, tetapi begitu juga hampir semua orang).

  • Oke, Anda tidak punya cadangan. Anda harus berhenti menggunakan sistem file yang berisi file SEKARANG . Setiap aktivitas penulisan pasti dapat menyemprot data file yang mungkin (hanya dapat ) tetap di disk.

  • jika Anda membuat kesalahan tragis untuk menggunakan hanya satu partisi sebagai sistem berkas root dan / home, itu berarti Anda harus mem - boot dari beberapa perangkat lain. SEKARANG .

  • Jika file Anda memiliki beberapa format umum (file Word, JPG, dll), gunakan Photorec . Photorec dapat mengambil format file yang paling umum.

  • Anda dapat mencoba metode "ext3 undelete" yang diusulkan sebelumnya, tetapi Anda harus merasa nyaman dengan baris perintah, memahami cara kerja dasar linux dasar, dll.

  • Jika file Anda memiliki beberapa format khusus, semoga beruntung. Saya pernah menulis program Perl untuk memindai drive untuk beberapa file khusus, dan itu bekerja dengan sangat baik; tetapi Anda harus mengetahui beberapa pemrograman untuk melakukan itu, dan cukup nyaman dengan linux juga.

wazoox
sumber
5

Saya melakukan ini beberapa tahun yang lalu. Pendekatan saya adalah secara langsung, tidak ada waktu untuk kehilangan, unmount partisi dan kemudian

dd if=/dev/hda1 of=backup_image.ext3

untuk memiliki file cadangan dengan status partisi yang tepat. Kemudian Anda dapat memasang partisi lagi dan melanjutkan bisnis seperti biasa saat Anda mencari file yang dihapus di gambar yang Anda buat. Gambar mungkin akan SANGAT besar karena Anda membutuhkan semua ruang "kosong", jadi mungkin masalah praktis untuk menyimpannya.

Kemudian itu hanya untuk melakukan pencarian yang membosankan setelah potongan teks yang saya harapkan berada di suatu tempat di sup konten partisi. Misalnya untuk menemukan file .tex, saya berlari

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles

yang mencetak konteks besar di sekitar frasa "ayat" dan menyimpan output ke file yang akan dicari secara manual. Saya mencetak konteks yang sangat besar karena butuh waktu lama untuk mencari gambar sehingga saya lebih suka tidak melakukannya lebih dari yang seharusnya.

Juga perintah stringsitu membantu dalam menghapus sampah biner dari output, tetapi jika saya ingat dengan benar itu juga menghapus semua baris baru, yang bisa menjadi masalah.

Untuk menemukan file biner dengan cara yang sama, orang mungkin berhasil menemukan header karakteristik atau sesuatu dari file tertentu, tetapi saya membayangkan itu menjadi petualangan yang agak besar.


Catatan teknis singkat: ada kesulitan teknis dengan pemulihan disk dan Ext3 / 4. Ini adalah hal yang panjang untuk dijelaskan, tetapi secara singkat (dan tidak memadai): Ext3 / 4 menghapus "markers" yang memberi tahu OS di mana file berada pada disk ketika Anda menghapusnya. File tidak digosok, tetapi tidak ada yang tahu di mana pada disk mereka mulai dan berakhir lagi, dan kadang-kadang bahkan terfragmentasi di beberapa tempat. Beberapa sistem file lain hanya mengatur status file menjadi "dihapus", tetapi simpan data lokasi. Maka batal hapus tidak lebih sulit daripada melihat file pointer dengan flag ini (mereka harus tetap tersedia jika tidak terlalu banyak aktivitas telah terjadi), dan kemudian berharap konten mereka belum ditimpa.

Apa yang terbaik Retorika, dalam pandangan saya. Pencadangan yang sering adalah jawaban untuk semua masalah ini. Data penting tanpa sistem cadangan otomatis adalah kecelakaan yang menunggu untuk terjadi, IMHO.


Anekdot pribadi yang wajib: Saya akan hapus foo\ foo*dari ~. saya menulis

rm -r foo<Tab>*

, yang sayangnya, karena footernyata adalah symlink dan satu-satunya file yang cocok dengan ini, shell dibuat menjadi

rm -r foo\ foo *

Aku menekan Enter dan duduk di sana melihat perintah, yang seharusnya paling lama. Setelah agak lama rmbertanya kepada saya apakah saya ingin "menghapus file yang dilindungi tulis 'sesuatu'". Cukup cepat saya merasakan kedinginan dan lembut dan sangat terkontrol saya menekan Ctrl+c. ~ Setengah dari saya ~telah dihapus, tetapi saya berhasil mendapatkan semuanya kembali melalui grepping yang dijelaskan di atas dan beberapa cadangan saat ini. Saya memiliki beberapa data pribadi yang sangat berharga (baca: menghabiskan waktu) dan sangat baru pada disk yang hilang, tetapi saya telah membuat cadangan empat kali lipat. Satu menghilang di sini, yang lain karena pemadaman sistem di sekolah, yang lain korup, dan pada awalnya saya tidak dapat menemukan yang keempat, karena saya secara tidak sengaja memasukkannya ke folder yang salah :-D. Belumrm -rmacet pada file yang dilindungi tulis, yang keempat akan dimakan sejak folder itu dipasang melalui sshfs di file saya ~. Saya jauh lebih berhati-hati tentang hal-hal semacam itu sejak itu.

Daniel Andersson
sumber
5

Jika standar rm , saya harap Anda memiliki cadangan. Prosedur untuk memulihkan file yang dihapus akan berbeda untuk setiap sistem file, jika dapat dilakukan sama sekali. Linux tidak memiliki "tempat sampah" bawaan; setelah Anda menghapus file, semuanya sudah hilang.

Apa pun cara Anda melakukannya, Anda ingin mencabut komputer - sesegera mungkin, terus menjalankan komputer (bahkan untuk mematikannya) menyebabkan menulis ke disk dan meningkatkan kemungkinan bahwa beberapa blok sebelumnya ditempati oleh file akan ditimpa. Setelah Anda selesai melakukannya, letakkan di komputer lain, reboot dari live CD (pastikan untuk tidak memasang drive kecuali Anda memasangnya hanya-baca), atau lepaskan hard drive dan bawa ke spesialis pemulihan data.

cao
sumber
4

Tetapkan harapan Anda rendah. Jika ada sesuatu yang ditulis di atas data yang 'dihapus', Anda akan kehilangannya.

Saya telah melakukan sejumlah kecil pemulihan dan alat terbaik yang saya temukan sering dirancang untuk format tertentu. Misalnya 'photorec' sangat bagus ketika saya ingin memulihkan puluhan ribu jpeg.

Recuva juga telah membantu saya sebelumnya dan mungkin menjadi pilihan terbaik Anda. (Gratis, jangan sampai tertipu membayar dengan iklan mereka)

Pada akhirnya, jika apa yang Anda lewatkan itu penting, ambil drive secara offline dan berhentilah menulis. Gunakan setiap bagian dari perangkat lunak pemulihan yang dapat Anda temukan sampai Anda mendapatkan kembali data Anda atau berhenti menjadi berharga. Jika ini benar-benar penting, kirimkan ke profesional dengan harga tinggi.

Jika Anda pernah beruntung dengan alat sebelumnya, coba lagi terlihat seperti Anda terbiasa dengannya. Pada akhirnya, mereka tidak boleh menulis ke disk dan jadi Anda dapat menggunakan perangkat lunak sampai Anda menemukan yang berfungsi.

Mahal
sumber
2

Ini dokumen yang bagus untuk Anda. Anda akan menemukan banyak tips praktis di sana.

BTW, ada dua kelompok orang:

  1. mereka yang melakukan backup
  2. mereka yang akan melakukan backup

Selamat, Anda baru saja mempromosikan diri Anda ke grup 2. ;-)

Michał Šrajer
sumber
2

Jika Anda memiliki aplikasi terbuka yang sedang membaca file, seperti VLC atau LibreOffice, maka jawaban L & U yang hebat ini membantu saya keluar dari kekacauan ini. Berikut adalah metode alternatif untuk melakukan hal yang sama.

Gagasan umum adalah menemukan tautan /proc/PID/fd/DESCRIPTOR_NUMBERdan menyalinnya kembali ke lokasi aslinya. Gunakan ps aux | grep APP_NAMEuntuk menemukan PID dan kemudian ls -la /proc/PID/fd/untuk menemukan DESCRIPTOR_NUMBER yang tepat.

dotancohen
sumber
1

Jawaban "benar" adalah dengan menganggap tidak ada metode untuk memulihkan andal, dan sebaliknya memulihkan dari cadangan atau sistem kloning atau menginstal ulang.

TestDisk adalah alat yang hebat, dan ada cara-cara lain untuk dapat menyelamatkan beberapa data dari drive fisik tergantung pada sistem file dan kemunculan penghapusan, tetapi waktu dan rasa sakit yang terlibat bisa terlalu besar, jadi JAUHKAN BACKUPS (dan juga uji bahwa mereka valid dan dapat dipulihkan)!

Andy Lee Robinson
sumber
1

Jika tidak ditimpa oleh pengguna lain, maka Anda beruntung. Saya tidak sengaja menghapus file sumber cpp saya dan menggunakan alat yang disebut terdepan , yang membantu saya memulihkan puing-puing 60G cpp dari disk. Akhirnya, saya memulihkan file saya dengan merakit puing-puing itu sepotong demi sepotong. Saya pikir ini memindai pola tertentu untuk tipe file tertentu dan menelusuri semua inode pada disk untuk memulihkan file! Coba saja!

Izana
sumber
0

Jika secara tidak sengaja Anda telah menghapus file dari Linux maka Anda dapat menggunakan perintah ini:

find /root -name "search text" -type f  -exec mv {} "/home" \;

sebagai gantinya search textAnda dapat meletakkan nama file dan dapat menentukan direktori tempat Anda ingin mengembalikannya /home.

santosh
sumber
2
Hai Santosh. Tolong jangan menambahkan tautan yang menyesatkan ke posting Anda. Sudah dihapus.
ᔕᖺᘎᕊ
0

Anda dapat mencoba skrip ini. Bekerja dengan baik dan dimaksudkan untuk digunakan sebagai ganti rm dan saya menggunakannya secara luas sekarang.

https://github.com/nateshmbhat/safe-rm

Fitur :

  • dimaksudkan untuk digunakan sebagai pengganti rm
  • menangani semua argumen yang dapat diambil oleh rm
  • menangani tabrakan nama file dengan file yang sudah ada di tempat sampah
  • menangani beberapa masalah izin secara otomatis
  • jika rm dipanggil dari skrip lain atau secara tidak langsung maka perintah sistem 'rm' digunakan secara otomatis
  • menampilkan pesan kesalahan yang sesuai seperti yang muncul di rm
Natesh bhat
sumber
-2

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’

Acara video ini adalah tutorial mini yang dapat membantu Anda.

Juan
sumber