git에서 전체 /etc/ 복구

git에서 전체 /etc/ 복구

CentOS 6.9 서버가 있습니다.

전체 /etc디렉토리는 버전 제어하에 있었습니다.

실수로 'git rm -R'을 실행했습니다. 서버가 즉시 작동을 멈추고 SSH 세션이 손실되었습니다.

나는 서버에 IP 콘솔을 연결하고 라이브 Linux를 사용하여 USB에서 부팅하고 'git reset --hard'.

이제 인덱스/작업 디렉토리가 깨끗해졌습니다. 시스템을 재부팅했지만 여전히 작동하지 않습니다. 핑에 응답하지만 여전히 ssh에 연결할 수 없습니다.

IP 콘솔에서 사용자 키를 입력한 후에도 로그인할 수 없으며 사용자를 다시 묻는 메시지가 나타납니다.

복구 Linux에서 오류를 확인했습니다 /var/log/boot.log. 첫 번째 오류는 iptables-restore에 관한 것입니다.

error while loading shared libraries libip4tc.so.0 : cannot open shared object file: No such file or directory

다음은 rsyslog.d입니다.

CONFIG ERROR: could not interpret master config file '/etc/rsyslog.conf'

복구 라이브 Linux에서 확인하면 파일이 분명히 있습니다. 허가 문제가 의심되지만 실제로는 모르겠습니다.

도움을 주시면 감사하겠습니다. 감사해요.

답변1

소유권과 권한이 잘못되었을 수 있습니다. 이를 추적하지 않았으므로 모든 단일 파일에 대해 수동으로 수정해야 합니다.

git 자체로는 파일의 소유권과 권한을 추적하지 않습니다. 그건 그런 목적이 아닙니다. 이 메타데이터는 전혀 추적되지 않아 손실되었습니다.

이것이 바로 시스템이다etckeeper에 있습니다. 버전 제어를 유지하기 위해 git을 둘러싸는 /etc동시에 git이 제공하지 않는 메타데이터를 유지하고 필요한 경우 복원합니다. 앞으로 이런 일이 발생하지 않도록 하려면 etckeeper 또는 유사한 도구를 사용하는 것이 좋습니다.

일종의 백업을 실시할 수도 있습니다. 현재 어떤 종류의 백업도 없는 것 같습니다. 이는 재난의 비결입니다. 당신은 운이 좋게도 데이터 손실이 거의 없이 탈출할 수 있었습니다. 다음 번에는 그렇게 운이 좋지 않을 수도 있습니다.

답변2

예, 권한 및 파일 소유권 문제가 있습니다. 안타깝게도git은 파일의 내용과 실행 가능한 비트만 저장합니다.이므로 에서 복원할 때 읽기/쓰기 권한, 사용자 및 그룹 소유권, ACL(있는 경우)이 손실됩니다 git reset --hard. 이는 복원 중인 디렉터리가 /etc인 경우 호스트를 손상시키기에 충분합니다.

최선의 복구 희망은 모든 파일 소유권과 권한을 포함하는 전체 파일 시스템 백업입니다.

이들 중 하나도 없으면 유사한 CentOS 호스트와 비교하여 소유권과 권한을 수동으로 다시 구축해 볼 수 있습니다. 하지만 OS를 처음부터 다시 설치하는 작업이 줄어들 수도 있습니다. 죄송합니다.

관련 정보