Oops ядра пры запуску VPN: доказы, якія варта захаваць
Збой пры запуску VPN патрабуе адпаведнай зборкі ядра і першага следу, а не здымка апошняга радка. Вырашыце, што захаваць, перш чым зноў перазагрузіцца.
Запуск кліента VPN — гэта зручная адзнака часу, а не прычына, і менавіта гэтае адрозненне вызначае, што адбудзецца далей. Калі ў гэты момант узнікае Oops ядра, выбар паміж зборам прыдатнай справаздачы аб збоі і правакаваннем таго ж збою яшчэ пяць разоў на прадукцыйнай машыне. Перад перазагрузкай захавайце чатыры рэчы: дакладную зборку ядра, першы след збою, стан taint і кароткае апісанне ўсяго астатняга, што змянілася ў тую ж хвіліну. Астатняе — гэта інтэрпрэтацыя, і яна можа пачакаць, пакуль доказы не апынуцца ў бяспечным месцы.
Захапіце першы збой, а не апошні радок
Першы Oops у журнале — гэта тое, што мае значэнне, бо кожны наступны збой можа быць пабочным уронам ад ядра, якое ўжо нездаровае. Скапіруйце загаловак разам з трасіроўкай выклікаў, бо загаловак нясе каманду, якая выклікала збой, і стан рэгістраў, што вызначаюць шлях кода. Справаздача, якая пачынаецца з апошняга радка, вельмі мала каштуе для таго, хто прачытае яе праз тыдзень.
Калі машына ўжо перазагрузілася, буфер ядра папярэдняй загрузкі часта яшчэ застаецца ў журнале, пры ўмове, што тады была ўключана пастаянная памяць. Чытайце яго з захаванага файла, а не стварайце нагрузку нанова, бо другое ўзнаўленне можа перазапісаць тое, што вам патрэбна. Там, дзе машына не можа захоўваць журнал паміж перазагрузкамі, паслядоўная кансоль або netconsole — адзіны спосаб, якім збой калі-небудзь стане бачным.
Зафіксуйце зборку, перш чым чытаць любы сімвал
Імёны функцый і зрухі маюць сэнс толькі адносна бінарнага файла, які іх спарадзіў, таму запішыце радок выпуску ядра і ідэнтыфікатар зборкі дыстрыбутыва разам. Файл сімвалаў з іншай зборкі з поўнай упэўненасцю паказвае на няправільны радок, што горш, чым зусім не мець сімвала. Захоўвайце версію пакета ядра, а не толькі нумар upstream, бо дыстрыбутывы шмат чаго пераносяць назад.
Модулі па-за дрэвам заслугоўваюць асобнага радка ў запісе, бо пазначанае ядро абмяжоўвае тое, што суправаджальнік мае права заключыць. Чытайце значэнне taint, а не выводзьце яго са спісу модуляў.
Ненулявы taint — гэта не абвінавачванне і не робіць справаздачу бескарыснай. Ён паведамляе чытачу, якія кампаненты былі загружаны ў момант збою, і некаторыя сцягі прыводзяць да таго, што справаздача зніжаецца ў прыярытэце па палітыцы, а не па меркаванні. Запішыце значэнне, імёны модуляў і тое, ці калі-небудзь гэтае ж абсталяванне і нагрузка працавалі на ядры без іх. Менавіта гэта апошняе параўнанне аддзяляе новую рэгрэсію ад даўняй памылкі.
Аддзяліце трыгер ад дэфекту
Запуск тунэля звычайна задзейнічае шлях, які ўжо існаваў: сеткавы драйвер, дысцыпліну чаргі, функцыю offload або стан сілкавання. Трыгер тлумачыць, калі збой з'явіцца, а не які код няправільны, і стаўленне да трыгера як да прычыны вядзе да шэрагу змен канфігурацыі, якія нічога не выпраўляюць.
Працуючы папярэдні вобраз — гэта доказ, а не даказ. Пры параўнанні змяняйце адзін кампанент за адну загрузку і захоўвайце вынікі там, дзе яны перажывуць машыну.
Праверце, што суправаджальнік сапраўды можа выкарыстаць
Прачытайце справаздачу так, як яе прачытаў бы старонні, перш чым адпраўляць. Калі канфігурацыя, дакладная паслядоўнасць і ідэнтычнасць зборкі прысутнічаюць, а ўліковыя даныя выдалены, справаздача прыдатная. Калі гэта здымак трасіроўкі стэка, ён вернецца з запытам на тую ж інфармацыю. Кіраўніцтва па пошуку памылак ядра апісвае, як выглядаюць карысная трасіроўка і адпаведныя сімвалы.
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:'
Кожная каманда вышэй толькі чытае стан, і першыя дзве варта выканаць да наступнай перазагрузкі, калі машына яшчэ можа адказаць на іх. Там, дзе журнал не захоўваецца, менавіта гэтыя дзве — адзіныя, што калі-небудзь зноў спрацуюць.
Выдаліце ключы, паролі і старонні трафік, але пакіньце імёны функцый і зрухі, патрэбныя камусьці для чытання трасіроўкі. Адпраўляйце матэрыял праз шлях справаздачнасці, які датычыцца дыстрыбутыва або ядра, а не праз публічную ўстаўку з далучаным імем хоста. Затым чакайце пытання замест таго, каб збіраць больш збояў, бо лакалізаваны збой супраць адпаведнай зборкі — адзіны вынік, які рухае справаздачу наперад. Калі нічога не вернецца, запасны варыянт — кантраляванае ўзнаўленне на рэзервовым абсталяванні, ніколі на машыне, ад якой залежаць іншыя.