VPN-ի հաճախորդի մեկնարկը հարմար ժամանակադրոշմ է, ոչ թե պատճառ, և այդ տարբերությունը որոշում է, թե ինչ կլինի հետո։ Երբ kernel Oops-ը տեղի է ունենում այդ պահին մոտ, ընտրությունը օգտակար խափանումային հաշվետվություն հավաքելու և նույն խափանումը արտադրական մեքենայի վրա ևս հինգ անգամ հրահրելու միջև է։ Վերագործարկումից առաջ պահեք չորս բան՝ kernel-ի ճշգրիտ build-ը, խափանման առաջին հետքը, taint-ի վիճակը և նույն րոպեին փոխված մնացած ամեն ինչի կարճ նկարագրությունը։ Մնացածը մեկնաբանություն է, և մեկնաբանությունը կարող է սպասել, մինչև ապացույցները հայտնվեն ապահով տեղում։

Բռնեք առաջին խափանումը, ոչ թե վերջին տողը

Մատյանում առաջին Oops-ն է, որ կարևոր է, որովհետև յուրաքանչյուր հաջորդ խափանում կարող է արդեն ոչ առողջ kernel-ի կողմնակի վնաս լինել։ Պատճենեք վերնագիրը կանչերի հետքի հետ միասին, քանի որ վերնագիրը կրում է խափանում առաջացրած հրահանգը և ռեգիստրների վիճակը, որոնք նույնացնում են կոդի ուղին։ Վերջին տողից սկսվող հաշվետվությունը շատ քիչ արժեք ունի մեկ շաբաթ անց այն կարդացողի համար։

Եթե մեքենան արդեն վերագործարկվել է, նախորդ բեռնման kernel-բուֆերը հաճախ դեռ մատյանում է, պայմանով, որ այդ ժամանակ միացված է եղել մշտական պահոցը։ Կարդացեք այն պահված ֆայլից՝ աշխատանքային ծանրաբեռնվածությունը նորից ստեղծելու փոխարեն, քանի որ երկրորդ վերարտադրությունը կարող է ջնջել ձեզ անհրաժեշտը։ Այնտեղ, որտեղ մեքենան չի կարող մատյան պահել վերագործարկումների միջև, սերիական կոնսոլը կամ netconsole-ը խափանման տեսանելի դառնալու միակ միջոցն է։

Ամրացրեք build-ը՝ նախքան որևէ խորհրդանիշ կարդալը

Ֆունկցիաների անուններն ու շեղումները իմաստ ունեն միայն այն բինար ֆայլի նկատմամբ, որն ստեղծել է դրանք, ուստի գրանցեք kernel-ի թողարկման տողը և դիստրիբուտիվի build-նույնացուցիչը միասին։ Այլ build-ի խորհրդանիշների ֆայլը լիակատար վստահությամբ մատնանշում է սխալ տողին, ինչը վատթար է, քան ընդհանրապես խորհրդանիշ չունենալը։ Պահեք kernel-ի փաթեթի տարբերակը, ոչ միայն upstream-ի համարը, որովհետև դիստրիբուտիվները շատ բան են հետ տեղափոխում։

Ծառից դուրս մոդուլներն արժանի են առանձին տողի գրառման մեջ, քանի որ taint-ված kernel-ը սահմանափակում է, թե ինչ եզրակացություն կարող է անել սպասարկողը։ Կարդացեք taint-ի արժեքը՝ մոդուլների ցանկից այն եզրակացնելու փոխարեն։

Ոչ զրոյական taint-ը մեղադրանք չէ և հաշվետվությունն անարժեք չի դարձնում։ Այն ընթերցողին ասում է, թե որ բաղադրիչներն էին բեռնված խափանման պահին, և որոշ դրոշներ հանգեցնում են նրան, որ հաշվետվությունը ցածր առաջնայնություն է ստանում ոչ թե դատողությամբ, այլ քաղաքականությամբ։ Գրանցեք արժեքը, մոդուլների անունները և արդյոք նույն սարքաշարն ու ծանրաբեռնվածությունը երբևէ kernel աշխատեցրել են առանց դրանց։ Հենց այդ վերջին համեմատությունն է տարանջատում նոր ռեգրեսիան վաղեմի սխալից։

Առանձնացրեք գործարկիչը արատից

Թունելի մեկնարկը սովորաբար գործի է դնում արդեն գոյություն ունեցող ուղի՝ ցանցային դրայվեր, հերթի կարգապահություն, offload-հատկություն կամ էներգիայի վիճակ։ Գործարկիչը բացատրում է, թե երբ է խափանումը հայտնվում, ոչ թե որ կոդն է սխալ, և գործարկիչը որպես պատճառ դիտելը հանգեցնում է կոնֆիգուրացիայի փոփոխությունների շարքի, որոնք ոչինչ չեն ուղղում։

Աշխատող նախորդ պատկերը ապացույց է, ոչ թե ապացուցում։ Համեմատելիս յուրաքանչյուր բեռնման համար փոխեք մեկ բաղադրիչ, և արդյունքները պահեք մի տեղում, որ վերապրի մեքենային։

Ստուգեք, թե ինչ կարող է սպասարկողն իրականում օգտագործել

Նախքան ուղարկելը կարդացեք հաշվետվությունն այնպես, ինչպես անծանոթը կկարդա։ Եթե կոնֆիգուրացիան, ճշգրիտ հաջորդականությունը և build-ի ինքնությունը առկա են, և հավատարմագրերը հեռացված են, հաշվետվությունը օգտագործելի է։ Եթե դա ստեկի հետքի սքրինշոթ է, այն կվերադառնա նույն տեղեկատվության հարցումով։ Kernel-ի սխալների որոնման ուղեցույցը նկարագրում է, թե ինչպիսին են օգտակար հետքը և համապատասխան խորհրդանիշները։

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:'

Վերևի յուրաքանչյուր հրահանգ միայն վիճակ է կարդում, և առաջին երկուսը պետք է գործարկվեն հաջորդ վերագործարկումից առաջ, եթե մեքենան դեռ կարող է պատասխանել դրանց։ Այնտեղ, որտեղ մատյանը մշտական չէ, հենց այդ երկուսն են միակը, որ երբևէ նորից կաշխատեն։

Հեռացրեք բանալիները, գաղտնաբառերը և անառնչություն երթևեկությունը, բայց պահեք ֆունկցիաների անուններն ու շեղումները, որոնք ինչ-որ մեկին անհրաժեշտ են հետքը կարդալու համար։ Ուղարկեք նյութը դիստրիբուտիվին կամ kernel-ին վերաբերող հաշվետվության ուղով, ոչ թե հանրային փակցմամբ՝ կցված հոսթի անունով։ Ապա սպասեք հարցման՝ ավելի շատ խափանումներ հավաքելու փոխարեն, որովհետև համապատասխան build-ի դեմ տեղորոշված խափանումը միակ արդյունքն է, որն առաջ է մղում հաշվետվությունը։ Եթե ոչինչ չվերադառնա, պահեստային տարբերակը վերահսկվող վերարտադրությունն է պահուստային սարքաշարի վրա, երբեք այն մեքենայի վրա, որից կախված են այլ մարդիկ։

Առնչվող հոդվածներ