실수로 이 cp
명령을 잘못 사용하여 ext4 파일 시스템의 파일 내용을 덮어썼습니다. 어쨌든 이 이전 파일의 내용과 메타데이터(예: 마지막 쓰기 시간 등)를 복원할 수 있습니까?
이것이 이동된 블록을 해제한다는 것을 알고 있지만 mv
대량 복사 작업에도 적용됩니까?
답변1
ext4 파일 시스템의 세션 예:
지정된 크기로 두 개의 파일 a, b를 만듭니다.
# dd if=/dev/urandom of=a bs=1282 count=1
1+0 records in
1+0 records out
1282 bytes (1.3 kB) copied, 0.000647314 s, 2.0 MB/s
# dd if=/dev/urandom of=b bs=3247 count=1
1+0 records in
1+0 records out
3247 bytes (3.2 kB) copied, 0.00106112 s, 3.1 MB/s
a가 물리적으로 할당된 위치를 확인하세요.
# filefrag -sve a
Filesystem type is: ef53
File size of a is 1282 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 32833.. 32833: 1: last,eof
a: 1 extent found
b를 a에 복사하여 a를 "덮어씁니다". (출력이 단축되었습니다.)
# strace cp b a
open("a", O_WRONLY|O_TRUNC) = 4
write(4, "CX\256\330x01pP\326\0101~,\252\"\311\202\21\260\21y\377_S\254\2\352\262\v\3\t"..., 3247) = 3247
cp 이후의 물리적 위치를 확인합니다.
# filefrag -sve a
Filesystem type is: ef53
File size of a is 3247 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 33280.. 33280: 1: last,eof
a: 1 extent found
위치가 에서 로 변경 32833
됩니다 33280
. 이는 32833
이 경우 원본 데이터가 여전히 - 에서 발견될 수 있음을 의미합니다.
무슨 일이 일어나고 있는지 cp
출력 파일이 잘려서 일시적으로 0바이트 파일이 됩니다. 이는 inode를 재사용한다는 점을 제외하면 삭제와 거의 동일합니다. 파일에 쓰는 것은 사용 가능한 공간의 어느 곳에서나 할당됩니다. 이는 이전 파일이 있었던 다른 곳일 수 있습니다.
따라서 원본 데이터에서 찾을 수 있을 정도로 파일 내용의 일부를 알고 있다면 복구 가능성이 있을 수 있습니다. 이 작업은 photorec
수행되지만 헤더가 다른 알려진 파일 형식에 대해서만 수행됩니다. extundelete
파일의 inode가 실제로 삭제되지 않고 새 파일에 재사용되기 때문에 아마도 도움이 되지 않을 것입니다.
답변2
쉽지 않기 때문에 데이터의 가치에 따라 다릅니다. 지금 하드 드라이브 사용을 중지하십시오. 디스크에서 모든 작업을 수행하면 복구 가능성이 줄어듭니다. 앞으로는 버전 제어 시스템을 배우고 사용하고 리포지토리를 원격 위치에 백업하십시오.
파일이 삭제되었지만 일부 프로세스에 의해 여전히 열려 있는 경우 삭제되지 않습니다. 해당 항목에 대한 참조를 찾아 /proc
새 위치에 복사하면 여전히 복원할 수 있습니다.
답변3
https://github.com/PabloLec/RecoverPy 이 도구는 실수로 파일을 빈 파일로 저장하는 문제를 해결했습니다. 파일을 다시 열었을 때 파일이 비어 있었습니다.
이 도구는 키워드를 사용하여 드라이브에서 블록을 검색할 수 있습니다. 이 도구는 일반적인 삭제된 파일이 아닌 덮어쓴 파일 내용을 복구하도록 특별히 설계되었습니다. 하지만 콘텐츠는 여전히 드라이브의 블록에 저장됩니다.
사용하는 방법:
- 검색을 수행하려는 드라이브를 선택하고 화살표 키를 이동한 후 Enter를 클릭합니다. 드라이브 선택
- 파일에 포함되어 있다고 확신하는 키워드를 검색하세요.
- 검색 결과가 나타나면 찾고 있는 키워드가 포함된 결과를 클릭하세요.
- 그런 다음 근처 블록을 탐색하고 선택하여 파일에 추가할 수 있습니다.
- 파일에 추가하려는 모든 블록이 있으면 "파일 저장"을 클릭하면 tmp 폴더에 파일이 저장됩니다.
이 도구는 정말 대단합니다. 거의 4000줄에 달하는 파일을 복구할 수 있었기 때문입니다. 다음은 제가 수행한 일부 연구에서 얻은 메모입니다. (예, 백업을 했어야 했습니다.) 교훈을 얻었고 이제 파일이 온라인에 있습니다.