팩맨: 오류: 데이터베이스 항목이 중복되었습니다.

팩맨: 오류: 데이터베이스 항목이 중복되었습니다.

Arch Linux에서 rsync를 사용하여 시스템을 백업하고 다시 복원했지만 내 접근 방식(Arch Wiki에서 얻었지만 잘못된 것임에 틀림없나요?)이 Pacman이 삭제한 이전 파일을 보존하는 것 같습니다. duplicated database entry 업그레이드 시스템을 사용하려고 하면 오류가 발생합니다 pacman -Syu. 어떻게 해야 합니까?

답변1

링크에 있는 정보를 꼭 읽어보시길 권합니다여기그리고여기.

기본적으로 중복 항목을 제거해야 합니다(수동으로 또는 스크립트를 사용하여) /var/lib/pacman/local/.

답변2

방금이 일을 겪었습니다. 우리의 rsync --delete선택이 필요합니다. Arch 위키는 --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

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

관련 정보