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
내용이 많아서 내용을 추가했습니다.배쉬 스크립트저장소~처럼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