방금“/ bin”을 삭제했습니다. 복구하는 가장 좋은 방법은 무엇입니까?


10

방금 뛰었습니다 (의도하지 않음) rm -rf /bin.

컴퓨터를 부팅하고 Finnix를 사용하여 복구하려고합니다. 드라이브를 성공적으로 마운트했으며 전체 /bin폴더가 삭제 되었음을 확인했습니다 .

OS를 다시 설치하지 않고 이로부터 복구 할 수 있습니까?

동일한 OS 및 아키텍처 (Ubuntu Server 11.10 alpha 릴리스, x86)로 VM을 설정하고 서버에 설치 한 모든 패키지를 설치 한 다음 /bin폴더를 복사 할 수 있다고 생각 합니다.

이것이 효과가 있습니까? 처음부터 다시 시작하는 것이 좋습니까?

답변:


15

일반적으로 다시 설치하는 것이 좋습니다 (백업에서 가져야 함). 그러나 나는 해킹을 느끼고 있으므로 다른 방법이 있습니다 (시스템이 아래에 마운트되어 있다고 가정 /target).

  1. 다음에 파일이있는 설치된 모든 패키지 목록을 가져옵니다 /bin.

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (데비안 스퀴즈 시스템에서 총 34 개의 패키지로 구성되어 있으며 모두 핵심입니다)

  2. 각 패키지를 다운로드하십시오 (이 비트를 스크립팅 할 필요가 없으므로 packages.ubuntu.com을 방문하여 아래의 어딘가에 다운로드하십시오 /target). 운이 좋으면 일부 패키지가 여전히에 떠있을 수 있습니다 /target/var/cache/apt/archives.

  3. 각 패키지에 대해을 실행하십시오 /target/usr/bin/dpkg -x <package> /target. 나는 요즘 dpkg모두 자급 자족 할 것이라 확신 하며, /bin그 자체 로 어떤 것도 부르지 말아야한다 .

일단 시스템을 다시 설치 한 후에 apt-get --reinstall install <all the packages from step 1>는 패키지 버전 (Sysadmin Cat이 프로덕션 시스템에서 아니오라고하는 시험판을 실행하기 때문에) 을 확인하고 실행해야 합니다. 방금 추출한 내용은 이전에 시스템에 있던 것과 다를 수 있으며 시스템이 정확히 무엇을 알고 있는지 확인하고 싶을 것입니다.


좋은 대답이지만 뭔가 빠졌습니까? 하지 않을까요 dpkg-query -S /bin당신보다 동일 할 grep .. | sed연을? 한 줄에 하나의 패키지 이름을 나열하기 위해 목록을 정리 해야하는 경우 dpkg-query -S /bin | sed 's/\,\ /\n/g'작동합니다 (마지막 줄에 여분의 : / bin이 있더라도).
Janne Pikkarainen

1
그렇습니다.-무엇이든 필요한 것이 무엇이든 필요한 경우를 대비하여 대상 시스템에서 실행되는 물건의 양을 최소화하려고 노력 /bin했으며, 구조 시스템에서 데비안 고유의 것을 사용하여 미래의 파인더에게 가능한 한 일반적입니다.
울림

이 파일은 필수 시스템 유틸리티의 목록 인 것 같습니다. 파일이 포함 된 다른 패키지도 /bin없습니까? 시스템의 모든 패키지 또는 목록의 결과로 생성 된 패키지 만 모두 다시 설치해야합니까? (또한 : 감사합니다, 당신을 사랑합니다!)
Tom Marthenal

1
일반적으로 필수 패키지 만 파일을 포함합니다 /bin. 대부분의 패키지는 모든 데이터를에 저장해야합니다 /usr. 내 시스템에서는 필수가 아닌 두 개의 패키지 (예 zsh:) 만 /bin"목록 에 있음 "목록에 있습니다. 공감대는 사랑을 보여주는 좋은 방법입니다 ...
womble

1
나는 당신의 지시를 따르고 완벽하게 작동했습니다 – 서버가 백업되어 실행 중입니다. 도움을 주셔서 감사합니다!
Tom Marthenal

5

전략이 효과가 있지만 (bin 디렉토리를 다시 복사하면 시스템의 모든 패키지를 apt-get 재설치하면 더 많은 기회가 생길 수 있지만) 향후에 문제가 발생할 수 있습니다. 불안정한 서버.

그런 일이 발생하면 매일 백업에서 다시 설치하고 복원합니다. 당신은 매일 백업-재난 복구 계획을 가지고 있습니까?

재해 복구 계획이없는 경우 보존하려는 모든 구성 파일과 데이터를 백업하고 다시 설치하는 것이 좋습니다. 그렇게하면 안정적인 서버로 다시 끝날 것입니다.


1
/ bin 폴더를 복구하는 방법을 여기에 게시 한 이후에는 백업이 없습니다.
Goez

불행히도 매일 백업이 없습니다. 당시 내가 작성한 bash 스크립트는 아이러니하게도 매일 백업 스크립트였습니다. 조언을 주셔서 감사합니다. 다시 설치할 것 같습니다.
Tom Marthenal

다시 설치할 필요가 없습니다. 내 대답을 참조하십시오.
womble

파일 시스템 스냅 샷은 이와 같은 것을 복구하는 데 매우 유용합니다. 불행히도 ext2 / 3 / 4 파일 시스템은이를 구현하지 않으며 LVM으로 파일 시스템을 수행하면 성능이 크게 저하됩니다. 실수로 FreeBSD 상자에서 / bin을 삭제하면 이전 스냅 샷을 마운트하고 파일을 라이브 버전의 파일 시스템으로 다시 복사하면됩니다. OS X에도이 기능이 있습니다 ( "타임머신"이라고 함).
스냅

3

VM을 만든 다음 해당 내용을 /bin손상된 컴퓨터에 복사하려고 합니다. 그것은 당신을 시작하고 실행해야합니다. 그런 다음 실행

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

시스템에 있던 모든 패키지를 다시 설치해야합니다.


1

머신에 액세스 할 수있는 가장 쉬운 방법은 파일 시스템을 마운트하고 모든 데이터를 백업하는 것입니다 (예방책과 동일).

그런 다음 일반 설치처럼 우분투를 다시 설치할 수 있습니다. 원칙적으로 모든 데이터 (home dir 등 및 var)가 여전히 있어야합니다.

/ bin이 다시 채워지도록 모든 패키지를 다시 설치하는 방법이 있지만 상당히 복잡합니다.


0

파일이 사라졌습니다. 파일 "삭제 취소"를 시도 할 수는 있지만 권장하지는 않습니다.

참고 : 우분투를 실행하지 않으며 잠시 동안 데비안 배포판을 사용하지 않았습니다. 그러나 나는 비슷한 시나리오를 따라 과거에 다양한 배포 복구를 수행했습니다.

최선의 행동 과정 :

  • liveCD에서 부팅
  • (말 라이브 CD 시스템 somplace 마운트 사용 /mnt/mint)
  • dpkg를 사용하여 설치된 모든 패키지를 쿼리 합니다.
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • 다음을 사용하여 apt-get을 사용하여 모든 패키지를 / mnt / mint 대상에 설치하십시오.
# apt-get -o RootDir = / mnt / mint .... 
  • (대안 # 1) 당신은 deboostrap해야 할 수도 있습니다 /mnt/mint-확실하지
  • (대안 # 2) /binliveCD의 내용을 복사 할 수는 /mnt/mint/bin있지만 민트 용 liveCD가 busybox를 사용하여 문제를 복잡하게 할 수 있는지 모르겠습니다.이 경우 대안 # 1이 더 안전 해 보입니다.

일반적으로 이것은 당신이 가진 모든 것의 "brute-reinstall"에 의해 파일을 반환해야합니다. / bin에서 바이너리를 삭제 한 모든 패키지에 대해 좀 더 "영리한"트릭을 수행하고 쿼리 할 수 ​​있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.