Wie man top und pstree dazu bringt, lange Zeilen auszugeben

Wer schonmal ein Script geschrieben hat und die Ausgaben einiger Befehle in ein Logfile umgeleitet hat, der kennt das Problem: es werden je nach OS-Einstellungen Spalten abgeschnitten.

In Top sieht das dann so aus:

top - 10:14:45 up 29 min,  1 user,  load average: 0,33, 0,27, 0,25
Tasks: 275 total,   1 running, 274 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3,4 us,  0,8 sy,  0,0 ni, 95,3 id,  0,2 wa,  0,1 hi,  0,1 si,  0,0 st
KiB Mem :  8070108 total,  3490724 free,  2117316 used,  2462068 buff/cache
KiB Swap:  7998316 total,  7998316 free,        0 used.  5548784 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 3093 Schelm    20   0 1781624 630728 127256 S  31,2  7,8   4:34.94 /usr/lib64+
 3995 Schelm    20   0  157976   4252   3628 R  12,5  0,1   0:00.02 top -c -b +
 2718 Schelm    20   0  602980 169084  73132 S   6,2  2,1   0:45.25 skype
 3433 Schelm    20   0  733632  37944  27296 S   6,2  0,5   0:03.28 /usr/libex+

Für TOP und PSTREE gibt es aber eine jeweils einfache Lösung:

top -b -c -n 1 -w 240

Damit gibt man im Batchmode (-b) wieviele Spalten man sehen will ( -w ), in unserem Fall 240. pstree hat zwar keine Spaltenangabe, aber man kann das Abbrechen abschalten (-l):

pstree –lup

Damit wir möglichst lange Zeilen bekommen, ist hier noch -u für Usernamen und -p für ProcessIds mit angegeben.

Der erste Advents Nicht-Boot

Wenn Ihr Rechner beim Booten laufend nach dem Festplattenentschlüsselungspasswort fragt, aber das Kryptolaufwerk einfach nicht starten will, könnte es sein, daß es das tatsächlich schlicht nicht kann, weil es nicht da ist.

Was zunächst wie eine Sträter Geschichte, so gegen Mittag, kurz vorm Frühstück, anfängt, löste sich zum Glück schnell wieder auf. Hier eine Kurzzusammenfassung:

Wenn das Stromkabel nicht in der Platte steckt,
der Rechner beim Booten schlicht verreckt,
und kommt der wackre Linuxmann,
blitzesschnelle an die Hardware ran,
im Handumdrehen ist dann geschehen,
die Platte scheint doch noch zugehen.

EIne frohe und fehlerfreie Adventszeit.

Aktive Hardwaretreiber ermitteln

Wer kennt das nicht, das Laptop läuft unrund, erkennt vielleicht den WLAN Chip nicht mehr sauber und man möchte den Treiber ersetzen.

Erste Frage: Woher weiß man, welcher Treiber überhaupt zuständig ist ?

Dazu gibt es den wirklich tollen Befehl „lshw“ , den wir hier nur auf das Netzwerk ansetzen. Er kann aber auch alle andere HW ermitteln, einfach das -C Network  weglassen.

$  lshw -C Network
  *-network                 
       description: Ethernet interface
       product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
       vendor: Realtek Semiconductor Co., Ltd.
       physical id: 0
       bus info: pci@0000:02:00.0
       logical name: enp2s0
       version: 09
       serial: 40:16:7f:22:5b:43
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix vpd bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=2.3LK-NAPI duplex=full firmware=rtl8168f-1_0.0.5 06/18/12 ip=192.168.0.99 latency=0 link=yes multicast=yes port=MII speed=1Gbit/s
       resources: irq:45 ioport:d000(size=256) memory:d2104000-d2104fff memory:d2100000-d2103fff
  *-network:0
       description: Ethernet interface
       physical id: 1
       logical name: virbr0
       capabilities: ethernet physical
       configuration: broadcast=yes driver=bridge driverversion=2.3 firmware=N/A ip=192.168.122.1 link=no multicast=yes
  *-network:1 DISABLED
       description: Ethernet interface
       physical id: 2
       logical name: virbr0-nic
       serial: 52:54:00:0a:cf:07
       size: 10Mbit/s
       capabilities: ethernet physical
       configuration: autonegotiation=off broadcast=yes driver=tun driverversion=1.6 duplex=full link=no multicast=yes port=twisted pair speed=10Mbit/s

In Fett finden sich hier die Angaben zu den Treiber:

driver=tun driverversion=1.6
driver=bridge driverversion=2.3
driver=r8169 driverversion=2.3LK-NAPI

„tun“ ist der Tunneltreiber, also zum Aufbau von VPN Tunneln aller Art, „bridge“ ist für die Virtualisierungsbrücke, also wenn man per Boxen, VirtualBox oder KVM virtuelle Maschinen betreibt und „r8169“ ist dann endlich der RealTek Treiber für meine Netzwerkkarte. Je nach verbauter Hardware bekommt Ihr hier natürlich andere Treiber angezeigt.

Kurz Verifizieren:

# lsmod | grep r8169
r8169                  81920  0
mii                    16384  1 r8169

„lsmod“ zeigt die geladenen Kernelmodule an und nach unserem Treiber gefragt, sagt es, daß das Modul mii diesen Treiber einmal geöffnet hat. „mii“ ist ein Standard für Netzwerkkarten. Entsprechend benannt sind die mii-tools: u.a.

# mii-tool enp2s0
enp2s0: negotiated 1000baseT-HD flow-control, link ok

Die können natürlich noch viel mehr machen.

Wo findet man diesen Treiber jetzt ?

Unter /usr/lib/modules liegen sämtliche Kernelmodule nach kernels gruppiert, also suchen wir dort :

# find  /usr/lib/modules -name „*r8169*“
/usr/lib/modules/4.8.6-201.fc24.x86_64/kernel/drivers/net/ethernet/realtek/r8169.ko.xz
/usr/lib/modules/4.8.7-200.fc24.x86_64/kernel/drivers/net/ethernet/realtek/r8169.ko.xz
/usr/lib/modules/4.8.4-200.fc24.x86_64/kernel/drivers/net/ethernet/realtek/r8169.ko.xz

„ko“ steht für „kernelobject“ und „.xz“ ist ein einfacher Kompressionsalgorithmus, damit die Treiber nicht so viel Platz wegnehmen.  Jetzt darf man nicht auf die Idee kommen, daß wenn der Treiber im einen Kernel defekt ist, man einfach die Datei von einem alten Kernel kopiert, das klappt nicht 🙂 Selbst kompilieren ist angesagt, und das ist leider ein anderes Thema.

Das Ganze hier kann natürlich nur klappen, wenn der Treiber überhaupt funktioniert.

Wie bekommt man jetzt raus, welcher Treiber der richtige wäre, wenn er denn ginge ?

Der einfachste Weg: Linux Livedisk auf einen USB Stick ziehen, davon Booten und mit lshw nachsehen, was das System dazu meint. Die Treiber in den Livedisks sind i.d.R. etwas sagen wir mal „robuster“ gewählt. Ist natürlich keine Garantie. Ich empfehle auch eine Distro Livedisk zunehmen,  die entweder komplett anders ist als die auf dem System Distro installierte, oder viel neuer bzw. älter ist. Die Chance eine andere Treiberversion zu bekommen, ist dann einfach höher.

Es kommt leider mal vor, daß ein Patch für eine Chipserie eines Herstellers, den Support für ganz alte Chips entfernt oder daß die Initialparameter zum Ansteuern des älteren Chips mit Werten neuerer Chips der gleichen Serie ausgetauscht wurden. Das passiert einfach und ist keine böse Absicht des Herstellers Eurer Distro. Die Versuchen es halt auf soviel wie möglich Laptops/Mainboards zum Laufen zu bringen.

Wenn man erstmal eine funktionierende Version gefunden hat, kann man sich aus den dazugehörigen SOURCEN einen funktionierenden Treiber kompilieren und den dann auch im System laden. Idealerweise würde man den anders nennen, als den aus der Distro, so daß man den paralell installiert haben kann, ohne das er gleich wieder übergenagelt wird.

Treiber kann man im System üblicherweise beim Booten per Kernelparameter blacklisten, so das die nicht geladen werden, auch wenn sie vorhanden sind. Man trägt dann seinen eigenen Treiber in die /etc/modprobe.conf ein und der wird dann beim Start geladen. Dummerweise muß man den Treiber für jeden Kernel neu bauen. Kleiner Tip, schaut Euch mal AKMODS an, die bauen sich bei Updates selbst zusammen, wenn ein Treiber fehlt.