在 Arch Linux 上,我已经使用 rsync 备份了系统并再次恢复了它,但似乎我的做法(我确实从 Arch Wiki 获得,但一定是错误的?)保留了 Pacman 删除的旧文件。duplicated database entry
当我尝试使用 升级系统时,这会导致错误pacman -Syu
。我应该怎么办?
答案1
答案2
答案3
我尝试了@Schooled 和@maulinglawns 的答案,但两者基本上都堵塞了我的系统。
原因是source
正在运行linux-5.4.71
和dest
正在运行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