Pacman:错误:重复的数据库条目

Pacman:错误:重复的数据库条目

在 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,仅相隔一天发布。

运行时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

由于内容比较多,所以我把它添加到我的Bash脚本存储库作为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

相关内容