Ubuntu 12.04 Precise: Kernel 3.8 mit LTS Support

Ubuntu 12.04.3 wird den Kernel 3.8 aus Quantal enthalten. Noch ist 12.04.3 nicht verfügbar, aber das Meta Package existiert schon:

sudo apt-get install linux-generic-lts-raring

Damit hat man auf seiner Ubuntu Longterm einen aktuellen Kernel (u.a. mit mdadm TRIM Support).

Eine Sache ist mir aber noch aufgefallen. Es scheint so zu sein, dass neuere Kernel-Header keine version.h mehr enthalten. Dadurch gibt es dann z.B. noch Probleme beim Bauen von Kernel-modulen (z.B. drbd8) mit module-assistant. Es kommt dann die Meldung dass die Kernel Header des aktuellen Kernels fehlen würden. Folgendes hat mir dann geholfen:

cp /usr/include/linux/version.h /usr/src/linux/include/linux/

mdadm Softraid on SSD with TRIM

Seit Kernel 3.7 unterstützt das mdadm Softraid den TRIM Befehl.

SSDs benötigen Idealerweise Raum für ihren Wear leveling Algorithmus. Da das mdadm RAID aber die gesamte Partition als „belegt“ beansprucht, hat der SSD Controller wenig Ausweichmöglichkeiten und die Schreibperformance geht in den Keller. Da kann man nur die Spare Area mit hdparm vergrößern – verschenkt aber damit wertvollen Platz. Dateisysteme (z.B. ext4) verstehen schon länger den TRIM Befehl (Mountoption „discard“) – aber dies nützt(e) nichts wenn das Dateisystem auf einem Softraid liegt.

Bis Kernel 3.7 bekam man nur folgendes zu sehen:

root@node:~# fstrim /
fstrim: /: FITRIM ioctl failed: Operation not supported

Ab Kernel 3.7 sieht es dann besser aus:

root@node:~# fstrim -v /
/: 12858519552 bytes were trimmed

Linux: USB generell abschalten

Möchte man den USB Support im Kernel generell abschalten geht dies mit dem Kernelparameter „nousb“. Also folgendes z.B. in die grub.conf eintragen:

title CentOS (2.6.18-194.17.4.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-194.17.4.el5 ro root=/dev/md1 nousb
        initrd /initrd-2.6.18-194.17.4.el5.img

Oder bei grub2 so wie hier.

Kernellimit: 8-Fach Serielle Karte

Für einen Konsolenserver wurde eine 8-Fach serielle Karte (PCIe, OX16PCI954) in einen Server eingebaut. Allerdings wurden nur 2 der 8 Schnittstellen erkannt…

Etwas Recherche ergab, dass es ein Limit für die max. unterstützen Schnittstellen im Treiber 8250 (serial) gibt. Der Parameter „nr_uarts=10“ erhöht z.B. auf 10 Schnittstellen. Da der Treiber allerdings in der Regel mit im Kernel integriert ist (und nicht als Modul konfigriert werden kann) wird am besten beim Booten die richtige Einstellung mitgegeben.

Hier die Grub-Konfiguration im Falle von Ubuntu:

# /boot/grub/menu.lst
title           Ubuntu 9.04, kernel 2.6.28-15-server
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.28-15-server root=/dev/md0 ro quiet splash 8250.nr_uarts=10
initrd          /boot/initrd.img-2.6.28-15-server

Ansonsten könnte man auch zur Laufzeit den Parameter setzen. Oder in wie im folgenden Fall auslesen ob das Limit korrekt gesetzt wurde:

cat /sys/module/8250/parameters/nr_uarts

Modulparameter auflisten

Ewig habe ich nach einem Weg gesucht, mögliche Parameter zu einem Kernelmodul auszulesen. Bisher habe ich immer im Quelltext nach der richtigen Syntax geschaut. Da dort aber auch eine Beschreibung des Parameters hinterlegt ist muss diese doch auch irgendwie ausgegeben werden können…

Um die Informationen auszulesen ist das Kommando „modinfo“ zuständig. Man muss eben nur das richtige Tool kennen…

Beispiel lirc_imon

home:~/lirc/drivers/lirc_imon# modinfo lirc_imon
filename:       /lib/modules/2.6.28-etobi.3-686/misc/lirc_imon.ko
license:        GPL
version:        0.6
description:    Driver for SoundGraph iMON MultiMedia IR/Display
...
parm:           debug:Debug messages: 0=no, 1=yes(default: no) (int)
parm:           display_type:Type of attached display. 0=autodetect, 1=vfd, 2=lcd, 3=vga, 4=none (default: autodetect) (int)
parm:           ir_protocol:Which IR protocol to use. 0=native iMON, 1=Windows Media Center Ed. (RC-6) (default: native iMON) (int)
parm:           nomouse:Disable mouse input device mode when IR device is open. 0=don't disable, 1=disable. (default: don't disable) (int)