Arch Linux를 실행하는 컴퓨터가 있는데 부팅하는 데 문제가 있습니다. 블록 장치에서 pvscan을 기다리며 90초 동안 정지한 후 포기합니다. (실제로 pvscan 프로세스는 그 이후의 lvm 명령과 마찬가지로 여전히 중단되어 있습니다.) 때로는 잘 작동합니다.
좀 더 조사한 결과, 시작 시 중단되는 lvmetad(8)가 이 중단의 원인인 것처럼 보입니다.
lvmetad[360]: Cannot lock lockfile [/run/lvmetad.pid], error was [Resource temporarily unavailable]
부팅한 후 종료하고 다시 시작하면 정지된 pvscan 프로세스가 잠금 해제되고 작업이 완료되며 모든 것이 정상으로 돌아갑니다(lvm 명령이 다시 작동하는 등).
로그에서 이를 확인할 수 있습니다.파스퇴르 빈
lvmetad의 자세한 정도를 낮추려고 했지만 오류만 발생했습니다.
때때로부팅하는 데 평소보다 시간이 조금 더 걸리고(루트 파티션을 기다리는 중) lvmetad는 정상적으로 부팅됩니다(그러나 실제로 관련이 있는지는 잘 모르겠습니다).
이 오류를 방지하는 방법을 알고 있나요?
내가 모은추가 정보:
- fcntl()이 EAGAIN으로 실패할 때 "파일을 기록할 수 없습니다" 오류 발생(잠길 파일이 이미 공유되었거나 다른 프로세스에 의해 독점적으로 잠겨 있음)
- 매우 작은 pid(로그에 표시된 실패한 프로세스보다 훨씬 작음)로 시스템에서 실행 중인 lvmetad가 있습니다.
- lvm2-lvmetad.service에 의해 생성된 lvmetad 프로세스는 -f로 실행되므로 실행 중인 프로세스가 아닙니다.
- 첫 번째는 두 번째 것보다 3초 일찍 시작됩니다(시스템화 전).
initrd의 lvm2 구성 요소에 대한 정리 후크는 초기 lvmetad를 종료해야 하지만 어떤 이유로 작동하지 않습니다.
run_cleanuphook() {
kill $(cat /run/lvmetad.pid)
}
시작 후 프로세스를 종료해도 작동하지 않습니다.
디버그 추적을 수행했는데(세 번째 링크를 게시할 수 없습니다. 두 번째 붙여넣기 끝에 넣었습니다.) 메인 스레드가 다른 스레드가 종료되기를 기다리고 있고 FD 6에서 읽는 동안 client_thread가 멈춘 것 같습니다. (/run/lvm/lvmetad.socket)