삭제된 파일을 복구/삭제 취소하는 명령이 있나요 rm
?
rm -rf /path/to/myfile
어떻게 복구할 수 있나요 myfile
? 이를 수행할 수 있는 도구가 있다면 어떻게 사용합니까?
답변1
댓글에 누군가가 제공한 링크가 가장 좋은 기회일 수 있습니다.
이 기사는 다소 위협적으로 보일 수도 있지만 실제로는 이해하기가 매우 쉽습니다. 일반적으로 단계는 다음과 같습니다.
debugfs를 사용하여 파일 시스템 로그 보기
$ debugfs -w /dev/mapper/wks01-root
debugfs 프롬프트에서
debugfs: lsdel
샘플 출력
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.
debugfs에서 명령 실행
debugfs: logdump -i <7536655>
파일 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.
위의 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
확실하지 않은 경우 확인).
시간이 좀 걸렸지만 아직 커밋하지 않은 일부 소스 코드를 실수로 삭제했을 때 작동했습니다!