VPN клиентийг асах нь тав тухтай цагийн тэмдэглэгээ бөгөөд шалтгаан биш, энэ ялгаа нь дараа юу болохыг тодорхойлно. Тэр мөчид kernel Oops гарвал сонголт нь ашигтай алдааны тайлан цуглуулах эсвэл үйлдвэрлэлийн машин дээр ижил сүйрлийг дахин таван удаа үүсгэх хоёрын хооронд байна. Дахин ачаалахаас өмнө дөрвөн зүйлийг хадгал: kernel-ийн нарийн build, алдааны эхний ул мөр, taint төлөв, мөн тэр минутад өөрчлөгдсөн бусад бүх зүйлийн товч тайлбар. Үлдсэн нь тайлбар бөгөөд нотолгоо аюулгүй газар болтол тайлбар хүлээж болно.

Сүүлийн мөрийг биш, эхний алдааг бариарай

Лог дахь эхний Oops нь чухал, учир нь дараагийн алдаа бүр аль хэдийн эрүүл бус kernel-ийн хажуугийн хохирол байж болно. Дуудлагын ул мөртэй хамт толгойг хуулбарла, учир нь толгойд алдаа гаргасан заавар болон кодын замыг тодорхойлох регистрийн төлөв байдаг. Сүүлийн мөрөөс эхэлсэн тайлан долоо хоногийн дараа уншигчид маш бага үнэ цэнэтэй.

Хэрэв машин аль хэдийн дахин ачаалагдсан бол өмнөх ачааллын kernel буфер ихэвчлэн журналд үлддэг, тухайн үед байнгын хадгалалт идэвхтэй байсан бол. Ажлын ачааллыг дахин бүтээхийн оронд хадгалсан файлаас унш, учир нь хоёр дахь хуулбарлалт танд хэрэгтэй зүйлийг дарж бичиж болно. Машин дахин ачаалалтын хооронд журнал хадгалж чаддаггүй газарт цуваа консол эсвэл netconsole нь алдааг хэзээ нэгэн цагт харагдах цорын ганц арга.

Ямар ч тэмдэгт уншихаас өмнө build-ийг тогтоо

Функцийн нэр, офсет нь тэдгээрийг үүсгэсэн бинар файлтай харьцуулахад л утгатай, тиймээс kernel-ийн гаргасан мөрийн мөр болон түгээлтийн build танигчийг хамт бич. Өөр build-ийн тэмдэгтийн файл бүрэн итгэлтэйгээр буруу мөр рүү заадаг бөгөөд энэ нь тэмдэгт огт байхгүйгээс ч дор. Зөвхөн upstream дугаар биш, kernel багцын хувилбарыг хадгал, учир нь түгээлтүүд олон зүйлийг буцааж зөөдөг.

Модны гаднах модулиуд бүртгэлд өөрийн мөртэй байх ёстой, учир нь 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-ийн эсрэг локалчлагдсан алдаа л тайланг урагшлуулах цорын ганц үр дүн. Хэрэв юу ч буцаж ирэхгүй бол нөөц хувилбар нь нөөц техник хангамж дээр хяналттай хуулбарлалт бөгөөд бусад хүмүүсээс хамааралтай машин дээр хэзээ ч биш.

Холбоотой нийтлэлүүд