많은 c 프로그램 파일이 생성된 현재 디렉터리에서 실수로 rm *을 실행했습니다. 나는 아침부터 이것저것 작업을 해왔다. 이제 더 이상 아침에 파일을 만드는 데 시간을 할애할 수 없습니다. 복원하는 방법을 알려주세요. 재활용 쓰레기통에도 없습니다!
답변1
실행 중인 프로그램에 삭제된 파일이 여전히 열려 있는 경우 해당 파일에 있는 파일 설명자를 열어 파일을 복구할 수 있습니다 /proc/[pid]/fd/[num]
. 이런 경우인지 확인하려면 다음을 시도해 보세요.
$ lsof | grep "/path/to/file"
위의 내용이 다음 형식으로 출력되는 경우:
progname 5383 user 22r REG 8,1 16791251 265368 /path/to/file
두 번째 열의 PID와 네 번째 열의 파일 설명자 번호를 확인하세요. 이 정보를 사용하여 다음 명령을 실행하여 파일을 복구할 수 있습니다.
$ cp /proc/5383/fd/22 /path/to/restored/file
: 이 포함된 파일을 찾을 수 없으면 lsof
해당 파일이 포함된 읽기 전용 파일 시스템을 즉시 다시 마운트해야 합니다.
$ mount -o remount,ro /dev/[partition]
또는 파일 시스템을 완전히 마운트 해제합니다.
$ umount /dev/[partition]
그 이유는 파일의 링크가 해제되고 파일에 대한 하드 링크가 더 이상 남아 있지 않으면 기본 파일 시스템이 삭제된 파일에 대해 이전에 할당된 블록을 해제할 수 있으며 이때 해당 블록이 삭제될 수 있기 때문입니다. 다른 파일에 할당하고 해당 내용을 덮어씁니다. 따라서 복구가 발생하는 경우 파일 시스템에 대한 추가 쓰기를 중지하는 것이 매우 중요합니다. 파일 시스템이 루트 파일 시스템이거나 다른 이유로 인해 읽기 전용으로 만들거나 마운트 해제할 수 없는 경우 시스템을 종료하고(가능한 경우) 대상 파일을 계속 읽을 수 있는 라이브 환경에서 시스템 복구를 재개해야 할 수 있습니다. -오직.
파일 시스템에 대한 쓰기를 차단한 후 즉시 실제 복구를 시도할 필요가 없습니다. 안전을 위해 다음 위치에서 실제 복원을 수행하기 위해 파일 시스템을 백업할 수 있습니다.
$ dd bs=4M if=/dev/[partition] of=/path/to/backup
이제 다음 단계는 파일 시스템 유형에 따라 달라집니다. 일반적인 Ubuntu 설치를 가정하면 ext3
또는 ext4
파일 시스템이 있을 가능성이 높습니다. 이 경우 복구를 사용해 볼 수 있습니다extundelete
. 마운트되지 않은(또는 읽기 전용으로 마운트된) 한, 백업 또는 원본 장치에서 안전하게 복구를 시도할 수 있습니다.활성 파일 시스템에서 복원을 시도하지 마십시오.. 이로 인해 파일 시스템이 일관성 없는 상태가 될 가능성이 높습니다.
extundelete
현재 디렉토리라는 이름의 하위 디렉토리에 찾은 모든 파일을 복원하려고 시도합니다 RECOVERED_FILES
. 백업에서 삭제된 모든 파일을 복원하는 일반적인 사용법은 다음과 같습니다.
이전 버전의 경우:
$ extundelete /path/to/backup --restore-all
최신 버전(예: 0.2.4)의 경우 복원하려는 장치를 마운트하지 마세요(Ryan Lue에게 감사드립니다).
$ extundelete /dev/<device-file> --restore-all
--restore-all
--restore-file <path>
대신 또는 같은 옵션을 사용해 볼 수 있습니다 .--restore-directory <path>
답변2
예, 파일을 복구할 수 있었습니다. 모두 복원되었는지 확인하지는 않았지만 일부는 복원했습니다. 이 도구/명령으로 복구된 파일이 많기 때문에 이 파일에서 일부 텍스트 패턴을 파악하여 어떤 것이 내 것인지 확인해야 합니다. 파일이 다른 이름으로 복원되었습니다(시스템에서 생성되었을 수 있음). 다른 포럼에서 해결책을 얻었습니다. 명령은 photorec입니다.
sudo photorec
그러면 텍스트 기반 창이 열립니다. 나는 지시를 따랐고, 네, 정말 좋았어요.