異常なシャットダウンとカラフルなfsckの後、大量のファイルが失われました。「rpm -Va」の出力は数百行の長さです(主にファイルが欠落していますが、チェックサムやその他の不一致もあります)。ファイルが見つからないか破損しているパッケージを再インストールする簡単な方法はありますか?
問題のOSはFedora 22です。
異常なシャットダウンとカラフルなfsckの後、大量のファイルが失われました。「rpm -Va」の出力は数百行の長さです(主にファイルが欠落していますが、チェックサムやその他の不一致もあります)。ファイルが見つからないか破損しているパッケージを再インストールする簡単な方法はありますか?
問題のOSはFedora 22です。
回答:
参照と完全性のために、最初に要求されたことを達成できるコマンドの1つは次のようなものです(すばやく調整されていますが、機能しています)
rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u
さまざまな部分の簡単な説明を次に示します。
rpm -Va 2>&1
rpmデータベースに現在インストール/リストされているすべてのパッケージで完全な検証を実行します。また、stderrをstdoutにリダイレクトします。ここで、私のボックスでは、prelinkが有効になっていることによって引き起こされるいくつかのエラーがエラーとして報告されますが、stdoutでそれらが必要です。
重要:すべてのファイル、許可、所有者/グループを確認できるようにするには、rootとして実行する必要があります。
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
。
最近、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の呼び出しは、破損が発生していないため、私の場合は時間を節約するためのものです。
--nofiles
したがってyum check dependencies
、インストールされているすべてのrpmパッケージの依存関係の問題のみをチェックするのと同じように実行できます。--nofiles
非SSDインストールの時間を大幅に節約できますが、欠落しているファイルのチェックも省略します。...完全を期すためです。また、英語の文字列をgrepする場合は、接頭辞としてLC_ALL=C
;)を付けてください。
yum reinstall $(rpm -qa --qf="%{N}-%{V}\n" | sort)