Perintah dmesg memungkinkan Anda mengintip dunia tersembunyi dari proses startup Linux. Tinjau dan pantau pesan perangkat keras dan driver dari buffer ring kernel dengan “teman pencari kesalahan.”
Cara Kerja Ring Buffer Linux
Di komputer mirip Linux dan Unix, booting dan startup adalah dua fase berbeda dari urutan peristiwa yang terjadi saat komputer dihidupkan.
Proses booting (BIOS atau UEFI, MBR, dan GRUB) melakukan inisialisasi sistem ke titik di mana kernel dimuat ke dalam memori dan terhubung ke ramdisk awal (initrd atau initramfs ), dan systemd dimulai.
Proses startup kemudian mengambil tongkat estafet dan menyelesaikan inisialisasi sistem operasi. Pada tahap awal inisialisasi, daemon logging seperti syslogd atau rsyslogd belum aktif dan berjalan. Untuk menghindari hilangnya pesan kesalahan dan peringatan penting dari fase inisialisasi ini, kernel berisi buffer cincin yang digunakan sebagai penyimpanan pesan.
Buffer cincin adalah ruang memori yang disediakan untuk pesan. Desainnya sederhana, dan ukurannya tetap. Jika sudah penuh, pesan baru akan menimpa pesan terlama. Secara konseptual dapat dianggap sebagai “buffer melingkar.”
Buffer cincin kernel menyimpan informasi seperti pesan inisialisasi driver perangkat, pesan dari perangkat keras, dan pesan dari modul kernel. Karena berisi pesan-pesan startup tingkat rendah ini, ring buffer adalah tempat yang baik untuk memulai penyelidikan terhadap kesalahan perangkat keras atau masalah startup lainnya.
Di situlah perintah dmesg masuk.
Apa itu Perintah dmesg?
Perintah dmesg memungkinkan Anda meninjau pesan yang disimpan di buffer cincin. Secara default, Anda perlu menggunakan sudo untuk menggunakan dmesg.
sudo dmesg
Semua pesan di buffer cincin ditampilkan di jendela terminal.
Jelasnya, yang perlu kita lakukan adalah menyalurkannya melalui less:
sudo dmesg | less
Sekarang kita dapat menelusuri pesan untuk mencari item yang menarik.
Anda dapat menggunakan fungsi pencarian di dalam less untuk mencari dan menyorot item dan istilah yang Anda minati. Mulai fungsi pencarian dengan menekan tombol garis miring “/” di less.
Menghilangkan Kebutuhan akan sudo
Jika Anda ingin menghindari keharusan menggunakan sudo setiap kali menggunakan dmesg, Anda dapat menggunakan perintah ini. Namun perlu diketahui: ini memungkinkan siapa pun yang memiliki akun pengguna di komputer Anda menggunakan dmesg tanpa harus menggunakan sudo.
sudo sysctl -w kernel.dmesg_restrict=0
Forcing Color Output
Secara default, dmesg mungkin akan dikonfigurasi untuk menghasilkan keluaran berwarna. Jika tidak, Anda dapat meminta dmesg untuk mewarnai keluarannya menggunakan opsi -L (warna).
sudo dmesg -L
Untuk memaksa dmesg selalu default ke tampilan berwarna, gunakan perintah ini:
sudo dmesg --color=always
Human Timestamps
Secara default , dmesg menggunakan notasi stempel waktu detik dan nanodetik sejak kernel dimulai. Agar ini dirender dalam format yang lebih ramah manusia, gunakan opsi -H (manusia).
sudo dmesg -H
Ini menyebabkan dua hal terjadi.
Output secara otomatis ditampilkan dalam waktu lebih sedikit. Stempel waktu menunjukkan stempel waktu dengan tanggal dan waktu, dengan resolusi satu menit. Pesan yang terjadi setiap menit diberi label dengan detik dan nanodetik dari awal menit tersebut. Stempel Waktu yang Dapat Dibaca Manusia dengan dmesg
Jika Anda tidak memerlukan akurasi nanodetik, tetapi Anda ingin stempel waktu yang lebih mudah dibaca daripada default, gunakan opsi -T (dapat dibaca manusia). (Agak membingungkan. -H adalah opsi “manusia”, -T adalah opsi “dapat dibaca manusia”.)
sudo dmesg -T
Stempel waktu ditampilkan sebagai tanggal dan waktu standar, tetapi resolusinya diturunkan menjadi satu menit.
Semuanya yang terjadi dalam satu menit memiliki stempel waktu yang sama. Jika yang Anda pedulikan hanyalah urutan kejadiannya, ini sudah cukup. Juga, perhatikan bahwa Anda dibuang kembali ke command prompt. Opsi ini tidak secara otomatis memanggil less.
Menonton Siaran Langsung dengan dmesg
Untuk melihat pesan saat pesan tiba di buffer ring kernel, gunakan opsi –follow (tunggu pesan). Kalimat itu mungkin terasa sedikit aneh. Jika buffer cincin digunakan untuk menyimpan pesan dari peristiwa yang terjadi selama urutan startup, bagaimana pesan langsung bisa tiba di buffer cincin setelah komputer aktif dan berjalan?
Apa pun yang menyebabkan perubahan pada perangkat keras yang terhubung ke komputer Anda akan menyebabkan pesan yang akan dikirim ke buffer ring kernel. Perbarui atau tambahkan modul kernel, dan Anda akan melihat pesan buffering tentang perubahan tersebut. Jika Anda menyambungkan drive USB atau menghubungkan atau memutuskan sambungan perangkat Bluetooth, Anda akan melihat pesan di output dmesg. Bahkan perangkat keras virtual akan menyebabkan pesan baru muncul di buffer cincin. Jalankan mesin virtual, dan Anda akan melihat informasi baru tiba di buffer ring.
sudo dmesg --follow
Perhatikan bahwa Anda tidak dikembalikan ke command prompt. Ketika pesan baru muncul, pesan tersebut ditampilkan oleh dmesg di bagian bawah jendela terminal.
Bahkan pemasangan disk CD-ROM dipandang sebagai perubahan, karena Anda telah mencangkokkan konten disk CD-ROM ke pohon direktori.
Untuk keluar dari umpan real-time, tekan Ctrl+C.
Ambil Sepuluh Pesan Terakhir
Gunakan perintah tail untuk mengambil sepuluh pesan buffer ring kernel terakhir. Tentu saja, Anda dapat mengambil sejumlah pesan. Sepuluh hanyalah contoh kami.
sudo dmesg | last -10
Sepuluh pesan terakhir diambil dan dicantumkan di jendela terminal.
Mencari Istilah Tertentu
Pipe output dari dmesg melalui pencarian gretto untuk string atau pola tertentu. Di sini kami menggunakan opsi -i (abaikan huruf besar-kecil) sehingga huruf besar-kecil yang cocok diabaikan. hasil kami akan mencakup “usb” dan “USB” serta kombinasi huruf kecil dan besar lainnya.
sudo dmesg | grep -i usb
Hasil pencarian yang disorot dalam huruf besar dan kecil.
Kami dapat mengisolasi pesan yang berisi referensi ke hard disk SCSI pertama pada sistem sda. (Sebenarnya, sda juga digunakan saat ini untuk hard drive SATA pertama, dan untuk drive USB.)
sudo dmesg | grep -i sda
Semua pesan yang menyebutkan sda diambil dan dicantumkan di jendela terminal.
Untuk melakukan grep mencari beberapa istilah sekaligus, gunakan opsi -E (perluas ekspresi reguler). Anda harus memberikan istilah pencarian di dalam string yang dikutip dengan pipa “|” pembatas antara istilah pencarian:
sudo dmesg | grep -E "memory|tty|dma"
Setiap pesan yang menyebutkan salah satu istilah pencarian tercantum di jendela terminal.
Menggunakan Level Log
Setiap pesan yang masuk ke buffer ring kernel memiliki level yang melekat padanya. Tingkat tersebut mewakili pentingnya informasi dalam pesan. Levelnya adalah:
emerg: Sistem tidak dapat digunakan. waspada: Tindakan harus segera diambil. crit: Kondisi kritis. err: Kondisi kesalahan. memperingatkan: Kondisi peringatan. pemberitahuan: Kondisi normal namun signifikan. info: Informasional. debug: Pesan tingkat debug.
Kita dapat membuat dmesg mengekstrak pesan yang cocok dengan level tertentu dengan menggunakan opsi -l (level) dan meneruskan nama level sebagai parameter baris perintah. Untuk hanya melihat pesan tingkat “informasional”, gunakan perintah ini:
sudo dmesg -l info
Semua pesan yang terdaftar adalah pesan informasional. Mereka tidak mengandung kesalahan atau peringatan, hanya pemberitahuan yang berguna.
Gabungkan dua atau lebih level log dalam satu perintah untuk mengambil pesan dari beberapa level log:
sudo dmesg -l debug,notice
Output dari dmesg adalah campuran pesan dari setiap level log:
Kategori Fasilitas
Pesan dmesg dikelompokkan ke dalam kategori yang disebut “fasilitas”. Daftar fasilitasnya adalah:
kern: Pesan kernel. pengguna: Pesan tingkat pengguna. surat: Sistem surat. daemon: Daemon sistem. auth: Pesan keamanan/otorisasi. syslog: Pesan syslogd internal. lpr: Subsistem printer garis. berita: Subsistem berita jaringan.
Kita dapat meminta dmesg untuk memfilter outputnya agar hanya menampilkan pesan di fasilitas tertentu. Untuk melakukannya, kita harus menggunakan opsi -f (fasilitas):
sudo dmesg -f daemon
dmesg mencantumkan semua pesan yang berkaitan dengan daemon di jendela terminal.
Seperti yang kita lakukan dengan level, kita dapat meminta dmesg untuk membuat daftar pesan dari lebih dari satu fasilitas sekaligus:
sudo dmesg -f syslog, daemon
Outputnya adalah campuran pesan syslog dan daemon log.
Menggabungkan Fasilitas dan Level
Opsi -x (decode) membuat dmesg menampilkan fasilitas dan level sebagai awalan yang dapat dibaca manusia untuk setiap baris.
sudo dmesg -x
Fasilitas dan level dapat dilihat di awal setiap baris:
Bagian pertama yang disorot adalah pesan dari fasilitas “kernel” dengan level “pemberitahuan”. Bagian kedua yang disorot adalah pesan dari fasilitas “kernel” dengan tingkat “info.”
Singkatnya, pencarian kesalahan.
Jika Anda mengalami masalah dengan perangkat keras yang tidak dikenali atau tidak berfungsi dengan baik, dmesg mungkin dapat menjelaskan masalah tersebut.
Gunakan dmesg untuk meninjau pesan dari tingkat tertinggi hingga setiap tingkat yang lebih rendah, cari untuk kesalahan atau peringatan apa pun yang menyebutkan item perangkat keras, atau mungkin ada kaitannya dengan masalah tersebut. Gunakan dmesg untuk mencari penyebutan fasilitas yang sesuai untuk melihat apakah fasilitas tersebut berisi informasi berguna. Kirim pesan melalui grep dan cari string atau pengidentifikasi terkait seperti produsen produk atau nomor model. Kirim pesan melalui grep dan cari istilah umum seperti “gpu” atau “penyimpanan”, atau istilah seperti “gagal”, “gagal”, atau “tidak dapat”. Gunakan opsi –follow dan tonton pesan dmesg secara real-time.