원격 서버에서 실수로 sudo rm /*를 실행했습니다.

원격 서버에서 실수로 sudo rm /*를 실행했습니다.

원격 Ubuntu 서버에 루트로 로그인하고 거의 모든 바이너리를 삭제하는 동안 실수로 이 작업을 수행 했으며 rm /*현재 파일을 복구하기 위해 ssh 또는 ftp를 통해 로그인할 수 없습니다(모든 것이 잘 진행되기를 바랍니다).

이 혼란스러운 상황을 어떻게든 해결할 수 있는 방법이 있습니까? 아니면 데이터 센터에 전화하여 형식에 대해 문의해야 합니까?

답변1

rm /*아주 적은 양만 제거해야 합니다. 재귀적으로 무엇이든 삭제할 수 있는 플래그 가 없습니다 -r. 이 플래그가 없으면 디렉터리는 삭제되지 않습니다(그리고 디렉터리가 삭제되더라도 빈 디렉터리만 삭제됩니다). 이 답변은 귀하가 실행 중이 아니라는 가정을 기반으로 합니다 rm -rf /*.

루트 파일 시스템의 유일한 파일은 커널 및 initrd에 대한 심볼릭 링크(제가 보고 있는 Ubuntu 시스템에는 존재하지 않지만)이거나 /lib6464비트 시스템의 심볼릭 링크일 수 있습니다.

문제는 단순히 심볼릭 /lib64 -> /lib링크가 삭제되었기 때문일 수 있습니다. 그러나 거의 모든 프로그램이 이 심볼릭 링크에 의존하기 때문에 이는 매우 짜증나는 일입니다.

$ ldd /bin/bash
...
    /lib64/ld-linux-x86-64.so.2 (0x00007f8946ab7000)

이것은 ld-linux동적 로더이며, 사용할 수 없는 경우 동적 실행 파일을 실행할 수 없습니다. 이로 인해 로그인이 매우 어려워지거나 전혀 로그인하지 못할 수도 있습니다.

어쩌면 구세주가 있을지도 모릅니다 busybox. 다음 명령을 실행하여 다음을 확인하세요.

$ ldd /bin/busybox
    not a dynamic executable

이 경우 비지박스가 실행이 가능해야 하는데, 어떻게 실행하느냐가 문제입니다.

부트 로더 프롬프트에 액세스할 수 있는 경우 boot 를 사용할 수 있습니다. init=/bin/static-sh여기서 static-sh는 심볼릭 링크입니다 busybox( /bin/static-sh존재하는지 확인하세요. 내 시스템에는 있지만 표준 Ubuntu는 아닙니다. 이 오류사용 가능함을 나타냅니다. )

루트 셸이 있으면 /lib64기호 링크를 다시 만들 수 있습니다. 먼저 읽기/쓰기로 루트 파일 시스템을 다시 마운트해야 할 수도 있습니다. busybox에는 이러한 도구가 내장되어 있어야 하며 다음과 같이 실행할 수 있습니다.

# busybox mount -o remount,rw /
# busybox ln -s /lib /lib64
# /bin/bash
bash# 

Bash가 작동하면 문제가 해결되어야 합니다.

답변2

현재 설치에서 파일을 복원해야 하는 경우 호스트에게 도움을 요청하세요. 가상 머신이라고 가정하면 디스크 이미지를 생성하고 호스트를 처음부터 다시 설치하고 이전 디스크 이미지를 새 파일 시스템에 덤프하는 데 하루에 약 5분 정도 걸립니다.

아무것도 필요하지 않으면 다시 설치하도록 하세요. 일을 세게 밀면 거의 항상 더 빠른 옵션이 됩니다.

답변3

방금 /lib에 대한 /lib64 심볼릭 링크를 제거했는데 콘솔이 아직 열려 있는 경우 다음을 수행하세요.

/lib/ld-linux-x86-64.so.2 /bin/ln -s /lib /lib64

그러면 정상적으로 다시 명령을 실행할 수 있게 됩니다. 실제 ld 라이브러리의 경로를 조정합니다. 원하는 다른 명령을 실행할 수도 있습니다. 명령 앞에 전체 ld 라이브러리 경로를 추가하면 됩니다.

답변4

물리적 서버에 액세스할 수 없다면 할 수 있는 일이 많지 않습니다.

관련 정보