누락되거나 손상된 파일이있는 패키지 재설치


17

불완전한 종료와 화려한 fsck에 따라 많은 파일이 사라졌습니다. 'rpm -Va'의 출력은 수백 줄입니다 (대부분 파일이 누락되었지만 일부 체크섬 및 기타 불일치). 파일이 없거나 손상된 패키지를 쉽게 다시 설치할 수 있습니까?

해당 OS는 Fedora 22입니다.


3
확실히 가능하지만 출력을 파싱하고 각 파일에 대해 해당 파일을 포함하고 아마도 시간이 걸리는 패키지를 쿼리하는 것은 지루합니다. 왜 모든 패키지를 다시 설치하지 않습니까? yum reinstall $(rpm -qa --qf="%{N}-%{V}\n" | sort)
doktor5000


실제로 모든 것을 다시 설치하게되었습니다. 문제는 dnf에 대해 keep-cache를 활성화하는 것을 잊어
버려서

답변:


16

참조 및 완전성을 위해 처음에 요청한 것을 달성 할 수있는 하나의 명령은 다음과 같습니다.

rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u

다음은 다양한 부분에 대한 간단한 설명입니다.

rpm -Va 2>&1

rpm 데이터베이스에 현재 설치되어 있거나 나열된 모든 패키지에 대해 완전한 검증을 실행합니다. 또한 내 상자에서 프리 링크가 활성화되어 발생하는 일부 오류가 오류로보고되지만 stdout에서 원할 때 stderr을 stdout으로 리디렉션합니다.
주의 : 모든 파일, 권한 및 소유자 / 그룹을 확인할 수 있으려면 루트로 실행해야합니다.

grep -vE '^$|prelink:'

emtpy 행 및 사전 링크 오류 표시를 억제합니다 (예 : 오류
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1).

sed 's|.* /|/|')

rpm -Va파일 이름 만 표시 하도록 출력을 필터링합니다.

rpm -qf $()

패키지에 포함 된 획득 한 모든 파일 이름을 쿼리하고 패키지 이름과 버전을 출력합니다.

| sort -u

중복 된 패키지 이름 / 버전 조합을 억제합니다.

모두 확인에 실패한 패키지 목록을 받게됩니다.

rpm -Va패키지와의 종속성을 검사하기 때문에 관련없는 일부 문제가 여전히 표시 될 수 있습니다 --nodeps.


2

최근에 openSUSE 13.2에서 누락 된 파일과 비슷한 문제가 발생하여 다음과 같이 수정했습니다.

rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime\
| awk -e '($1=="missing") && ($2=="d") {system("rpm -qf "$3);}; ($1=="missing") && ($2!="d") && ($2!="c") {system("rpm -qf "$2);}'\
| sort -u | xargs zypper in -f

rpm 옵션과 awk 호출은 손상이 발생하지 않았기 때문에 시간을 절약하기위한 것입니다.


1
파일 손상이없는 경우 설치된 모든 rpm 패키지 만 종속성 문제를 검사 --nofiles하는 것과 동일 하게 추가 할 수 yum check dependencies있습니다. --nofiles비 SSD 설치의 경우 많은 시간을 절약 할 수 있지만 누락 된 파일에 대한 검사도 생략합니다. ... 완전성을 위해. 그리고 당신은 영어 문자열을 grep으로, 당신이 가진 접두사로 할 수 있습니다 염두에 두시기 바랍니다 LC_ALL=C)
doktor5000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.