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