パックマン:エラー:データベースエントリが重複しています。

パックマン:エラー:データベースエントリが重複しています。

Arch Linuxでは、rsyncを使用してシステムをバックアップして復元しましたが、私のアプローチ(Arch Wikiから入手しましたが、間違っていることは間違いありませんか?)がPacmanによって削除された古いファイルを保存しているようです。duplicated database entry アップグレードシステムを使用しようとするとエラーが発生しますpacman -Syu。どうすればいいですか?

答え1

リンクにある情報を必ずお読みください。ここそしてここ

デフォルトでは、重複エントリを削除する必要があります(手動でまたはスクリプトを使用して)/var/lib/pacman/local/

答え2

ちょうどこれが起こった。私たちのrsync --delete選択が必要です。 Arch Wikiは、--deleteソースシステムの内容を変更するオプションについて間違っています。ファイルが削除されたかソースにない場合は、ターゲットのファイルのみが削除されます。また、定期的にバックアップを実行すると、不要なファイルの蓄積を防ぐことができます。

ソース1

ソース2

答え3

@Schooledと@maulinglawnsの答えを試しましたが、どちらも基本的に私のシステムをブロックしました。

その理由は、sourceランニングlinux-5.4.71destランニングがlinux-5.4.72わずか1日間隔でリリースされたためです。

実行すると、rsync --deleteすべてのカーネルモジュールが削除され、dest/lib/5.4.72/デフォルトでシステムがレンガになり、重要なファイルシステムがマウントされないなどの問題が発生します。

スナップショットから復元した後btrfs(神に感謝します!)、次の解決策が見つかりました。

# From https://github.com/hopeseekr/BashScripts/blob/master/arch-pacman-dupe-cleaner
# Copyright © 2020 Theodore R. Smith <[email protected]>
# GPG: 4BF8 2613 1C34 87AC D28F  2AD8 EB24 A91D D612 5690
# License: Creative Commons Attribution v4.0 International
# @see https://unix.stackexchange.com/a/615578/15780

# 0. Login as root.
sudo -s

# 1. Remove the latest dupes from your Pacman DB.
pacman -Syu 2>&1 | grep "duplicated database entry" > /tmp/dupes
for latest in $(for dupe in $(cat /tmp/dupes | awk '{print $5}'); do
    ls /var/lib/pacman/local/$dupe* -d | tail -n1; done); do
    rm -rvf $latest;
done
rm /tmp/dupes

# 2. Remove system of dupe files.
pacman -Syu 2>&1 > /tmp/update-dupes
cat /tmp/update-dupes | grep "exists in file system" | awk '{print $2}' | xargs rm -vf

# 3. Reinstall everything (this will restore anything deleted in #2.).
pacman -Syu

内容が多いので内容を追加しました。バッシュスクリプトリポジトリ〜のようにarch-pacman-dupe-cleaner

答え4

このコマンドは、ディレクトリを/var/lib/pacman/localに変更した後に有効でした。

ls | sort | awk -v re='(.*)-[^-]*-[^-]*$' 'match($0, re, a) { if (!(a[1] in p)){p[a[1]]} else {print} }' | xargs sudo rm -rf

関連情報