Kernel Oops saat VPN mulai: bukti yang layak disimpan
Crash saat VPN mulai membutuhkan build kernel yang cocok dan jejak pertama, bukan tangkapan layar baris terakhir. Putuskan apa yang disimpan sebelum boot ulang lagi.
Menjalankan klien VPN adalah penanda waktu yang praktis, bukan penyebab, dan perbedaan itu menentukan apa yang terjadi berikutnya. Ketika Oops kernel muncul dekat momen itu, pilihannya adalah antara mengumpulkan laporan kegagalan yang bisa dipakai dan memicu crash yang sama lima kali lagi di mesin produksi. Simpan empat hal sebelum boot ulang: build kernel yang tepat, jejak kegagalan pertama, status taint, dan deskripsi singkat semua hal lain yang berubah pada menit yang sama. Sisanya adalah penafsiran, dan penafsiran bisa menunggu sampai bukti berada di tempat yang aman.
Tangkap kegagalan pertama, bukan baris terakhir
Oops pertama di log adalah yang penting, karena setiap kegagalan berikutnya bisa jadi kerusakan sampingan dari kernel yang sudah tidak sehat. Salin header bersama call trace, karena header membawa instruksi yang gagal dan status register yang mengidentifikasi jalur kode. Laporan yang dimulai dari baris terakhir bernilai sangat sedikit bagi siapa pun yang membacanya seminggu kemudian.
Jika mesin sudah boot ulang, buffer kernel dari boot sebelumnya sering masih ada di jurnal, asalkan penyimpanan persisten diaktifkan saat itu. Bacalah dari berkas yang tersimpan alih-alih membuat ulang beban kerja, karena reproduksi kedua dapat menimpa apa yang Anda perlukan. Di mana mesin tidak dapat menyimpan jurnal antar boot, konsol serial atau netconsole adalah satu-satunya cara kegagalan itu akan pernah terlihat.
Kunci build sebelum membaca simbol apa pun
Nama fungsi dan offset hanya bermakna terhadap biner yang menghasilkannya, jadi catat string rilis kernel dan pengenal build distribusi bersama-sama. Berkas simbol dari build lain menunjuk ke baris yang salah dengan keyakinan penuh, yang lebih buruk daripada tidak punya simbol sama sekali. Simpan versi paket kernel, bukan hanya nomor upstream, karena distribusi banyak melakukan backport.
Modul di luar pohon layak mendapat barisnya sendiri dalam catatan, karena kernel yang ter-taint membatasi apa yang boleh disimpulkan pemelihara. Baca nilai taint alih-alih menyimpulkannya dari daftar modul.
Taint bukan nol bukanlah tuduhan dan tidak membuat laporan menjadi tidak berguna. Nilai itu memberi tahu pembaca komponen mana yang dimuat saat kegagalan terjadi, dan beberapa flag membuat laporan diturunkan prioritasnya oleh kebijakan, bukan oleh penilaian. Catat nilainya, nama modul, dan apakah perangkat keras serta beban kerja yang sama pernah menjalankan kernel tanpa modul tersebut. Perbandingan terakhir itulah yang memisahkan regresi baru dari bug lama.
Pisahkan pemicu dari cacat
Menjalankan terowongan biasanya melatih jalur yang sudah ada: driver jaringan, disiplin antrean, fitur offload, atau status daya. Pemicu menjelaskan kapan kegagalan muncul, bukan kode mana yang salah, dan memperlakukan pemicu sebagai penyebab mengarah pada serangkaian perubahan konfigurasi yang tidak memperbaiki apa pun.
Citra lama yang berfungsi adalah bukti, bukan pembuktian. Ubahlah satu komponen per boot saat membandingkan, dan simpan hasilnya di tempat yang bertahan melewati mesin.
Periksa apa yang benar-benar bisa dipakai pemelihara
Baca laporan itu seperti orang asing akan membacanya sebelum Anda mengirimnya. Jika konfigurasi, urutan persis, dan identitas build ada, dan kredensialnya sudah dihapus, laporan itu bisa dipakai. Jika itu tangkapan layar dari stack trace, laporan akan kembali dengan permintaan informasi yang sama. Panduan berburu bug kernel menjelaskan seperti apa jejak yang berguna dan simbol yang cocok.
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:'
Setiap perintah di atas hanya membaca status, dan dua perintah pertama sebaiknya dijalankan sebelum boot ulang berikutnya jika mesin masih bisa menjawabnya. Di mana jurnal tidak persisten, keduanya adalah satu-satunya yang akan pernah berfungsi lagi.
Hapus kunci, kata sandi, dan lalu lintas yang tidak terkait, tetapi pertahankan nama fungsi dan offset yang dibutuhkan seseorang untuk membaca jejak. Kirim materi melalui jalur pelaporan yang berlaku untuk distribusi atau kernel, bukan tempelan publik dengan nama host terlampir. Lalu tunggu pertanyaan alih-alih memanen lebih banyak crash, karena kegagalan yang terlokalisasi terhadap build yang cocok adalah satu-satunya hasil yang memajukan laporan. Jika tidak ada yang kembali, cadangannya adalah reproduksi terkendali pada perangkat keras cadangan, tidak pernah pada mesin yang diandalkan orang lain.