Linux에서 삭제된 파일 복구

Linux에서 삭제된 파일 복구

삭제된 파일을 복구/삭제 취소하는 명령이 있나요 rm?

rm -rf /path/to/myfile

어떻게 복구할 수 있나요 myfile? 이를 수행할 수 있는 도구가 있다면 어떻게 사용합니까?

답변1

댓글에 누군가가 제공한 링크가 가장 좋은 기회일 수 있습니다.

Linux debugfs 해킹: 삭제된 파일 복구

이 기사는 다소 위협적으로 보일 수도 있지만 실제로는 이해하기가 매우 쉽습니다. 일반적으로 단계는 다음과 같습니다.

  1. debugfs를 사용하여 파일 시스템 로그 보기

     $ debugfs -w /dev/mapper/wks01-root
    
  2. debugfs 프롬프트에서

     debugfs: lsdel
    
  3. 샘플 출력

     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.
    
  4. debugfs에서 명령 실행

     debugfs: logdump -i <7536655>
    
  5. 파일 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.
    
  6. 위의 inode 정보를 사용하여 다음 명령을 실행합니다.

     # 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
    

파일이 로 복원되었습니다 recovered.file.001.

다른 옵션

photorec위의 방법으로 문제가 해결되지 않으면 과거에 파일 복구와 같은 도구를 사용했지만 이미지 파일에만 작동했습니다. 나는 내 블로그의 다음 기사에서 이 접근 방식을 광범위하게 다루고 있습니다.

Fedora/CentOS/RHEL의 디지털 카메라 SDD 카드에서 손상된 jpeg 및 mov 파일을 복구하는 방법.

답변2

삭제된 파일에서 매우 특정한 패턴을 알고 있는 경우 grep하드 드라이브에서 검색을 사용하십시오(아마도 클립보드를 탐색하여 붙여넣은 줄을 검색하거나 바보):

grep -a -C 300 -F 'known fixed string in deleted file' /dev/sda > ~/recover

~/recover그런 다음 이전에 편집한 파일 내용만 유지하도록 편집합니다 . 그리고 예시를 들어주세요편집자님, 간단한 작업이겠습니다.

이봐, 유닉스 철학에서 모든 것이 파일이라면 이제 그걸 활용해야 할 때가 된 것 아닌가?

설명하다

  • -a바이너리 데이터도 grep하도록 설계됨
  • -C<NUM>출력 컨텍스트를 지정하는 라인매 경기 전후문자열을 사용하여 -B<NUM>줄을 포함 할 수 있습니다.매 경기 전에또는 -A<NUM>줄이 포함되어 있습니다각 게임이 끝난 후대신에
  • -F고정 문자열

F잠재적으로 남아 있는 파일 설명자를 사용하는 또 다른 접근 방식D

때때로 다음을 사용하여 삭제된 파일을 복구할 수 있는 약간의 가능성이 있습니다.

#!/bin/bash

export LANG=C

if [[ ! $1 || $1 == -h || $1 == --help ]]; then
    echo -e "Usage:\n\n\t$0 '[path/]<file name>'"
    exit 1
fi

files=(
    $(file 2>/dev/null /proc/*/fd/* |
        grep "(deleted)'$" | 
        sed -r 's@(:.*broken\s+symbolic\s+link\s+to\s+.|\(deleted\).$)@ @g' |
        grep "$1" |
        cut -d' ' -f1
    )
)

if [[ ${files[@]} ]]; then
    for f in ${files[@]}; do
        echo "fd $f match... Try to copy this fd to another place quickly!"
    done
else
    echo >&2 "No matching fd found..."
    exit 2
fi

답변3

나에게 맞는 것은 다음 사람이 만든다.아치(텍스트 파일에만 해당):

grep -a -C 200 -F 'Unique string in text file' /dev/sdXN

/dev/sdXN누락된 파일이 포함된 파티션은 어디에 있습니까( mount확실하지 않은 경우 확인).

시간이 좀 걸렸지만 아직 커밋하지 않은 일부 소스 코드를 실수로 삭제했을 때 작동했습니다!

답변4

이 문제가 해결되고 몇 년 동안 지속되었음에도 불구하고 저는 다음과 같이 언급하고 싶습니다.테스트 디스크유용.

testdisk를 사용하여 파일을 복구하는 방법이 튜토리얼. 파일을 복구하려면 testdisk /dev/sdX파티션 테이블 유형을 실행하고 선택하세요. 그런 다음 을 선택한 [ Advanced ] Filesystem Utils다음 파티션을 선택하고 을 선택하십시오 [Undelete]. 이제 삭제된 파일을 찾아 선택하고 파일 시스템의 다른 위치에 복사할 수 있습니다.

관련 정보