우연히 rm
삭제하고 싶지 않은 파일을 사용했습니다. Linux에서 다시 가져올 수있는 방법이 있습니까?
우연히 rm
삭제하고 싶지 않은 파일을 사용했습니다. Linux에서 다시 가져올 수있는 방법이 있습니까?
답변:
다음은 텍스트 파일을 복구하는 일반적인 단계입니다.
먼저 wall 명령을 사용하여 단일 사용자 모드에서 시스템이 다운되고 있음을 사용자에게 알려줍니다.
# wall
System is going down to .... please save your work.
메시지를 보내려면 Ctrl + D를 누릅니다.
다음으로 init 1 명령을 사용하여 시스템을 단일 사용자 모드로 만듭니다.
# init 1
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
다음으로 vi를 사용하여 file.txt를보십시오.
이 방법은 삭제 된 파일이 텍스트 파일 인 경우에만 유용합니다. ext2 파일 시스템을 사용하는 경우 recover 명령을 시도하십시오.
http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html 에 있습니다 .
init 1
제외한 모든 시스템 데몬을 수동으로 종료하십시오 sshd
. 또한이 시점에서 모든 파일 시스템 RO를 다시 마운트하고 임시 데이터로 파일을 덮어 쓰지 않도록 tmpfs에 저장해야합니다 (임시 파일이 램에 적합하다고 가정). 물론 나중에 RW를 다시 마운트 한 후 원격 서버 나 로컬 파일 시스템으로 다시 복사해야합니다.
dd
후 파일 내에서 파일을 찾으십시오 ( grep
또는 편집기 사용).편집 : 때로는 ddrescue
보다 낫습니다 dd
.
정답은 : 백업에서 파일을 복원하는 것입니다. 모두 백업이 있어야합니다. 정말 중요한 파일에는 두 개의 백업이 있어야합니다. 당신은하지 않습니다? 글쎄, 너무 나쁘다, 여기에 배운 교훈이 있습니다 (거칠게 들려서 죄송하지만 데이터 저장소에 있습니다. 사람들은 중요한 데이터를 잃어 버릴 때까지 백업하지 않습니다. 사실은 사실입니다. 거의 모든 사람들이 마찬가지입니다).
좋아, 당신은 백업이 없습니다. RIGHT NOW 파일이 포함 된 파일 시스템 사용을 중지 해야합니다 . 모든 쓰기 작업은 디스크에 남아있을 수 있는 파일 데이터를 확실하게 제한 할 수 있습니다 .
루트 파일 시스템과 / home 둘 다로 하나의 파티션 만 사용하도록 비극적 인 오류가 발생한 경우 다른 장치에서 부팅 해야합니다 . 지금 .
파일이 일반적인 형식 (Word 파일, JPG 등) 인 경우 Photorec을 사용하십시오 . Photorec은 가장 일반적인 파일 형식을 검색 할 수 있습니다.
이전에 제안 된 "ext3 undelete"방법을 시도 할 수 있지만 명령 행에 익숙하고 기본 Linux 내부 작업 등을 이해해야합니다.
파일이 특별한 형식이라면 운이 좋을 것입니다. 한때는 Perl 프로그램을 작성하여 드라이브에서 일부 특수 파일을 스캔했으며 꽤 잘 작동했습니다. 하지만 그렇게하려면 프로그래밍을 알아야하고 리눅스에서도 매우 편할 것이다.
나는 몇 년 전에 이것을했습니다. 내 접근 방식은 직접, 시간을 잃지 않고 파티션을 마운트 해제 한 다음
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를 통해 마운트 된 후 네 번째를 먹었을 것 ~
입니다. 그 이후로 그런 종류의 것들에 대해 훨씬 더 신중합니다.
표준 rm 인 경우 백업이 있기를 바랍니다. 삭제 된 파일을 복구하는 절차는 전혀 수행 할 수없는 경우 각 파일 시스템마다 다릅니다. 리눅스에는 "휴지통"이 내장되어 있지 않습니다. 파일을 삭제하면 모든 것이 사라집니다.
어떤 식 으로든 컴퓨터를 계속 분리하면 (가능한 경우에도 컴퓨터를 계속 종료해도) 디스크에 쓰기가 발생하고 이전에 일부 블록이 차지했던 일부 블록의 가능성이 높아 지므로 가능한 빨리 컴퓨터의 플러그를 뽑아야합니다. 파일을 덮어 씁니다. 이 작업을 마치면 다른 컴퓨터에 넣거나 라이브 CD를 재부팅 하거나 (읽기 전용으로 마운트하지 않은 경우 드라이브를 마운트하지 마십시오) 하드 드라이브를 제거하여 데이터 복구 전문가에게 가져 가십시오.
기대치를 낮게 설정하십시오. '삭제 된'데이터 위에 무언가가 기록되면 손실됩니다.
나는 약간의 복구를 수행했으며 내가 찾은 최고의 도구는 종종 특정 형식으로 설계되었습니다. 예를 들어 'photorec'은 수만 개의 JPEG를 복구하려고 할 때 좋았습니다.
Recuva 는 또한 이전에 저를 도왔으며 최선의 선택 일 수 있습니다. (무료, 광고비 지불에 속지 마십시오)
하루가 끝나면 잃어버린 것이 중요하면 드라이브를 오프라인으로 전환하고 쓰기를 중단하십시오. 데이터를 복구하거나 가치가 없어 질 때까지 찾을 수있는 모든 복구 소프트웨어를 사용하십시오. 정말로 중요한 경우 전문가에게 높은 가격으로 보내십시오.
이전에 도구를 사용 해본 적이 있다면 익숙한 도구를 다시 사용해보십시오. 하루가 끝나면 디스크에 쓰지 않아야하므로 작동하는 소프트웨어를 찾을 때까지 소프트웨어를 사용할 수 있습니다.
VLC 또는 LibreOffice와 같이 현재 파일을 읽는 응용 프로그램이 열려 있으면 이 훌륭한 L & U.SO 대답이 도움이되었습니다. 다음은 동일한 작업을 수행 하는 다른 방법 입니다.
일반적인 아이디어는 링크를 찾아 /proc/PID/fd/DESCRIPTOR_NUMBER
원래 위치로 다시 복사하는 것입니다. ps aux | grep APP_NAME
PID ls -la /proc/PID/fd/
를 찾은 다음 적절한 DESCRIPTOR_NUMBER 를 찾는 데 사용하십시오 .
이 스크립트를 사용해보십시오. 잘 작동하며 rm과 im 대신에 광범위하게 사용됩니다.
https://github.com/nateshmbhat/safe-rm
rm
지난주에 같은 문제가 있었고 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’
이 비디오 쇼는 당신을 도울 수있는 미니 튜토리얼입니다.
rm
는 "위험한"UNIX / Linux 명령입니다 (읽기$ man rm
). 매우주의해서 사용하십시오 . 그렇게 말하면 확신하는 파일을 빠르게 삭제할 수 있습니다. 최신 Linux 및 Unix 데스크탑 환경은 "휴지통" 솔루션을 제공 하므로 사용자는 실수로 삭제 한 파일을 쉽게 복구 할 수 있습니다.