Có thể khôi phục các tệp bị xóa bởi rm trong Linux không?


8

Trong các cửa sổ đã xóa có thể được tìm thấy trong thùng rác nếu bạn không nhấn shift ,

Những gì về các tập tin bị xóa rm -ftrong linux


3
Windows đã gọi nó là Thùng rác trong hơn 10 năm nay; và khi bạn ấn xóa, nó sẽ nói rõ rằng nó đang di chuyển tệp chứ không xóa nó. rmbỏ liên kết (các) nút i được liên kết với tệp.
Chris S

Câu trả lời:


13

Điều đầu tiên cần nhớ là - ngừng thực hiện bất kỳ hoạt động ghi nào nữa trên hệ thống tập tin.

Sau đó, bạn có thể thử một số công cụ sẽ xem xét hệ thống tệp và cố gắng định vị dữ liệu trong nút bị xóa. ' extundelete' là một trong những công cụ như vậy tại sourceforge.

extundelete là một tiện ích có thể khôi phục các tệp đã bị xóa từ phân vùng ext3 hoặc ext4 . Hệ thống tệp ext3 là hệ thống tệp phổ biến nhất khi sử dụng Linux và ext4 là hệ thống kế thừa của nó. extundelete sử dụng thông tin được lưu trữ trong tạp chí của phân vùng để cố gắng khôi phục một tệp đã bị xóa khỏi phân vùng. Không có gì đảm bảo rằng bất kỳ tệp cụ thể nào cũng có thể bị xóa, vì vậy hãy luôn cố gắng có một hệ thống sao lưu tốt, hoặc ít nhất là đặt một vị trí sau khi khôi phục các tệp của bạn!


3
Không viết thêm không thể được nhấn mạnh đủ. Nó không được tích hợp sẵn, vì vậy "không xóa" là vấn đề của phần mềm khôi phục tập hợp lại các phần còn lại trước khi hệ thống tập tin ghi đè lên dữ liệu bằng cách ghi trong tương lai.
Jeremy M

2

Bước đầu tiên sẽ là thử một công cụ phục hồi cho hệ thống tập tin được sử dụng cho ổ đĩa gốc của bạn.

Như đã đề cập, ext3grep và extundelete là các công cụ cho họ hệ thống tệp ext.

Một tùy chọn khác tùy thuộc vào loại tệp đang cố khôi phục là chạy trình khắc tệp trên ổ đĩa. Điều này sẽ mất nhiều thời gian hơn các tiện ích trên.

Đầu tiên là một lựa chọn tôi đã sử dụng cho việc này.

Tùy chọn cuối cùng, nếu bạn tình cờ biết một chuỗi nhất định trong tệp, là mở ổ đĩa trong trình soạn thảo hex và tìm kiếm chuỗi đó.

Tùy thuộc vào thiết lập của bạn, trình quản lý cửa sổ của bạn có thể cung cấp thùng rác / thùng rác.

Vào cuối ngày, hoàn toàn không có sự thay thế nào cho việc thiết lập hệ thống sao lưu tốt. Tìm một cái mà thực hiện công việc của nó mà không cần bạn chạm vào nó và thiết lập nó. Bạn sẽ tiết kiệm cho mình rất nhiều thời gian, rắc rối và đau đớn trong thời gian dài.



0

Vì undelete_ext3 dường như không còn nữa, đây là một tập lệnh bash khiêm tốn, giúp tôi khôi phục một số tệp không thể lấy được bằng cách sử dụng extundelete hoặc debugfs . Giải pháp chia sẻ.

Bạn có thể đoán trước một danh sách các khối để xem, xem PRESEED. Phải mất một số khối trên mỗi dòng. Nếu bạn không chèn sẵn, tất cả các khối sẽ được tìm kiếm, mặc định.

  • Đối với mỗi khối, các byte đầu tiên được thăm dò cho nội dung gzip.
  • Nếu thành công, khối trong câu hỏi là gunzip'd để thăm dò thêm chuỗi "ustar" ở byte 257, đánh dấu một kho lưu trữ tar.
  • Cuối cùng, dữ liệu khớp với một mẫu tệp được trích xuất (kiểu hậu tố sử dụng tùy chọn ký tự đại diện của tar) và được nối với một chuỗi nhất định. Xem các biến FILE_IN_TARFIT_CONTENT để biết điều này.
  • Nếu tìm thấy, lưu tập tin.

Vì bạn có thể sẽ có một trường hợp sử dụng khác, điều này có thể cung cấp cho bạn một khung để dựa trên bộ lọc của riêng bạn. Bạn chắc chắn sẽ cần phải điều chỉnh các giá trị khi tìm kiếm các kiểu tệp khác.

Yêu cầu mẫu: ./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
  • Ngừng sử dụng hệ thống tập tin trong câu hỏi sau khi nhận thấy xóa ASAP sai.
  • Kịch bản này có thể sẽ thất bại trên các tệp lớn, nó không phân tích các cấu trúc cấp cao hơn của hệ thống tệp.
  • Về cơ bản, các hệ thống tập tin hiện đại không được thiết kế để phục hồi mạnh mẽ dữ liệu chưa được liên kết, do đó không có gì đảm bảo cho việc khôi phục dữ liệu bị mất.
  • Hoạt động trên một hình ảnh sao lưu của hệ thống tập tin.

Nếu tệp lớn hơn 12 khối, thì tôi nghĩ có khả năng bạn sẽ tìm thấy các khối không xác định giữa các khối dữ liệu. Trong trường hợp đó, chỉ cần đọc tuần tự sẽ tạo ra đầu ra rác. Nhưng nếu bạn có thể tìm thấy các khối gián tiếp, bạn có thể khôi phục phần còn lại của tệp (trừ khi nó bị ghi đè tất nhiên).
kasperd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.