VPN 시작 시 커널 Oops: 보관할 가치가 있는 증거
VPN 시작 시의 크래시에는 일치하는 커널 빌드와 첫 번째 트레이스가 필요하지, 마지막 줄의 스크린샷이 아닙니다. 다시 재부팅하기 전에 무엇을 저장할지 결정하세요.
VPN 클라이언트 시작은 원인이 아니라 편리한 시각 표시일 뿐이며, 그 구분이 다음에 무슨 일이 일어날지를 결정합니다. 그 순간 근처에서 커널 Oops가 발생하면, 선택은 쓸 만한 오류 보고서를 모으는 것과 운영 장비에서 같은 크래시를 다섯 번 더 유발하는 것 사이입니다. 재부팅 전에 정확한 커널 빌드, 첫 번째 오류 트레이스, taint 상태, 그리고 같은 분에 바뀐 나머지 모든 것에 대한 짧은 설명이라는 네 가지를 저장하세요. 나머지는 해석이며, 해석은 증거가 안전한 곳에 놓일 때까지 기다릴 수 있습니다.
마지막 줄이 아니라 첫 번째 오류를 잡으세요
로그의 첫 번째 Oops는 이후의 모든 오류가 이미 건강하지 않은 커널의 부수적 피해일 수 있기 때문에 중요합니다. 헤더에는 오류를 일으킨 명령과 코드 경로를 식별하는 레지스터 상태가 들어 있으므로 호출 트레이스와 함께 헤더를 복사하세요. 마지막 줄에서 시작하는 보고서는 일주일 뒤에 읽는 사람에게 거의 가치가 없습니다.
장비가 이미 재부팅되었다면 그때 영구 저장소가 켜져 있었을 경우 이전 부팅의 커널 버퍼가 흔히 저널에 남아 있습니다. 두 번째 재현은 필요한 것을 덮어쓸 수 있으므로 작업 부하를 다시 만드는 대신 저장된 파일에서 읽으세요. 장비가 재부팅 사이에 저널을 유지할 수 없는 곳에서는 시리얼 콘솔이나 netconsole만이 오류를 드러낼 수 있는 유일한 방법입니다.
어떤 심볼을 읽기 전에 빌드를 고정하세요
함수 이름과 오프셋은 그것을 만든 바이너리에 대해서만 의미가 있으므로 커널 릴리스 문자열과 배포판 빌드 식별자를 함께 기록하세요. 다른 빌드의 심볼 파일은 완전한 확신을 가지고 잘못된 줄을 가리키므로 심볼이 전혀 없는 것보다 나쁩니다. 배포판은 많은 것을 백포트하므로 업스트림 번호만이 아니라 커널 패키지 버전을 보관하세요.
트리 밖 모듈은 taint된 커널이 유지관리자가 내릴 수 있는 결론을 제한하기 때문에 기록에서 자기 줄을 가질 자격이 있습니다. 모듈 목록에서 추론하지 말고 taint 값을 읽으세요.
영이 아닌 taint는 고발이 아니며 보고서를 무가치하게 만들지 않습니다. 이는 오류 당시 어떤 구성 요소가 로드되었는지 독자에게 알려 주며, 일부 플래그는 판단이 아니라 정책에 따라 보고서의 우선순위를 낮춥니다. 값과 모듈 이름, 그리고 같은 하드웨어와 부하가 그것들 없이 커널을 실행한 적이 있는지 기록하세요. 바로 그 마지막 비교가 새로운 회귀와 오래된 버그를 구분합니다.
방아쇠를 결함과 분리하세요
터널 시작은 보통 네트워크 드라이버, 큐 규율, 오프로드 기능 또는 전원 상태 같은 이미 존재하던 경로를 사용합니다. 방아쇠는 오류가 언제 나타나는지를 설명할 뿐 어느 코드가 잘못되었는지는 말해 주지 않으며, 방아쇠를 원인으로 취급하면 아무것도 고치지 못하는 구성 변경의 연쇄로 이어집니다.
작동하던 이전 이미지는 증거이지 증명이 아닙니다. 비교할 때 부팅마다 구성 요소 하나만 바꾸고, 결과는 장비보다 오래 남는 곳에 보관하세요.
유지관리자가 실제로 쓸 수 있는 것을 확인하세요
보내기 전에 낯선 사람이 읽는 것처럼 보고서를 읽어 보세요. 구성과 정확한 순서, 빌드 정체성이 있고 자격 증명이 제거되었다면 그 보고서는 쓸 만합니다. 스택 트레이스의 스크린샷이라면 같은 정보를 요청하는 답장이 돌아올 것입니다. 커널 버그 사냥 안내서는 유용한 트레이스와 일치하는 심볼이 어떤 모습인지 설명합니다.
uname -r
cat /proc/sys/kernel/tainted
journalctl -k -b -1 --no-pager | sed -n '/BUG:/,/Call Trace/p'
dmesg -T | grep -A 40 'RIP:'
위의 모든 명령은 상태만 읽으며, 장비가 아직 응답할 수 있다면 처음 두 개는 다음 재부팅 전에 실행해야 합니다. 저널이 영구적이지 않은 곳에서는 그 두 개만이 다시 작동할 유일한 명령입니다.
키와 비밀번호, 무관한 트래픽은 가리되, 트레이스를 읽는 데 누군가 필요한 함수 이름과 오프셋은 남기세요. 자료는 배포판이나 커널에 해당하는 신고 경로로 보내고, 호스트 이름이 붙은 공개 붙여넣기는 쓰지 마세요. 그런 다음, 일치하는 빌드에 대해 위치가 특정된 오류만이 보고서를 앞으로 나아가게 하므로 더 많은 크래시를 모으는 대신 질문을 기다리세요. 아무것도 돌아오지 않으면 대안은 예비 하드웨어에서의 통제된 재현이며, 다른 사람들이 의존하는 장비에서는 결코 하지 않습니다.