생성된 백업 저장소 중 하나에서 백업 프로그램 "restic"의 "검사" 기능을 실행하려고 합니다. 내가 무엇을 하든 치명적인 "잠김" 문제로 인해 충돌이 발생합니다. 관련 명령줄 I/O는 다음과 같습니다.
tomc@ANB:~/programs/restic-backup$ ./restic check -r
/media/tomc/usbhd4-p2/_restic-bkup/dropbox using temporary cache in /tmp/restic-check-cache-405001323
enter password for repository:
repository fd5c0b03 opened successfully, password is correct
created new cache in /tmp/restic-check-cache-405001323
create exclusive lock for repository
Fatal: unable to create lock in backend: repository is already locked by PID 30546 on ANB by tomc (UID 1000, GID 1000)
lock was created at 2019-10-07 14:49:41 (509h0m19.239359465s ago) storage ID 0fe63838
이 문제를 해결하려면 어떻게 해야 합니까?
답변1
repository is already locked by PID 30546 on ANB by tomc
ps -fp 30546
먼저 저장소를 잠근 프로세스가 여전히 존재하는지 확인 해야 합니다 . 오류 메시지에 따르면 잠금이 이미 509h이므로 프로세스가 중단될 수 있습니다. 또는 프로세스가 존재하지 않거나 전혀 관련이 없어 보이는 경우 오래된 잠금 파일일 수 있습니다.
PID 30546이 있는 프로세스가 관련성이 있는 것으로 보이면 이를 사용하여 lsof -p 30546
어떤 파일이 열려 있는지 확인할 수 있습니다. 다행히 파일 중 하나는 프로세스 상태에 대한 추가 정보를 제공할 수 있는 로그 파일일 수 있습니다. 중단이 안전해 보이면 kill 30546
상대적으로 원활하게 중단하여 종료 시 잠금 파일을 정리할 수 있는 기회를 제공할 수 있습니다.
프로세스가 명령을 사용하여 종료를 거부하는 경우 명령 을 사용하여 프로세스를 강제로 중지 kill 30546
할 수 있지만 kill -9 30546
이 경우 잠금을 해제하려면 추가 단계를 수행해야 합니다.
~에 따르면GitHub 페이지의 이슈 #1450restic
, 정지된 프로세스를 종료한 후 이 명령을 사용하여 오래된 잠금을 지울 수 있습니다.
./restic unlock -r /media/tomc/usbhd4-p2/_restic-bkup/dropbox
정지된 프로세스가 일부 백업 작업을 수행하는 경우 다음 명령을 실행해야 할 수도 있습니다.
./restic check -r /media/tomc/usbhd4-p2/_restic-bkup/dropbox
# if the check returns "not referenced in any index" errors, then do this:
./restic rebuild-index -r /media/tomc/usbhd4-p2/_restic-bkup/dropbox
./restic check -r /media/tomc/usbhd4-p2/_restic-bkup/dropbox
# if there is still "not referenced in any index" errors, remove incomplete packs:
./restic prune -r /media/tomc/usbhd4-p2/_restic-bkup/dropbox
./restic check -r /media/tomc/usbhd4-p2/_restic-bkup/dropbox
그 후에는 검사가 성공적으로 통과되어야 합니다.
답변2
이 답변은 Linux에만 해당되지만 개념은 모든 POSIX 시스템에 적용됩니다.
먼저 실제로 어떤 프로세스가 실행되는지 파악하세요.유지하다잠금, 일반적으로 이것은 프로세스입니다.아니요자물쇠로 차단되었습니다. 파일을 열어두는 프로세스가 나열됩니다.
lsof /path/to/lockfile
그런 다음 파일 설명자를 가져와 잠금을 해제합니다.
# ls -l /proc/<pid>/fd
[... make a note of the file descriptor you care about and substitute <fd> below]
# gdb -p <pid>
gdb> call flock(<fd>, 8)
위에서 8
부터LOCK_UN
file.h
그래도 작동하지 않으면 flock
파일 설명자를 닫아 볼 수도 있지만, 작성 방법에 따라 부작용이 있을 수 있고 프로그램이 중단될 수도 있습니다.
gdb> call close(<fd>)
완료되면 gdb
프로그램을 계속 진행합니다 detach
.
gdb> detach