Tutoriel Linux

Dmesg onder Linux: lees kernelberichten wanneer een schijf of apparaat uitvalt.

Débutant6 min de lecture

Is een USB-stick verdwenen, is een netwerkkaart losgekoppeld, werkt een SSD niet meer goed of geeft een computer direct na het opstarten een foutmelding? Voordat ik zomaar de configuratie wijzig, controleer ik bijna altijd eerst de kernelberichten.

Onder Linux, dmesg Het stelt je in staat om deze berichten snel te lezen. Het is geen tovermiddel, maar het geeft vaak de eerste nuttige aanwijzing: een I/O-fout, een gereset USB-apparaat, ontbrekende firmware, een klagende driver of een instabiele netwerkverbinding.

In deze handleiding laat ik je zien hoe je het kunt gebruiken. dmesg Om precies te zijn, kruis het met journalctl -kFilter de nuttige regels eruit en vermijd de valse hoop om een ​​systeemoptie te wijzigen voordat je het bericht goed hebt begrepen.

Tux inspecteert Linux-kernelberichten rondom een ​​schijf, een USB-apparaat en een server.
dmesg geeft vaak de eerste aanwijzing wanneer een schijf, USB-apparaat of netwerkinterface defect raakt.

Wat dmesg daadwerkelijk weergeeft

dmesg Dit toont de berichtenbuffer van de Linux-kernel. Simpel gezegd, je vindt daar gebeurtenissen op laag niveau: hardwaredetectie, stuurprogramma’s, schijffouten, USB, netwerk, ACPI, firmware, geheugen, apparaatmontage, enzovoort.

Op een moderne machine zijn sommige van deze berichten ook zichtbaar in het systemd-logboek. Daarom raad ik je aan beide commando’s bij de hand te houden: dmesg voor snel lezen, journalctl -k Voor een betere leesbaarheid in het systeemlogboek.

dmesg

Op sommige distributies zijn mogelijk beheerdersrechten vereist om bestanden te kunnen lezen. Als u een machtigingsfout krijgt, probeer het dan opnieuw met sudo.

sudo dmesg

De handleidingpagina van dmesg Het beschrijft alle opties. Voor routinediagnostiek zijn een paar commando’s al meer dan voldoende.

Lees de laatste regels zonder te verdrinken.

Het eerste wat je moet doen, is niet meteen 800 regels weergeven. Als er zich net een probleem heeft voorgedaan, begin dan met het einde van het kernel-logboek.

sudo dmesg -T | tail -n 80

De optie -T Maakt datums beter leesbaar. Houd er rekening mee dat hoewel dit formaat handig is voor snel lezen, het geen vervanging is voor een grondige analyse van krantenartikelen als u zeer specifieke gebeurtenissen wilt vergelijken. Daarvoor, journalctl blijft comfortabeler.

Je kunt er ook voor kiezen om alleen waarschuwingen en foutmeldingen weer te geven:

sudo dmesg -T --level=err,warn

Als de opdracht geen resultaat oplevert, hoeft dat niet per se een slecht teken te zijn. Het betekent simpelweg dat de kernel geen recente fouten of waarschuwingen in die buffer heeft opgeslagen.

Een USB-, schijf- of netwerkprobleem filteren

De echte tijdsbesparing begint met filteren. Als je bijvoorbeeld wilt weten waarom een ​​USB-stick niet wordt herkend, waarom een ​​harde schijf niet goed werkt of waarom een ​​netwerkkaart steeds opnieuw opstart, lees dan niet alles. Zoek naar de woorden die overeenkomen met de hardware.

sudo dmesg -T | grep -iE 'usb|sda|sdb|nvme|ata|fout|mislukt|reset'

Ter verduidelijking: de regels waar je op moet letten, spreken vaak voor zich: I/O-fout, opnieuw instellen, mislukte opdracht, blk_update_request, leesfout, schrijf foutAls je dit soort berichten herhaaldelijk ziet, begin dan niet met het herschrijven ervan. /etc/fstabControleer eerst de kabel, de USB-behuizing, de voeding en vervolgens de staat van de schijf.

Voor een USB-apparaat kunt u de instructies vergelijken met de commando’s die al in de handleiding staan. USB-poorten in Linux of die op de een USB-sleutel monteren. dmesg vertelt je wat de kern observeert, maar lsusb, lsblk En vind Helpt om te begrijpen wat er daadwerkelijk wordt gedetecteerd en gemonteerd.

lsblk -o NAME,SIZE,FSTYPE,LABEL,UUID,MOUNTPOINTS
vind
lsusb

Bij een netwerkprobleem kunt u de interfacenaam of termen zoals link, hernoemd, firmware, time-out, omlaag, omhoogAls het onderwerp voornamelijk betrekking heeft op het luisteren naar TCP-poorten, schakel dan over naar ss of netstat, omdat dmesg Vervangt geen netwerkinventarisatie.

Volg de instructies tijdens het aansluiten van de apparatuur.

Als een apparaat af en toe de verbinding verliest, is de eenvoudigste manier om de live berichten te controleren. Open een terminal, voer het commando uit en sluit vervolgens de schijf, USB-stick of netwerkadapter aan.

sudo dmesg -wH

-w volg nieuwe berichten. -H Dit maakt de uitvoer beter leesbaar. Als je liever in het systemd-logboek blijft, gebruik dan:

sudo journalctl -k -f

De handleidingpagina van journaalctl Dit is handig als u de zoekopdracht wilt verfijnen op basis van opstarttijd, prioriteit of eenheid. Bij een eenvoudige hardwarefout is live monitoring vaak voldoende om te zien of de kernel de betreffende vertakking en vervolgens de fout detecteert.

Vergelijk de laatste opstart met journalctl.

dmesg Het is snel, maar ik stop daar niet als het probleem een ​​server betreft of na een herstart terugkeert. Het systemd-logbestand stelt je in staat om de kernelberichten van de huidige opstart te herlezen, met behulp van eigen filters.

sudo journalctl -k -b --no-pager
sudo journalctl -k -b -p warning..alert --no-pager

Het eerste commando toont de kernelberichten van het huidige opstartproces. Het tweede commando bewaart alleen waarschuwingen, fouten en meldingen. Dit is handig na een herstart waarbij een mount is mislukt, een netwerkinterface niet correct is gemount of wanneer een driver een probleem meldt tijdens het opstarten.

Als u zojuist wijzigingen hebt aangebracht /etc/fstabStart de applicatie niet opnieuw op om te kijken wat er gebeurt. Test eerst de assemblage en controleer op fouten. De handleiding op fstab onder Linux Dit punt moet in detail worden uitgelegd, omdat een slechte lijn de opstart sneller kan blokkeren dan je misschien denkt.

sudo mount -a
vind
sudo journalctl -k -b -p warning..alert --no-pager

Weten wanneer de melding duidt op een echt hardwareprobleem.

Een geïsoleerde lijningang dmesg Dit is niet altijd voldoende om een ​​conclusie te trekken. Een USB-apparaat kan zichzelf eenmalig resetten zonder dat dit ernstig is. Een fout die bij elke kopieerbewerking terugkeert, een schijf die afwisselend loskoppelt en opnieuw verbinding maakt, of herhaalde I/O-fouten moeten echter wel serieus worden genomen.

In dit geval voer ik drie controles uit voordat ik de configuratie aanpas:

  • Vervang de kabel, de USB-poort of de voeding als het apparaat extern is;
  • Controleer of de schijf correct is geïdentificeerd met lsblk En blkid ;
  • Controleer de SMART-status om te zien of het een harde schijf of een SSD betreft.
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
sudo blkid
sudo smartctl -a /dev/sdX

Vervangen /dev/sdX door de juiste schijf te selecteren. Kopieer deze opdracht niet blindelings naar een machine met meerdere schijven. Als u twijfelt, stop dan bij lsblk en identificeer het model, de afmetingen en het bevestigingspunt voordat u verdergaat.

Noteer de exacte fout voordat u deze corrigeert.

Het beste gebruik van dmesgHet doel is niet om een ​​wondermiddel te vinden, maar om een ​​specifieke fout vast te leggen voordat je actie onderneemt. Kopieer een paar regels rondom het bericht, noteer het tijdstip, het betrokken apparaat en de actie die het probleem veroorzaakt.

sudo dmesg -T | tail -n 120 > core-diagnostic.txt
sudo journalctl -k -b -p warning..alert --no-pager >> core-diagnostic.txt

Pas dan kun je beslissen: welke kabel je moet vervangen, van welke schijf je een back-up moet maken, welke driver je moet controleren, welke fstab-regel je moet aanpassen, welke firmware je moet installeren of welke service je moet bewaken. Deze stap lijkt vanzelfsprekend, maar voorkomt een hoop absurde diagnoses, vooral bij intermitterende storingen.

Als u een externe machine beheert, wees dan extra voorzichtig. Een schijf- of netwerkfout die in de kernel wordt gedetecteerd, kan uiteindelijk uw toegang verbreken. Houd een sessie open, bied indien mogelijk consoletoegang en herstart de machine niet voordat u begrijpt wat de kernel u probeert te vertellen.