Я пытаюсь запустить функцию «проверки» программы резервного копирования «restic» в одном из созданных ею репозиториев резервных копий. Что бы я ни делал, он вылетает из-за фатальной проблемы «уже заблокирован». Вот соответствующий ввод-вывод командной строки:

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 

Что я могу сделать, чтобы решить эту проблему?

2
Jeff Schaller 29 Окт 2019 в 15:21

1 ответ

repository is already locked by PID 30546 on ANB by tomc

Сначала вы должны использовать ps -fp 30546, чтобы увидеть, существует ли еще процесс, который заблокировал репозиторий. Поскольку согласно сообщению об ошибке блокировка уже устарела на 509 часов, процесс может быть зависшим или это может быть устаревший файл блокировки, если процесс не существует или кажется совершенно не связанным.

Если процесс с PID 30546 кажется связанным, вы можете использовать lsof -p 30546, чтобы увидеть, какие файлы он открыл. Если повезет, один из этих файлов может быть файлом журнала, который может предоставить больше информации о состоянии процесса. Если прерывание кажется безопасным, вы можете использовать kill 30546, чтобы попытаться остановить его относительно красиво, дав ему возможность очистить свой файл блокировки при выходе.

Если процесс отказывается завершаться с помощью команды kill 30546, вы можете использовать kill -9 30546, чтобы принудительно остановить его, но в этом случае вам определенно придется предпринять дальнейшие шаги для снятия блокировки.

Согласно проблеме №1450 на странице GitHub restic, после убийства зависший процесс, вы можете использовать эту команду, чтобы очистить устаревшую блокировку:

./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
telcoM 29 Окт 2019 в 13:59
Вариант работал: restic процесс и, таким образом, не был простым «устаревшим замком». Спасибо за ваш исключительно четкий и подробный ответ. Это намного превзошло мои ожидания.
 – 
Tom Cloyd
30 Окт 2019 в 09:05