프로세스가 아직 파일을 사용하고 있는 경우 파일을 복원합니다.

프로세스가 아직 파일을 사용하고 있는 경우 파일을 복원합니다.

실수로 conf 파일의 내용을 삭제하는 문제가 발생했습니다. 온라인에서 본 cp 및 tail 복구 프로세스를 사용하려고 하는데 작동하지 않는 것 같습니다. 파일이 아직 메모리에 있습니다.

# ps aux | grep 'process'
root     30495  0.0  0.0  23660   728 ?        S     2015   0:17 /usr/local/sbin/file -C /etc/dir/file.cfg

/proc/pid의 내용은 다음과 같습니다.

ls -l /proc/30495/fd/0
lrwx------. 1 root root 64 Mar  7 11:35 /proc/30495/fd/0 -> socket:[1278416]

CP 복구 방법:

cp /proc/30495/fd/0 recovered.cfg
cp: cannot open `/proc/30495/fd/0' for reading: No such device or address

꼬리 회복:

tail -c +0 -f /proc/30495/fd/0 recovered.cfg
tail: cannot open `/proc/30495/fd/0' for reading: No such device or   address
tail: cannot open `recovered.cfg' for reading: No such file or directory

이 파일의 내용을 RAM에서 가져오려면 다른 방법이 있나요?

답변1

올바른 해결 방법은 마지막 백업에서 파일을 복원하는 것입니다.

복사는 현재 프로세스에 파일이 열려 있는 경우에만 작동합니다. 과거 어느 시점에 프로세스에 의해 열렸지만 지금은 더 이상 열려 있지 않은 파일에 대해서는 어떤 작업도 수행할 수 없습니다. 프로그램은 구성 파일을 열어 둘 필요가 없습니다. 구성을 읽은 후에는 파일을 닫습니다. 이렇게 하면 아무것도 복원할 수 없습니다. 복구하려는 파일은 관련이 없는 파일입니다. 프로세스가 수신 대기 중인 네트워크 소켓이므로 해당 소켓에서 데이터를 읽을 수 없지만 이는 아무 소용이 없습니다./proc/PID/fd/

gcore 30495 Mark Plotnick이 제안한대로프로세스의 메모리 이미지를 파일로 덤프합니다 core.30495. 해당 메모리 이미지를 조사해 볼 수 있지만 희망을 갖지 마십시오. 프로세스가 구성 파일을 구문 분석하고 파일을 저장한 메모리를 다른 목적으로 재사용했을 가능성이 높습니다. 전체 구성 파일이 메모리에 완전히 저장되지 않고 이전 파일과 함께 하나씩 덮어쓰여지는 경우도 있습니다.

당신은 시도 할 수 있습니다삭제된 파일 복구 도구. 당신이 그것을 시도하고 싶다면이 파일 시스템에 대한 쓰기를 즉시 중지합니다.: 쓰기를 할 때마다 복구 가능성이 줄어듭니다. 하지만 다시 한 번 말하지만 너무 기대하지 마세요. 텍스트 파일을 찾는 것은 건초 더미에서 바늘을 찾는 것과 같습니다. 무언가를 찾으면 이전 버전일 수 있으며 인식할 수 없는 경우가 많다는 점에 유의하세요.

앞으로는 꼭 백업해 두시기 바랍니다. 그리고 구성 파일을 버전 제어하에 두고 저장소를 백업하십시오.

관련 정보