손상된 시스템 디렉토리(예: /lib) 재구축

손상된 시스템 디렉토리(예: /lib) 재구축

사용자가 삭제한 Debian, Ubuntu 또는 CentOS와 같은 Linux 시스템이 있다고 가정합니다 /lib. 시스템이 실행 중인 운영 체제의 livecd 버전을 사용하여 시스템을 성공적으로 부팅했다고 가정해 보겠습니다. /lib손상된 시스템에서 재구축 명령을 실행할 수 있습니까 ?

예를 들어, 대상 시스템이 사용하고 있는 모든 패키지를 다시 설치하면 이와 같은 작업을 수행할 수 있을 것 같습니다.

이런 상황에 직면한 동료가 있었고 최종 결과는 완전한 재설치였습니다. 그러나 이로 인해 문제가 해결될 수 있는지, 아니면 더 빨리 해결될 수 있는지 생각하게 되었습니다.

답변1

대부분의 경우 이 문제는 비교적 쉽게 해결할 수 있습니다. 다음 디렉터리를 사용하여 설치된 모든 패키지 목록을 생성할 수 있습니다 /lib.

dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,

이러한 패키지를 다시 설치하면 문제가 해결됩니다.

apt-get --reinstall $(dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,)

물론 이는 삭제한 디렉터리에 따라 다릅니다 apt-get. 작업을 수행하는 데 필요한 패키지는 apt-get수동으로 설치해야 하며, 그렇지 않으면 dpkg해당 패키지가 다른 컴퓨터에 추출되어 파일이 제자리에 복사될 수도 있습니다. , 어쨌든 나중에 거기에 있을 것이므로 모두 다시 설치될 것이므로 apt다른 문제는 발생하지 않습니다.

에 파일을 넣은 내 패키지 목록을 보면 /lib주요 패키지는 커널(모든 모듈이 로 이동 /lib/modules)과 libc. 두 가지 모두 시스템을 부팅하려면 재설치가 필요할 것이 거의 확실합니다. 한 가지 방법은 Debian 기반 라이브 시스템에서 설치하는 것입니다. 필요한 패키지를 다운로드하여 대상 시스템의 루트 디렉터리에 설치한 경우 여기에 설치할 옵션을 추가할 수 있습니다. 예 --root:dpkg

dpkg --root=/path/to/target/root -i package1.deb package2.deb ...

원하는 경우 이 --root옵션을 첫 번째 명령과 함께 사용할 수도 있습니다 . dpkg물론 충분한 인내심과 기술이 있어야 온라인 수리가 가능합니다. 해당 dpkg명령이 작동하지 않으면 언제든지 에서 직접 패키지 종속성을 찾고 의 /var/lib/dpkg/info파일을 통해 파일이 배치된 패키지를 검색해 볼 수 있습니다./lib.list/var/lib/dpkg/info

무엇을 얻을 수 있는지에 대한 아이디어를 제공하기 위해 실행 중인 Gentoo 시스템을 복원한 사람에 대한 블로그가 있습니다.모두패키지가 제거되었습니다. 흥미로운 내용이며, 사용된(또는 의견에서 제안된) 일부 기술이 이 상황에 적용될 수 있습니다.http://fakeguido.blogspot.co.uk/2010/08/rescuing-hosed-system-using-only-bash.html

답변2

/lib대부분의 경우 작업 디렉터리가 없으면 복구 작업을 수행해야 하는 많은 응용 프로그램이 더 이상 존재하지 않을 것이라고 생각합니다 . 총알을 물고 다시 설치하겠습니다.


어쨌든 시도해 보고 싶다면 RedHat 기반 배포판에 대해 수행하는 방법은 다음과 같습니다.

Redhat 기반 배포판(예: CentOS/Fedora/RHEL)의 경우 RPM을 사용하여 설치된 패키지의 특정 측면을 확인하고 수정할 수 있습니다.

모든 패키지 확인

% rpm -qVav
.........    /usr/bin/rdesktop
.........    /usr/share/doc/rdesktop-1.6.0
.........  d /usr/share/doc/rdesktop-1.6.0/AUTHORS
.........  d /usr/share/doc/rdesktop-1.6.0/COPYING
.........  d /usr/share/doc/rdesktop-1.6.0/ChangeLog
.........  d /usr/share/doc/rdesktop-1.6.0/HACKING
.........  d /usr/share/doc/rdesktop-1.6.0/README
.........  d /usr/share/doc/rdesktop-1.6.0/TODO
.........  d /usr/share/doc/rdesktop-1.6.0/ipv6.txt
.........  d /usr/share/doc/rdesktop-1.6.0/keymap-names.txt
.........  d /usr/share/doc/rdesktop-1.6.0/keymapping.txt
...
...

openssh 확인

% rpm -qVv openssh
.........    /etc/ssh
..?......  c /etc/ssh/moduli
.........    /usr/bin/ssh-keygen
.........    /usr/libexec/openssh
.........    /usr/libexec/openssh/ssh-keysign
.........    /usr/share/doc/openssh-5.5p1
.........  d /usr/share/doc/openssh-5.5p1/CREDITS
.........  d /usr/share/doc/openssh-5.5p1/ChangeLog
.........  d /usr/share/doc/openssh-5.5p1/INSTALL
.........  d /usr/share/doc/openssh-5.5p1/LICENCE
.........  d /usr/share/doc/openssh-5.5p1/OVERVIEW
...
...

권한 및 소유권 수정

% rpm --setperms {packagename}
% rpm --setugids {packagename}

노트:출력에 대한 자세한 내용은 참고 man rpm자료를 참조하세요 .-V|--verify

자세한 내용은 이 문서를 참조하세요.http://www.cyberciti.biz/tips/reset-rhel-centos-fedora-package-file-permission.html.

답변3

다른 사람들이 말했듯이, 이런 일이 나에게 발생하면 아마도 다시 설치할 것입니다. 그러나 복구를 시도하면 먼저 /lib라이브 설치의 디렉터리를 내 시스템에 복사합니다. 모두 /lib제거하면 처음에는 아무것도 작동하지 않으며 패키지 관리자도 작동하지 않으므로 이러한 단계가 필요할 수 있습니다. 그런 다음 패키지 관리자로 이동하여 /lib나열된 파일이 포함된 모든 패키지를 다시 설치합니다(해당 목록을 얻는 방법에 대한 자세한 내용은 Graeme의 답변 참조). 그런 다음 최종 정리로 /lib라이브 설치에서 복사된 파일 중 존재해서는 안 되는 파일을 모두 제거합니다. 즉, 설치된 패키지의 파일과 일치하지 않습니다.

답변4

속도면에서는 재설치가 더 빠를 것 같아요. 시스템 평화를 선택해야 하기 때문에 시간이 더 오래 걸릴 뿐만 아니라 나중에 이로 인해 발생할 수 있는 일부 문제를 디버깅하는 데 시간이 걸릴 수도 있습니다. 시스템을 확실히 안정적인 상태로 만들 수 있으므로 머신을 다시 빌드하는 것이 좋습니다.

관련 정보