/var/lib/dpkg/status를 다시 만드는 방법은 무엇입니까?

/var/lib/dpkg/status를 다시 만드는 방법은 무엇입니까?

다음과 같은 일부 파일을 삭제했습니다 /var/lib/dpkg/.

/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*

나는 데비안이 설치된 패키지에 대한 일부 정보를 저장하기 위해 이 파일을 사용한다는 것을 알고 있습니다. 이제 이 작업을 수행하면 apt-get update다음 오류가 발생합니다.

Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open 
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.

내가 아는 한FHS, 찾은 파일은 /var시스템에 중요하지 않아야 합니다. 평가자 임시 파일, 로그, 캐시 등이어야 합니다.

그럼 삭제된 파일을 다시 만들 수 있는 방법은 없을까요?

답변1

당신이 보면파일 시스템 계층 표준에 명시된 /var의 목적, 그것은 말한다 :

/var가변 데이터 파일을 포함합니다. 여기에는 스풀 디렉터리 및 파일, 관리 및 로깅 데이터, 임시 및 임시 파일이 포함됩니다.

"일시적 및 임시" 파일은 단지하나포함된 내용. 또한 "스풀 디렉터리 및 파일"과 "관리 및 로깅 데이터"도 포함되어 있습니다. 중요한 "관리 데이터"를 삭제했습니다.

계속해서 /var그것이 존재하는 이유를 설명합니다.

/var/usr읽기 전용 으로 마운트할 수 있도록 여기에 지정됩니다 . /usr설치 및 소프트웨어 유지 관리와 달리 시스템 작동 중에 작성된 모든 내용은 /var.

핵심은 /var다음과 같습니다 /usr(소프트웨어가 추가/제거/업데이트될 때만 변경됨).

다양한 하위 디렉터리는 다른 섹션에서 설명됩니다 /var. 예를 들어, /var/lib(한 번 삭제한 파일이 존재했던 경우) "프로그램이 실행되는 동안 수정되고 해당되는 데이터"로 정의된 "응용 프로그램 또는 시스템과 관련된 상태 정보"가 들어 있습니다. 특정 기계와 관련됩니다." 호스트 관련".

진짜목적을 모른 채 파일을 삭제해서는 안 됩니다. 삭제하신 파일은 백업해 두지 않는 이상 백업 /home등을 하시고 다시 설치하시는 수밖에 없을 것 같습니다 /etc. 이렇게 하지 않으면 해당 서비스 dpkg(및 APT 등) 를 사용할 수 없습니다 . 그렇지 않으면 시스템이 계속 작동해야 합니다.

답변2

찾은 파일은 /var시스템에 매우 중요합니다. 예를 들어, 사용자의 이메일을 포함 /var/mail하거나 /var/spool/mail이웃의 사서함에 불을 지르는 것보다 더 이상 삭제하지 않을 것입니다. 특정 하위 디렉터리의 파일에만 /var다소 임시적인 파일이 포함됩니다. 의 로그 파일 /var/log, 에서 일반적으로 다시 생성될 수 있는 캐시 /var/cache, 의 임시 파일(사용 중에 삭제하면 안 됩니다!) /var/tmp.

입력한 데이터는 /var/lib중요할 수 있습니다. 예를 들어, MySQL은 /var/lib/mysql기본적으로 데이터베이스를 저장하도록 구성되는 경우가 많습니다. 이를 삭제하면 데이터베이스가 지워집니다. Dpkg에는 /var/lib자체 데이터베이스도 있습니다 /var/lib/dpkg/status.

/var/lib/dpkg/status설치된 패키지에 대한 정보가 포함되어 있습니다. 삭제한 경우 백업에서 복원해야 합니다. 백업이 완전히 최신 상태가 아닌 경우 /var/log/apt최근 패키지 작업 로그를 확인하세요 /var/log/dpkg.log. dpkg이 작업을 수행하려면 먼저 이 파일을 만들어야 합니다 .

/var/lib/dpkg/available인터넷에서 다운로드한 데이터로 만들어졌습니다. apt-get update재건되어야합니다.

/var/lib/dpkg/infoDebian 패키지에 포함된 파일이 포함되어 있습니다. 패키지를 다시 설치하면 이러한 파일을 복원할 수 있습니다. 물론 설치된 패키지 목록이 필요합니다. 이미 복원한 경우 /var/lib/dpkg/status거기에서 패키지 목록을 추출할 수 있습니다.

apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p')

파일을 잃어버린 경우 /var/lib/dpkg/status빈 파일을 만든 다음 apt-get install --reinstall패키지 목록에서 실행하여 다시 만들 수 있습니다. 패키지 목록을 저장할 수 있는 한 곳은 /var/lib/apt/extended_states적어도 APT를 사용하여 패키지를 설치한 경우(직접 설치가 아닌 ) 위의 int 명령 dpkg대신 해당 파일을 사용하는 것 입니다. 이 항목도 제거한 경우 대부분의 패키지가 에 항목을 생성하므로 /var/lib/dpkg/status대략적인 패키지 목록 다시 작성을 사용할 수 있습니다 . 일부 예외가 있을 수 있습니다.$(cd /usr/share/doc && ls)/usr/share/doc

이 시스템의 패키지 관리에 대한 도움을 요청하지 마십시오. 삭제된 시스템 중요 파일을 복구하는 것은 정확한 과학이 아닙니다. 백업에서 복원할 수 없는 경우 가능한 한 빨리 깨끗한 새 시스템을 설치해야 합니다.

답변3

"다시 만들기" 명령을 실행할 수 없으며 /var/lib/dpkg/status파일이 마술처럼 나타납니다. 아니요, 파일 백업을 사용하고 /var/lib디렉터리 내용을 절대 삭제하지 않는 방법을 배워야 합니다.

sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status

그러면 전날의 패키지 상태가 표시됩니다. 그것이 다른 것을 깨뜨리지 않도록 기도하기 시작하십시오.

답변4

누군가가 "/var/lib/dpkg"를 누킹하게 되면:

sudo mkdir -p /var/lib/dpkg/updates
sudo mkdir -p /var/lib/dpkg/info
sudo mkdir -p /var/lib/dpkg/alternatives

sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/statoverride
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo cp /var/backups/dpkg.arch.0 /var/lib/dpkg/arch

sudo dpkg --clear-avail
sudo apt update
sudo apt upgrade # If needed.

관련 정보