리눅스에서 제거 된 파일을 복구하는 방법?


65

우연히 rm삭제하고 싶지 않은 파일을 사용했습니다. Linux에서 다시 가져올 수있는 방법이 있습니까?


@Nav rm는 "위험한"UNIX / Linux 명령입니다 (읽기 $ man rm). 매우주의해서 사용하십시오 . 그렇게 말하면 확신하는 파일을 빠르게 삭제할 수 있습니다. 최신 Linux 및 Unix 데스크탑 환경은 "휴지통" 솔루션을 제공 하므로 사용자는 실수로 삭제 한 파일을 쉽게 복구 할 수 있습니다.
Jose Elera


나중에 파일을 복원하려면 "rm"을 사용하지 마십시오. 대신 "rm-trash"유틸리티를 사용하십시오. github.com/nateshmbhat/rm-trash
Natesh bhat

답변:


51

다음은 텍스트 파일을 복구하는 일반적인 단계입니다.

  1. 먼저 wall 명령을 사용하여 단일 사용자 모드에서 시스템이 다운되고 있음을 사용자에게 알려줍니다.

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

    메시지를 보내려면 Ctrl + D를 누릅니다.

  2. 다음으로 init 1 명령을 사용하여 시스템을 단일 사용자 모드로 만듭니다.

    # init 1
    
  3. grep (전통적인 UNIX 방법)을 사용하여 파일 복구

    다음 grep 구문을 사용하십시오.

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

    또는

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

    어디에,

    -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.
    

    / dev / sda1에서 "nixCraft"단어로 시작하는 텍스트 파일을 복구하려면 다음 명령을 시도하십시오.

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. 다음으로 vi를 사용하여 file.txt를보십시오.

    이 방법은 삭제 된 파일이 텍스트 파일 인 경우에만 유용합니다. ext2 파일 시스템을 사용하는 경우 recover 명령을 시도하십시오.

http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html 에 있습니다 .


16
이 단일 사용자 모드는 네트워킹을 끕니다
Quinma

1
이 방법은 텍스트 파일에 놀라운 기능을합니다. 내가 좋아하는 것은 파일 시스템의 저널 (extundelete와 같은)에 의존하지 않지만 실제로 전체 드라이브의 원시 바이트를 스캔한다는 것입니다. 이 명령으로 파일을 찾지 못하면 아무것도 없습니다.
Benjamin B.

1
@Quinma,이 방법 약간만 수정하면 원격으로 작동 할 수 있습니다 ...를 실행하는 대신를 init 1제외한 모든 시스템 데몬을 수동으로 종료하십시오 sshd. 또한이 시점에서 모든 파일 시스템 RO를 다시 마운트하고 임시 데이터로 파일을 덮어 쓰지 않도록 tmpfs에 저장해야합니다 (임시 파일이 램에 적합하다고 가정). 물론 나중에 RW를 다시 마운트 한 후 원격 서버 나 로컬 파일 시스템으로 다시 복사해야합니다.
Thomas Guyot-Sionnest

your_partition은 무엇입니까 ??? 오류가 발생했습니다 : / dev / sda1 : 해당 파일이나 디렉토리가 없습니다
coolcool1994

1
@ Qback, 나는 정말로 모른다. 언급했듯이 방금 단계별로 수행했습니다. 그러나 init 1은 관리 작업을위한 것이며 해당 실행 수준 시나리오와 관련이없는 프로세스를 종료시킬 수 있습니다. 복구하려는 파일을 덮어 쓰는 하드 디스크 사용을 방지하는 데 도움이 될 수 있습니다.
Gabriel L. Oliveira

13
  • 매우 중요한 경우 컴퓨터에서 디스크를 꺼내 회사를 고용하십시오.
  • 매우 중요한 경우 디스크를 읽기 전용으로 마운트하고를 사용하여 전체 파티션을 파일로 복사 한 dd후 파일 내에서 파일을 찾으십시오 ( grep또는 편집기 사용).

편집 : 때로는 ddrescue보다 낫습니다 dd.


1
"파일 내에서 파일을 찾으십시오"혼란 스럽습니다. 어떻게 합리적으로 15+ GB 파일을 열고이 짐승을 검색하거나 grep으로 파이프합니까? 그리고 당신은 텍스트를 찾을 때 무엇을 할 것입니까? 이 회복은 어떻게 지상에 있습니까?
TheLQ

1
가장 먼저 할 일은 불확실한 결과를 위해 많은 현금을 태우기 전에 몇 가지 일반적인 도구를 사용해 보는 것입니다. BTW, grep은 실제로 도움이되지 않습니다, photorec 또는 ext3grep.
wazoox



5
  • 정답은 : 백업에서 파일을 복원하는 것입니다. 모두 백업이 있어야합니다. 정말 중요한 파일에는 두 개의 백업이 있어야합니다. 당신은하지 않습니다? 글쎄, 너무 나쁘다, 여기에 배운 교훈이 있습니다 (거칠게 들려서 죄송하지만 데이터 저장소에 있습니다. 사람들은 중요한 데이터를 잃어 버릴 때까지 백업하지 않습니다. 사실은 사실입니다. 거의 모든 사람들이 마찬가지입니다).

  • 좋아, 당신은 백업이 없습니다. RIGHT NOW 파일이 포함 된 파일 시스템 사용을 중지 해야합니다 . 모든 쓰기 작업은 디스크에 남아있을 있는 파일 데이터를 확실하게 제한 할 수 있습니다 .

  • 루트 파일 시스템과 / home 둘 다로 하나의 파티션 만 사용하도록 비극적 인 오류가 발생한 경우 다른 장치에서 부팅 해야합니다 . 지금 .

  • 파일이 일반적인 형식 (Word 파일, JPG 등) 인 경우 Photorec을 사용하십시오 . Photorec은 가장 일반적인 파일 형식을 검색 할 수 있습니다.

  • 이전에 제안 된 "ext3 undelete"방법을 시도 할 수 있지만 명령 행에 익숙하고 기본 Linux 내부 작업 등을 이해해야합니다.

  • 파일이 특별한 형식이라면 운이 좋을 것입니다. 한때는 Perl 프로그램을 작성하여 드라이브에서 일부 특수 파일을 스캔했으며 꽤 잘 작동했습니다. 하지만 그렇게하려면 프로그래밍을 알아야하고 리눅스에서도 매우 편할 것이다.


5

나는 몇 년 전에 이것을했습니다. 내 접근 방식은 직접, 시간을 잃지 않고 파티션을 마운트 해제 한 다음

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

파티션의 정확한 상태에 대한 백업 파일이 있어야합니다. 그런 다음 파티션을 다시 마운트하고 생성 된 이미지에서 삭제 된 파일을 검색 할 때 평소와 같이 비즈니스를 계속할 수 있습니다. "빈"공간이 모두 필요하므로 이미지가 매우 클 수 있으므로 이미지를 저장하는 것이 실질적인 문제 일 수 있습니다.

그런 다음 텍스트 스 니펫 후에 파티션 콘텐츠 수프에있을 것으로 예상되는 지루한 검색을 수행했습니다. 예를 들어 .tex 파일을 찾기 위해

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

"하위 섹션"이라는 문구 주위에 큰 컨텍스트를 인쇄하고 수동으로 검색 할 파일에 출력을 저장했습니다. 이미지를 검색하는 데 오랜 시간이 걸렸기 때문에 필요한 시간보다 오래 걸리지 않았기 때문에 큰 컨텍스트를 인쇄했습니다.

또한이 명령 strings은 출력에서 ​​이진 쓰레기를 제거하는 데 도움이되었지만 올바르게 기억하면 모든 줄 바꿈을 제거하여 문제가 될 수 있습니다.

같은 방법으로 바이너리 파일을 찾으려면 특성 헤더 또는 특정 파일을 찾는 데 성공했을 수도 있지만 다소 큰 모험이라고 생각합니다.


간단한 기술 정보 : 디스크 복구 및 Ext3 / 4에 기술적 인 어려움이 있습니다. Ext3 / 4는 파일을 삭제할 때 디스크에서 파일이있는 위치를 알려주는 "마커"를 제거합니다. 파일은 문지르지 않지만 디스크에서 더 이상 시작하고 끝나는 곳을 아무도 모릅니다. 때로는 여러 곳에서 조각화되기도합니다. 일부 다른 파일 시스템은 파일 상태를 "삭제됨"으로 설정했지만 위치 데이터는 유지합니다. 그런 다음 undelete는이 플래그를 사용하여 파일 포인터를 보는 것보다 어렵지 않습니다 (너무 많은 활동이 발생하지 않은 경우 여전히 사용 가능해야 함).

최고는 무엇입니까? 내 견해로는 수사적이다. 빈번한 백업은 이러한 모든 문제에 대한 해답입니다. 자동 백업 시스템이 없는 중요한 데이터 는 사고가 발생하기를 기다리는 것입니다 (IMHO).


필수 개인 일화 : 나는 제거 거라고 foo\ foo*에서 ~. 나는 썼다

rm -r foo<Tab>*

슬프게도, foo심볼 링크와 이것과 일치하는 유일한 파일이기 때문에 쉘은

rm -r foo\ foo *

나는 Enter 키를 누르고 명령을 보았습니다. 최대 1 초가 걸렸습니다. 조금 더 오랜 시간이 지난 후 rm"쓰기 금지 된 파일 'something'"을 제거하길 원하는지 물었습니다. 아주 빨리 오한을 느꼈고 부드럽고 매우 통제 된 느낌을 받았습니다 Ctrl+c. ~ 내 절반 ~이 삭제되었지만 위에서 설명한 grepping과 현재 백업을 통해 가치있는 모든 것을 얻을 수있었습니다. 필자는 디스크에서 개인적으로 매우 귀중한 (읽기 : 시간이 많이 소요) 최근 측정 데이터를 얻었지만 4 배 백업을 수행했습니다. 하나는 학교에서 시스템 중단으로 인해 여기에서 사라졌고 다른 하나는 부패했으며 처음에는 실수로 잘못된 폴더에 넣었으므로 네 번째를 찾을 수 없었습니다. 하지 않았다rm -r쓰기 금지 된 파일에 붙어 있으면 네 번째 폴더가 내 sshfs를 통해 마운트 된 후 네 번째를 먹었을 것 ~입니다. 그 이후로 그런 종류의 것들에 대해 훨씬 더 신중합니다.


5

표준 rm 인 경우 백업이 있기를 바랍니다. 삭제 된 파일을 복구하는 절차는 전혀 수행 할 수없는 경우 각 파일 시스템마다 다릅니다. 리눅스에는 "휴지통"이 내장되어 있지 않습니다. 파일을 삭제하면 모든 것이 사라집니다.

어떤 식 으로든 컴퓨터를 계속 분리하면 (가능한 경우에도 컴퓨터를 계속 종료해도) 디스크에 쓰기가 발생하고 이전에 일부 블록이 차지했던 일부 블록의 가능성이 높아 지므로 가능한 빨리 컴퓨터의 플러그를 뽑아야합니다. 파일을 덮어 씁니다. 이 작업을 마치면 다른 컴퓨터에 넣거나 라이브 CD를 재부팅 하거나 (읽기 전용으로 마운트하지 않은 경우 드라이브를 마운트하지 마십시오) 하드 드라이브를 제거하여 데이터 복구 전문가에게 가져 가십시오.


4

기대치를 낮게 설정하십시오. '삭제 된'데이터 위에 무언가가 기록되면 손실됩니다.

나는 약간의 복구를 수행했으며 내가 찾은 최고의 도구는 종종 특정 형식으로 설계되었습니다. 예를 들어 'photorec'은 수만 개의 JPEG를 복구하려고 할 때 좋았습니다.

Recuva 는 또한 이전에 저를 도왔으며 최선의 선택 일 수 있습니다. (무료, 광고비 지불에 속지 마십시오)

하루가 끝나면 잃어버린 것이 중요하면 드라이브를 오프라인으로 전환하고 쓰기를 중단하십시오. 데이터를 복구하거나 가치가 없어 질 때까지 찾을 수있는 모든 복구 소프트웨어를 사용하십시오. 정말로 중요한 경우 전문가에게 높은 가격으로 보내십시오.

이전에 도구를 사용 해본 적이 있다면 익숙한 도구를 다시 사용해보십시오. 하루가 끝나면 디스크에 쓰지 않아야하므로 작동하는 소프트웨어를 찾을 때까지 소프트웨어를 사용할 수 있습니다.


2

다음은 훌륭한 문서 입니다. 실용적인 팁이 많이 있습니다.

BTW에는 두 그룹의 사람들이 있습니다.

  1. 백업을하는 사람들
  2. 백업을 할 사람들

축하합니다. 방금 그룹 2로 홍보했습니다. ;-)


2

VLC 또는 LibreOffice와 같이 현재 파일을 읽는 응용 프로그램이 열려 있으면 이 훌륭한 L & U.SO 대답이 도움이되었습니다. 다음은 동일한 작업을 수행 하는 다른 방법 입니다.

일반적인 아이디어는 링크를 찾아 /proc/PID/fd/DESCRIPTOR_NUMBER원래 위치로 다시 복사하는 것입니다. ps aux | grep APP_NAMEPID ls -la /proc/PID/fd/를 찾은 다음 적절한 DESCRIPTOR_NUMBER 를 찾는 데 사용하십시오 .


1

"올바른"대답은 안정적으로 복구 할 수있는 방법이없고 대신 백업 또는 복제 된 시스템에서 복원하거나 다시 설치하는 방법입니다.

TestDisk는 훌륭한 도구이며, 파일 시스템 및 삭제의 최근 방문일에 따라 물리적 드라이브에서 일부 데이터를 구제 할 수있는 다른 방법이 있습니다,하지만 너무 큰, 그래서 수 관련된 시간과 고통 백업 보관 (및 테스트 그들이 유효하고 복원 가능하다는 것을!)!


1

다른 사용자가 덮어 쓰지 않으면 운이 좋습니다. 실수로 cpp 소스 파일을 삭제하고 foremost 라는 도구를 사용 하여 디스크에서 60G cpp 잔해물을 복원 할 수있었습니다. 마지막으로, 그 파편들을 하나씩 조립하여 파일을 복구했습니다. 특정 파일 유형에 대해 특정 패턴을 스캔하고 디스크의 모든 inode를 통과하여 파일을 복구한다고 생각합니다! 시도해보십시오!


0

실수로 Linux에서 파일을 삭제 한 경우 다음 명령을 사용할 수 있습니다.

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

대신에 search text파일 이름을 입력하고 대신에 복원하려는 디렉토리를 지정할 수 있습니다 /home.


2
안녕 산토스. 게시물에 오해의 소지가있는 링크를 추가하지 마십시오. 제거되었습니다.
ᔕᖺᘎᕊ

0

이 스크립트를 사용해보십시오. 잘 작동하며 rm과 im 대신에 광범위하게 사용됩니다.

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

특징 :

  • rm 대신 사용
  • rm이 취할 수있는 모든 인수를 처리
  • 이미 휴지통에있는 파일과의 파일 이름 충돌을 처리합니다.
  • 일부 권한 문제를 자동으로 처리
  • rm이 다른 스크립트에서 또는 간접적으로 호출되면 시스템 'rm'명령이 자동으로 사용됩니다
  • 에서 발생하는 것과 같은 적절한 오류 메시지를 보여줍니다 rm

-2

지난주에 같은 문제가 있었고 debugfs, photorec, ext3grep 및 extundelete와 같은 많은 프로그램을 시도했습니다. ext3grep는 파일을 복구하는 가장 좋은 프로그램이었습니다. sintax는 매우 쉽습니다.

ext3grep image.img --restore-all

또는:

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’

이 비디오 쇼는 당신을 도울 수있는 미니 튜토리얼입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.