소개하다
실수로 끔찍한 일을 저질렀어요. ls
대신에 내가 작성한 스크립트 이후 에 나타난 며칠 전 디렉토리의 복사본 대신 현재 디렉토리에서 일부 명령을 입력 cd
한 다음 실행했는데 예상한 효과가 없었습니다.rm -rf
mnt
여기에 이미 비슷한 질문이 있다는 것을 알고 있지만 포괄적인 질문은 없습니다. 나는 이 "기회"를 통해 나중에 다른 사람들이 참조할 수 있도록 공개적으로 답변을 제공하는 시리즈를 시작하고 싶습니다.
photorec
예를 들어 및 사용에 대한 제안이 있습니다 testdisk
. 이것이 최선의 해결책이 아닐 수도 있습니다. 또 다른 답을 찾았는데,여기, 권장됩니다 locate
. 나는 그것에 대해 또는 그것이 어떻게 작동하는지 모릅니다.
내 시스템
내 시스템은 테스트 분기를 추적하는 Debian 10 시스템입니다. 데이터는 ext4 형식으로 SSD에 저장됩니다. 내가 잘못된 위치에 있다는 것을 깨달았을 때 rm -rf
나는 컴퓨터의 전원 버튼을 눌러 컴퓨터를 종료했습니다.
해결 단계
다른 데비안 시스템을 실행하는 다른 노트북이 있습니다. SSD를 컴퓨터에서 꺼내서 외부 USB-Sata 커넥터에 연결했습니다.
이제 시스템이 장치에 데이터를 쓸 수 없도록 설치해야 한다고 생각합니다. 어떻게 해야 합니까?
locate
그런 다음 이 방법(연결된 질문)을 사용하여 데이터를 다시 가져올 수 있습니까 ? 어떤 일을 하기 전에 이것이 옳은 일인지 확인하고 싶습니다.
데이터가 중요합니까?
예. 제가 삭제한 디렉토리에는 제 박사 학위에 대한 모든 코드가 포함되어 있었습니다. 아직 몇 주가 남았습니다. 지난 몇 주 동안 해온 모든 작업을 사용하고 다시 구현할 수 있는 이전 버전이 있습니다. 하지만 그 짧은 시간 동안 나는 많이 변했다. 이번 주에 내 연구에서 "획기적"이 있었습니다. 코드가 작성되는 방식은 코드를 다시 구현하는 것이 결코 간단하지 않다는 것을 의미합니다.
백업이 있나요? (편집하다)
내가 확실히 아는 유일한 것은 내가 소유한 서버에 날짜가 있다는 것입니다 2 May 2020
. 나는 거의 24시간 내내 일하기 때문에 그 이후로 많은 일을 해왔습니다.
거기가능한이 SSD에 다른 백업이 있지만 그 중 일부는 내 홈 디렉터리에 있으므로 해당 백업이 삭제되고 rm -rf
백업 스크립트가 예상대로 작동하지 않으므로 거기에 있는 일반 백업이 없을 수 있습니다. (복사되는 이상한 것을 삭제하려고 하다가 결국 막혔습니다.)
현재 날짜를 확인하기 위해 SSD에 액세스할 수 없습니다. 데이터를 쓸 수 없도록(가능한 경우) 설치하는 방법을 알아야 합니다.
5월 2일의 것만 가지고 있었다면 정말 나빴을 것입니다. 나는 최근 몇 시간 동안 미친 듯이 일해왔기 때문에 아마도 오늘 아침에 일어나서 실수로 그것을 엉망으로 만든 것 같습니다.
답변1
고려해야 할 사항은 다음과 같습니다.
먼저 전체 디스크 복사본을 만듭니다. 디스크 자체가 아닌
dd if=/dev/sdX of=image.img bs=1M status=progress
이 복사본(예: )을 처리합니다 .photorec image.img
내 (장기) 경험으로 볼 때 많은 파일 형식보다 낫습니다
foremost
.photorec
파일 형식에 따라 사용자 정의 파일 헤더를 에 추가하는 것을 고려할 수도 있습니다foremost
. 이는 과거에 나에게 큰 도움이 되었습니다. 내 답변에서 paramount/photorec에 대한 추가 정보여기이것내 대답은 복구된 건초 더미에서 사용 가능한 파일을 찾는 데 도움이 될 수 있습니다.
SSD를 설치하지 마십시오. 주석에서 이미 지적했듯이 읽기 전용으로 마운트하는 것만으로는 덮어쓰기를 방지하는 데 항상 충분하지 않을 수 있습니다. 이미지를 처리합니다
dd
.
자, 제가 얼마 전에 배웠는데 실제로 여러분에게 도움이 될 수 있는 (흥미로운) 요령이 있습니다.
내가 삭제한 디렉토리에는 내 박사 학위에 대한 모든 코드가 포함되어 있었습니다.
그래서 이것은 텍스트입니다. 이제 대부분의 코드가 하나(또는 몇 개의) 파일에 있는 경우 실제로 다음을 시도해 볼 수 있습니다.
grep -ai '<this text is in my newest code revision>' image.img
나는 이것이 너무 간단하게 들린다는 것을 알고 있지만 이전에 같은 상황에서 나를 구해주었습니다. 일치하는 줄 위와 아래에 줄을 -C x
포함(숫자로 대체)하려면 명령에 추가해야 할 수도 있습니다 .x
파일이 부분적으로 손상되었을 수 있습니다. 다양한 모드를 사용해 보세요. 많은 단어로 시작하여 정확하게 일치하는 단어를 찾아보세요. 결과가 없으면 더 적은 단어로 시도해 보세요.
필수사항도 있습니다...항상 백업해두세요. 같은 드라이브에 있지 않습니다. 백업을 확인하세요. 수백 기가바이트는 아닌 것으로 생각되는 텍스트를 다루고 있으므로 클라우드 백업(물론 암호화됨) 등을 설정할 수도 있습니다.
또 다른 조언: 코드를 다시 작성하는 것보다 더 많은 시간을 투자하지 마십시오. 침착하게 할 수 있는 것을 시도해보고 내 grep
방법이 도움이 되는지 확인하세요. 하루 종일 사용해도 결과가 나오지 않으면 가장 좋은 해결책은 아마도 최신 백업을 받아 거기에서 다시 작업하는 것입니다.
답변2
대답의 시작
photorec
일부 데이터를 복구하기 위해 유틸리티 제품군을 사용했습니다 testdisk
.
내가 시도한 것들의 목록
- Debian 10 노트북 부팅(독립형 머신)
- USB를 통해 SSD를 SATA 컨트롤러에 연결합니다(나쁜 생각입니다!)
- 디스크가 자동으로 마운트됩니다(이를 방지하는 방법을 모르겠습니다).
- dd를 사용하여 백업용 데이터 복사 시작
- 공간이 충분하지 않습니다
- dd 작업이 취소되었습니다.
- 먼저 데이터를 dd 복사하는 것이 좋을 수도 있지만 어떻게 해야 할지 모르겠습니다.
- 문제: 디스크 크기가 1TB이고 확인하기 전에 1TB를 모두 복사해야 합니다. (아마도? 제로화 블록을 무시할 수 있나요?)
photorec
- 내부 SSD(노트북)만 500GB
- 외장 4TB 드라이브 연결
- 마운트 해제된 1TB SSD(복구하려고 합니다)
- 귀찮게 하지마 dd
- 짐을 실은
photorec
- 지침은 다음과 같습니다.https://www.cgsecurity.org/wiki/PhotoRec_Step_By_Step
- 내가 다르게 한 유일한 일은 검색하는 파일 형식을 변경하고 모두 끄고
.tx?
관련.txt
옵션(.c 소스 파일 등 포함) 만 검색하는 것이었습니다.
데이터 처리
- Photorec은 수백 개의 출력 폴더와 수천 개의 파일을 생성했습니다.
- 파일 이름이나 디렉터리 이름에 대한 명명/번호 지정 규칙을 이해하지 못합니다.
- 파일명이 다 횡설수설이네요.
grep -rIw
전체 단어 문자열과 정확히 일치하는 하위 폴더를 검색하는 데 사용됩니다.- bash 스크립트를 사용하여 출력에서 일부 처리를 수행하여 관련 없는 줄을 제거합니다.
diff
일치하는 결과를 비교하는 데 사용됩니다 .- 내 소스 파일 중 하나의 최신 버전 찾기
- 아직 몇개 더 남았는데...
일반화하다
이것이 "수용된 답변"인지 확실하지 않지만 위의 방법은 파일을 검색하는 데 사용하는 것입니다.
이는 특별히 좋은 접근 방식은 아니지만 효과가 있습니다.
손실된 데이터가 이미지인 경우 콘텐츠를 탐색하거나 썸네일을 보면 올바른 파일을 찾는 것이 훨씬 쉬울 수 있습니다.
텍스트 파일은 시스템에서 생성된 텍스트 파일, 로그 등으로 인해 시스템이 많은 오탐지를 생성하므로 처리하기가 더 어렵습니다.
답변3
충분히 빨리 전원을 끄면 파티션의 전체 바이너리 백업을 수행한 후 다음을 수행할 수 있습니다.확장 삭제시도 해봐.
내가 정확하게 기억한다면 extundelete는 파티션의 로그를 활용하여 rm -rf
.