이전에 이런 질문을 받은 적이 있다면 정말 죄송합니다. 이 작업은 매우 중요한 데이터와 관련되어 있어 도움이 정말 필요하며 지난 2시간 동안 도움을 드릴 수 없었습니다.
본질적으로 rm -r을 실행할 때 오타로 인해 실수로 잘못된 폴더를 삭제했습니다. 내가 아는 한 파일은 여전히 존재하지만 링크는 제거되었습니다. 이러한 파일을 사용하는 프로세스는 여전히 실행 중이므로 프로세스가 종료될 때까지 계속 액세스할 수 있는 것처럼 보입니다(이후에는 영원히 손실되어야 합니다). 지난 2시간 정도 동안 프로세스의 데이터를 폴더에 기록하여 파일을 복구하려고 했습니다. 하지만 단일 파일에 대해서만 이 작업을 수행하는 방법을 찾을 수 있었습니다.
실행 시 출력에는 lsof | grep ./
여전히 모든 파일과 크기가 표시됩니다. 아직도 복원이 가능하다고 믿게 만드네요. 링크가 사라져도 프로그램은 여전히 잘 작동하기 때문에 프로세스 자체도 파일에 잘 액세스할 수 있는 것 같습니다.
사용하신 방법을 시도해 보았는데 cp /proc/32184/fd/103 ./resoration
파일 하나만 복구되는 것 같습니다. 서버를 종료하지 않고 파일을 잃을 위험 없이 모든 파일을 신속하게 복원할 수 있는 방법이 있습니까?
일부 데이터를 수동으로 백업했지만 크기가 너무 커서 모두 백업할 수 없습니다.
이 문제를 해결하는 데 도움을 주신 모든 분들께 감사드리며, 이전에 이 질문을 받은 적이 있다면 다시 한번 사과드립니다.
답변1
스크립트를 직접 작성해 볼 수 있습니다.
PID=..your process..
export RESTORE_TO_DIR=some_place
find "/proc/$PID/fd" -lname '* (deleted)' -printf '%p %l\0' |
xargs -0 sh -c '
for l; do
f=${l%% *}; t="$RESTORE_TO_DIR${l#* }"
echo mkdir -p "${t%/*}" && echo cp -vb "$f" "${t% (deleted)}"
done
' sh
괜찮아 보이면 이전 echo
을 제거하십시오 . 빈 문자열로 설정하면mkdir
cp
RESTORE_TO_DIR
~해야 한다삭제된 파일을 원래 위치로 복원합니다.
일부 의견과는 달리 삭제된 파일에 대한 하드 링크(어떤 디렉터리에서도 참조되지 않는 인덱스 노드)를 생성할 수 없습니다.