비정상적인 종료와 다채로운 fsck 후에 많은 파일이 손실되었습니다. "rpm -Va"의 출력은 수백 줄입니다(대부분 파일이 누락되어 있지만 일부 체크섬 및 기타 불일치도 있음). 누락되거나 손상된 파일이 있는 패키지를 쉽게 다시 설치할 수 있는 방법이 있습니까?
문제의 운영체제는 Fedora 22입니다.
답변1
참조 및 완전성을 위해 원래 요청한 것을 달성하는 명령은 다음과 같습니다(빠르게 함께 작업하지만 작동합니다).
rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u
각 섹션에 대한 간략한 설명은 다음과 같습니다.
rpm -Va 2>&1
현재 rpm 데이터베이스에 설치/나열된 모든 패키지에 대해 완전한 검증이 실행됩니다. 또한 내 상자에서는 사전 링크 활성화로 인해 발생한 일부 오류가 오류로 보고되지만 stdout에 표시되기를 원하기 때문에 stderr를 stdout으로 리디렉션합니다.
주목:모든 파일, 권한 및 소유자/그룹을 확인하려면 루트로 실행해야 합니다.
grep -vE '^$|prelink:'
빈 줄 및 사전 링크 오류를 억제합니다(이러한 오류의 예
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 호출이 시간을 절약하도록 설계되었습니다.
답변3
CentOS 7에서 동일한 문제가 있었고 @auxsvr의 답변에서 일부 사용자 정의로 문제를 해결했습니다.
rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime |egrep 'manque|missing' |awk '$2=="d"{print "rpm -qf "$3}' |sh |sort -u |xargs yum -y reinstall