Apakah mungkin untuk memulihkan file yang dihapus oleh rm di Linux?

8

Di jendela yang diajukan dihapus dapat ditemukan di tempat sampah jika Anda tidak menekan shift ,

Bagaimana dengan file yang dihapus oleh rm -fdi linux

wamp
sumber
3
Windows telah menyebutnya sebagai Recycle Bin selama lebih dari 10 tahun sekarang; dan ketika Anda mendorong hapus, secara eksplisit mengatakan itu memindahkan file, bukan menghapusnya. rmmemutuskan tautan i-node yang terkait dengan file.
Chris S

Jawaban:

13

Hal pertama yang harus diingat adalah - berhenti melakukan kegiatan menulis lebih lanjut pada sistem file.

Kemudian Anda dapat mencoba beberapa alat yang akan melihat sistem file dan mencoba mencari data di node yang dihapus. ' extundelete' adalah salah satu alat di sourceforge.

extundelete adalah utilitas yang dapat memulihkan file yang dihapus dari partisi ext3 atau ext4 . Sistem file ext3 adalah sistem file yang paling umum saat menggunakan Linux, dan ext4 adalah penggantinya. extundelete menggunakan informasi yang disimpan dalam jurnal partisi untuk mencoba memulihkan file yang telah dihapus dari partisi. Tidak ada jaminan bahwa file tertentu akan dapat dihapus, jadi selalu mencoba untuk memiliki sistem cadangan yang baik, atau setidaknya menempatkan satu di tempat setelah memulihkan file Anda!

nik
sumber
3
Tulisan tidak lanjut tidak dapat cukup ditekankan. Itu bukan built-in, jadi "undeleting" adalah masalah perangkat lunak pemulihan yang menyusun kembali potongan-potongan yang tersisa sebelum filesystem menimpa data dengan penulisan selanjutnya.
Jeremy M
2

Langkah pertama adalah mencoba alat yang tidak terhapus untuk sistem file yang digunakan untuk drive root Anda.

Seperti disebutkan, ext3grep dan extundelete adalah alat untuk keluarga sistem file ext.

Pilihan lain tergantung pada jenis file yang ingin dipulihkan adalah menjalankan pemahat file pada drive. Ini akan memakan waktu lebih lama daripada utilitas di atas.

Terutama adalah salah satu opsi yang saya gunakan untuk ini.

Opsi terakhir, jika Anda mengetahui string tertentu di dalam file, adalah membuka drive di hex editor dan mencari string itu.

Tergantung pada pengaturan Anda, manajer jendela Anda dapat menyediakan tempat sampah / tempat sampah.

Pada akhirnya, sama sekali tidak ada pengganti untuk memiliki pengaturan sistem cadangan yang baik. Temukan satu yang melakukan tugasnya tanpa Anda menyentuhnya dan mengaturnya. Anda akan menghemat banyak waktu, masalah, dan rasa sakit dalam jangka panjang.

dpflug
sumber
0

Karena undelete_ext3 tampaknya sudah tidak ada, berikut ini adalah skrip bash sederhana, yang membantu saya memulihkan beberapa file yang tidak dapat diperoleh menggunakan extundelete atau debugfs . Solusi dibagikan.

Anda dapat melihat daftar blok untuk dilihat, lihat PRESEED. Dibutuhkan satu nomor blok per baris. Jika Anda tidak melihat sebelumnya, semua blok akan dicari, default.

  • Untuk setiap blok, byte pertama diperiksa untuk konten gzip.
  • Jika berhasil, blok yang dimaksud adalah gunzip untuk menyelidiki lebih lanjut untuk string "ustar" pada byte 257, demarking arsip tar.
  • Akhirnya, data yang cocok dengan pola file diekstraksi (gaya jalur akhiran menggunakan opsi wildcard tar) dan diambil untuk string tertentu. Lihat variabel FILE_IN_TAR dan FIT_CONTENT untuk ini.
  • Jika ditemukan, simpan file tersebut.

Karena Anda mungkin memiliki kasus penggunaan yang berbeda, ini mungkin memberi Anda bingkai untuk dijadikan dasar penyaringan Anda sendiri. Anda pasti perlu mengubah nilai saat mencari tipe file lainnya.

Doa contoh: ./ext-undelete-tar-gz.sh devimage found_files/

#!/bin/bash

# Brute force (linear) search specific tar files with
# certain contents on ext2 / ext3 / ext4 devices or files
#
# .. this is a last resort if extundelete and/or debugfs
#    did not find what you were looking for and limited
#    in that recoverable data must not have been stored
#    in fragments, i.e. non-sequentially

[[ -n "$2" ]] || {
    echo "usage: $0 [ device | imagefile ] "\
    "[ destdir_for_recovered_data ] "\
    "[ max_blocks_to_search (optional) ]" 
    exit 1
}

IMG=$1
DEST=$2
TMP=/dev/shm/cand.tmp
PRESEED=/dev/shm/cand.list

GZMAGIC=$(echo -e "\x1f\x8b\x08")
TARMAGIC=$(echo -e "ustar")

# max bytes to read into $TMP when a .tar.gz has been found
LEN=$((160*1024))

# pick $TMP for recovery based on matched strings..
FILE_IN_TAR="debian/rules" # ..in the tar index (suffix-search)
FIT_CONTENT="link-doc="    # ..within FILE_IN_TAR matches

# determine FS parameters
BLOCKS=$(tune2fs -l $IMG | grep -Po "(?<=^Block count:).*" | xargs)
    BS=$(tune2fs -l $IMG | grep -Po "(?<=^Block size:).*"  | xargs)
LEN=$((LEN/BS))

function _dd     { dd     $@ 2>/dev/null ; }
function _gunzip { gunzip $@ 2>/dev/null ; }
function _tar    { tar    $@ 2>/dev/null ; }

function inspect_block {
    bnum=$1

    if _dd if="$IMG" skip=$bnum bs=$BS count=1 | tee "$TMP" \
    | _dd bs=1 count=3 \
    | grep -qF "$GZMAGIC" 
    then
        if _gunzip -c "$TMP" \
        | _dd bs=1 count=5 skip=257 \
    | grep -qF "$TARMAGIC"
        then
            _dd if="$IMG" skip=$((bnum+1)) bs=$BS count=$((LEN-1)) >> "$TMP"
            echo -n found $bnum.tar.gz

            if _tar xzf "$TMP" -O --wildcards *"$FILE_IN_TAR" \
            | grep -qF "$FIT_CONTENT"
            then
                echo " ..picked, stripping trailing garbage:"
                exec 3>&1
                gunzip -c "$TMP" 2>&3 | gzip > $DEST/$bnum.tar.gz
                exec 3>&-
            else
                echo
            fi
        fi
    fi

    echo -ne "$((bnum+1)) / $BLOCKS done.\r" >&2
}


if [[ -f "$PRESEED" ]]
then
    while read bnum
    do inspect_block $bnum
    done <"$PRESEED"
else
    for (( bnum = 0 ; bnum < ${3:-$BLOCKS} ; bnum++ ))
    do inspect_block $bnum
    done
fi | gzip >"$PRESEED.log.gz"

echo
  • Berhenti menggunakan filesystem yang dipermasalahkan setelah memperhatikan penghapusan ASAP yang salah.
  • Script ini mungkin akan gagal pada file besar, tidak mem-parsing struct tingkat tinggi dari sistem file.
  • Pada dasarnya, sistem file modern tidak dirancang untuk memulihkan data yang tidak terhubung dengan kuat, sehingga tidak ada jaminan untuk memulihkan data yang hilang.
  • Operasikan pada gambar cadangan sistem file.
Chef Meister
sumber
Jika file lebih besar dari 12 blok, maka saya pikir kemungkinan Anda akan menemukan blok tipuan antara blok data. Dalam hal ini hanya dengan membaca berurutan akan menghasilkan keluaran sampah. Tetapi jika Anda dapat menemukan blok petunjuk Anda dapat memulihkan sisa file (kecuali jika ditimpa tentu saja).
kasperd