Il dmesg
command è uno di quegli strumenti di risoluzione dei problemi facilmente dimenticati che dovrebbero rimanere in cima al tuo arsenale di sysadmin. Contiene così tante informazioni sul tuo sistema che dmesg
dovrebbe essere il primo posto in cui guardi quando qualcosa va storto. L'output da dmesg
è lungo, come puoi vedere di persona se lo digiti al prompt dei comandi perché riporta informazioni da tutti gli aspetti del tuo sistema quando non ci sono messaggi di errore, diversi da quelli che potrebbero apparire all'avvio.
Formalmente, dmesg
stampa o controlla il buffer dell'anello del kernel. L'azione predefinita è visualizzare tutti i messaggi da questo buffer.
Per riferimenti e confronti futuri, il momento migliore per guardare dmesg
è subito dopo l'avvio. Di solito invio dmesg
informazioni in un file di testo utilizzando un comando come il seguente:
$ dmesg > dmesg.`date +%m.%d.%Y`.txt
Questo comando crea un file di testo denominato dmesg.12.11.2019.txt
. Tra la data di creazione del file e il prossimo avvio, puoi controllare i nuovi messaggi generati dal kernel.
I possibili messaggi post-avvio includono errori di sistema, errori del dispositivo e informazioni su qualsiasi dispositivo USB che qualcuno potrebbe collegare. Ad esempio, il seguente dmesg
informazioni visualizzate dopo l'inserimento di un'unità USB:
[ 9189.631808] usb 1-1: new full-speed USB device number 2 using ohci-pci
[ 9189.909896] ohci-pci 0000:00:06.0: frame counter not updating; disabled
[ 9189.909958] ohci-pci 0000:00:06.0: HC died; cleaning up
[ 9194.910072] usb usb1-port1: attempt power cycle
Per visualizzare un elenco completo dei messaggi relativi all'USB, emetti dmesg
comando e grep per usb
:
$ dmesg |grep -i usb
[ 0.052580] ACPI: bus type USB registered
[ 0.052594] usbcore: registered new interface driver usbfs
[ 0.052598] usbcore: registered new interface driver hub
[ 0.052605] usbcore: registered new device driver usb
[ 0.414901] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.414907] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.415398] ohci-pci 0000:00:06.0: new USB bus registered, assigned bus number 1
[ 0.468262] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.18
[ 0.468264] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 0.468266] usb usb1: Product: OHCI PCI host controller
[ 0.468268] usb usb1: Manufacturer: Linux 4.18.0-80.el8.x86_64 ohci_hcd
[ 0.468269] usb usb1: SerialNumber: 0000:00:06.0
[ 0.468454] hub 1-0:1.0: USB hub found
[ 0.468842] uhci_hcd: USB Universal Host Controller Interface driver
[ 0.468885] usbcore: registered new interface driver usbserial_generic
[ 0.468889] usbserial: USB Serial support registered for generic
[ 0.470765] usbcore: registered new interface driver usbhid
[ 0.470765] usbhid: USB HID core driver
[ 9189.631808] usb 1-1: new full-speed USB device number 2 using ohci-pci
[ 9194.910072] usb usb1-port1: attempt power cycle
Come puoi vedere, ho usato il grep
comando con -i
opzione quindi ignora maiuscole e minuscole e vedrò tutto ciò che è associato ai dispositivi USB indipendentemente da quello (Usb
, usb
o usb
). Questa pratica è utile per qualsiasi sottosistema o filtro che desideri utilizzare. Ignora sempre il caso del filtro.
Ad esempio, per vedere tutti i dischi (dispositivi a blocchi) collegati al tuo sistema, usa il comando seguente:
$ dmesg |grep -i sd
[ 0.000000] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-80.el8.x86_64 root=UUID=f695f641-e489-4674-afd8-8f354533811d ro crashkernel=auto rhgb quiet
[ 0.000000] ACPI: RSDP 0x00000000000E0000 000024 (v02 VBOX )
[ 0.000000] ACPI: XSDT 0x000000003FFF0030 00003C (v01 VBOX VBOXXSDT 00000001 ASL 00000061)
[ 0.000000] ACPI: DSDT 0x000000003FFF0470 0022EA (v02 VBOX VBOXBIOS 00000002 INTL 20100528)
[ 0.000000] ACPI: SSDT 0x000000003FFF02A0 0001CC (v01 VBOX VBOXCPUT 00000002 INTL 20100528)
[ 0.000000] Kernel command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-80.el8.x86_64 root=UUID=f695f641-e489-4674-afd8-8f354533811d ro crashkernel=auto rhgb quiet
[ 1.545750] sd 2:0:0:0: [sda] 33554432 512-byte logical blocks: (17.2 GB/16.0 GiB)
[ 1.545756] sd 2:0:0:0: [sda] Write Protect is off
[ 1.545757] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.545764] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.546960] sda: sda1 sda2
[ 1.547316] sd 2:0:0:0: [sda] Attached SCSI disk
[ 1.975545] XFS (sda2): Mounting V5 Filesystem
[ 2.092251] XFS (sda2): Starting recovery (logdev: internal)
[ 2.137813] XFS (sda2): Ending recovery (logdev: internal)
[ 3.993219] sd 2:0:0:0: Attached scsi generic sg1 type 0
[ 5.909006] XFS (sda1): Mounting V5 Filesystem
[ 5.959833] XFS (sda1): Starting recovery (logdev: internal)
[ 5.962287] XFS (sda1): Ending recovery (logdev: internal)
I risultati mostrano più di un semplice elenco di dispositivi a blocchi, quindi puoi filtrare ulteriormente i risultati specificando il filesystem, in questo caso XFS:
$ dmesg |grep -i xfs
[ 1.965741] SGI XFS with ACLs, security attributes, no debug enabled
[ 1.975545] XFS (sda2): Mounting V5 Filesystem
[ 2.092251] XFS (sda2): Starting recovery (logdev: internal)
[ 2.137813] XFS (sda2): Ending recovery (logdev: internal)
[ 5.909006] XFS (sda1): Mounting V5 Filesystem
[ 5.959833] XFS (sda1): Starting recovery (logdev: internal)
[ 5.962287] XFS (sda1): Ending recovery (logdev: internal)
L'uso di -i
l'opzione qui è superflua ma la includo sempre nel caso in cui ci siano risultati che non vedrei altrimenti. Uso il tasto freccia su per ripetere il mio ultimo comando (una funzione Bash molto eccellente) e tornare indietro sull'ultima cosa che ho cercato e sostituirla con la mia nuova parola chiave, quindi una volta inserito il comando, non devo più preoccuparmi di nulla tranne quello che sto cercando. Nessun danno viene fatto in entrambi i casi.
Se desideri vedere se il tuo sistema remoto è dotato di un'unità CD/DVD, prova questo comando:
$ dmesg |grep -i cd
[ 0.000000] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
[ 0.414901] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.414907] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.468262] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.18
[ 0.468268] usb usb1: Manufacturer: Linux 4.18.0-80.el8.x86_64 ohci_hcd
[ 0.468842] uhci_hcd: USB Universal Host Controller Interface driver
[ 1.328589] ata2.00: ATAPI: VBOX CD-ROM, 1.0, max UDMA/133
[ 1.329773] scsi 1:0:0:0: CD-ROM VBOX CD-ROM 1.0 PQ: 0 ANSI: 5
[ 1.577662] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 1.578616] sr 1:0:0:0: Attached scsi CD-ROM sr0
Le ultime quattro righe visualizzano informazioni sull'unità CD-ROM. Sebbene l'unità CD-ROM sia virtuale su questo sistema, se l'hardware della macchina virtuale la include, l'unità può caricare file di immagine ISO come se fossero un'immagine di avvio su un supporto fisico.
Il dmesg
il comando non è grande e appariscente. Non fa molte cose o ha un lungo elenco di opzioni. Invece, è elegante nella sua semplicità e pratico come la tua tasca protettiva. Piuttosto che come ripensamento, dovresti prendere l'abitudine di eseguire dmesg
regolarmente sui vostri sistemi. E, quando qualcosa va storto, eseguilo di nuovo per scoprire cosa sa il kernel sul problema. Potresti risparmiarti un po' di dolore e alcuni passaggi per la risoluzione dei problemi. Potresti anche sembrare un eroe ai tuoi colleghi e al management per aver trovato il problema così rapidamente. Ricorda, il tempo è denaro e stai cercando di risparmiarlo e il giorno.
Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente.