Understanding dmesg
Before we dive into the subject of log files, I would like to begin by spending a few moments to discuss the importance of the dmesg
command.
The dmesg
command is used to record messages from the kernel that are specifically related to the process of hardware detection and configuration. I will not go in too much technical detail at this point, but it is important to realize that these messages are derived from the kernel ring buffer; a condition that can not only prove to be of great assistance because it relates back to the subject of hardware troubleshooting, but one that provides evidence as to why an understanding of the system hardware can reflect in a possible software diagnosis and vice versa.
The dmesg
file is located in the /var/log/
directory, but unlike other files that reside in that directory, the basic syntax to view the contents of the dmesg
file is as follows:
# dmesg | less
You can page through the results in the usual way, but if you would like to make the timestamp a little easier to read, you may want to invoke the -T
option like this:
# dmesg -T | less
These commands will now provide us with information related to all the hardware drivers loaded into the kernel during the boot sequence. This information will include their status (success or failure), and if a failure is recorded, it will even provide an error message describing why a failure took place. However, as this file can be quite overwhelming, you should use grep
to query dmesg
in order to streamline this information and simplify the output.
To do this, simply customize the following syntax to suit your needs:
# dmesg -T | grep -i memory
This command will now display all relevant information regarding the total memory available and shared memory details associated with the server. Of course, similar approaches can be made to read the specific information for USB devices, direct memory access (DMA), or even tty.
For example, you can query dmesg
to display hardware information related to any Ethernet ports in the following way:
# dmesg –T | grep -i eth0
Depending on your system configuration, the output will look similar to this:
[Sun Apr 19 04:56:57 2015] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
To extend this approach, you can then modify the previous command in order to discover whether the kernel has detected a specific hard disk. To do this, type:
# dmesg –T | grep sda
Alternatively, you can then use the -i
option to ignore the effects of case sensitivity when searching for tty
references:
# dmesg | grep -i tty
As you will see, the output of the dmesg
file is verbose and the information contained within it can be used to troubleshoot almost anything from network cards to storage issues. The demsg
file may not give you the answer you are looking for straightaway, but it does provide you with another piece of the puzzle when it is used in combination with the information found in some of the more common log files associated with the CentOS operating system.