1 Systemdiagnose

Transcrição

1 Systemdiagnose
Systemdiagnose
1 Systemdiagnose
In diesem Kapitel lernen Sie
· die Fähigkeit, viele detaillierte Informationen über das System und die Hardware
zu finden, unter anderem, wie Sie herausfinden, welche Chipsätze Komponenten
wie Grafikkarten und Netzwerkkarten enthalten und was Sie zu deren Konfiguration benötigen.
· Kerneleigenschaften zur Laufzeit zu beeinflussen.
· Kernel-Laufzeitvariablen flüchtig und dauerhaft zu setzen.
· IDE-Festplattenzugriffe zu optimieren.
· SCSI-Geräte im laufenden Betrieb hinzuzufügen/zu entfernen.
1.1 Das /proc-Dateisystem
1.1.1
Das Verzeichnis /proc
Im Linux-Kernel wird eine besondere Schnittstelle für die Anzeige der KernelLaufzeit-Parameter benutzt. Die Schnittstelle besteht aus einem Pseudo-Dateisystem,
dem proc-Dateisystem (gemountet im Verzeichnis /proc). In diesem Dateisystem
finden sich alle möglichen Dateien, die Kernel-Parameter oder Kernel-Tabellen und
Strukturen beinhalten. „Pseudo-Dateisystem“ bedeutet dabei, dass dahinter kein physikalisches Gerät, vielmehr werden die Inhalte „Dateien“ beim Lesen direkt vom Kernel
geliefert. Viele UNIX-Administrationsprogramme nutzen die Informationen aus dem
/proc-Dateisystem.
Das /proc-Dateisystem ist einzigartig unter den Betriebssystemen, denn damit kann
man nicht nur richtig gut in den Kern und in die Hardware hineinschauen, sondern
auch Kernel-Parameter zur Laufzeit verändern.
Sehr ausführliche Dokumentation findet man in der Kernel-Dokumentation
/usr/src/linux/Documentation/filesystems/proc.txt
oder in der Man-Page man 5 proc.
Beispiele für /proc-Dateien:
interrupts ist eine Liste der benutzten Interrupts.
ioports ist eine Liste der belegten IO-Ports.
8
✎
1.1 Das /proc-Dateisystem
dma ist eine Liste der belegten DMA-Kanäle.
devices beinhaltet Informationen, welche Geräte-Treiber im Kernel geladen sind. Die
Zahl vor dem Treiber repräsentiert die Major-Number , also die Treiber-Nummer
des Geräte-Treibers. Will man Gerätedateien für dieses Gerät mit mknod anlegen, so muss man diesem unter anderem diese Treibernummer angeben.
pci hat Informationen über die PCI-Geräte im System. Ab Kernel 2.6 ist diese Datei
nicht mehr vorhanden; dafür sind ähnliche Informationen in der Datei
/proc/bus/pci/devices zu finden .
cpuinfo enthält den Typ/Geschwindigkeit des Prozessors.
mounts (LPI 2: 203.1) (LPI 2: 209.2) liefert eine stets aktuelle Liste der zur Zeit
gemounteten Dateisysteme (und ändert sich immer beim Aufruf eines mountbzw. umount-Kommandos). Dies ist besonders dann nützlich, wenn das RootFilesystem nur read-only gemountet ist, und dadurch die eigentlich dafür zuständige Datei /etc/mtab nicht den aktuellen Zustand repräsentieren kann. Das
Format der Datei ist mit dem der Datei /etc/fstab identisch, nur dass hier die
letzten beiden Spalten (die für fsck bzw. dump zuständig sind) keine Bedeutung haben und stets als 0 angegeben werden. Dokumentation zu dieser Datei
findet man mittels man mount und man fstab.
partitions ist eine Liste aller Partitionen aller Platten, die der Kernel kennt. Die Zahlen vor dem Gerätenamen sind die Major-Number, die Minor-Number der Gerätedatei und die Partitionsgröße.
tty/driver/serial zeigt den Zustand der seriellen Schnittstellen an.
sys/dev/parport/parportSchnittstellen-Nummer/ enthält Konfigurationen zu
den parallelen Schnittstellen. Besonders interessant ist hier die Datei irq, die
den der Schnittstelle zugewiesenen IRQ enthält (-1 bedeutet, dass die Schnittstelle keinen IRQ belegt). Beachten Sie dabei, dass das Modul parport_pc geladen sein muss, damit dies im /proc-Dateisystem erscheint.
sys/dev/cdrom/info zeigt Informationen über die eingebauten CD-Laufwerke an.
driver/rtc steht für „Real Time Clock“ und überwacht die Echtzeituhr des Systems.
Interessant ist hier der Batteriestatus!
loadavg zeigt den Durchschnittswert der Systemlast.
uptime zeigt an, wie lange das System schon läuft.
Tipp: Eine übersichtlichere und deutlich lesbarere Variante zu /proc/pci bzw.
/proc/bus/pci/devices liefert das Kommando lspci
9
Systemdiagnose
$ lspci
00:00.0 Host bridge: Acer Laboratories Inc. [ALi] M1541 (rev 04)
00:01.0 PCI bridge: Acer Laboratories Inc. [ALi] M5243 (rev 04)
00:07.0 ISA bridge: Acer Laboratories Inc.
[ALi] M1533 PCI to ISA Bridge [Aladdin IV] (rev c3)
00:08.0 Ethernet controller: Realtek Semiconductor Co. RTL-8139 (rev 10)
00:09.0 SCSI storage controller: Symbios Logic Inc. 53c810 (rev 23)
00:0a.0 SCSI storage controller: Symbios Logic Inc. 53c810 (rev 02)
00:0f.0 IDE interface: Acer Laboratories Inc. [ALi] M5229 IDE (rev c2)
01:00.0 VGA compatible controller: ATI Technologies 3D Rage IIC AGP (rev 7a)
Dieses Kommando ist nützlich, um herauszufinden, welchen Chipsatz eine neue Netzwerkkarte, die Grafikkarte oder der SCSI-Controller hat. Damit fällt es leicht, das passende Kernel-Treibermodul zu finden, da die Module auch nach dem Chipsatz benannt
sind, und nicht nach dem Kartennamen.
Tipp: Eine sehr gute Übersicht über Geräte, IRQs, I/O-Ports und DMA-Kanäle liefert
der Befehl lsdev (LPI 2: 201.5):
$ lsdev
Device
DMA
IRQ I/O Ports
-----------------------------------------------53c7,8xx
9 10
cascade
4
2
dma
0080-008f
dma1
0000-001f
dma2
00c0-00df
eth0
11 dc00-dcff
fpu
13 00f0-00ff
ide0
14 01f0-01f7 03f6-03f6 ffa0-ffa7
ide1
15 0170-0177 0376-0376 ffa8-ffaf
keyboard
1 0060-006f
ncr53c7,8xx
d400-d47f d800-d87f
pic1
0020-003f
pic2
00a0-00bf
rtc
8 0070-007f
serial
3 02f8-02ff 03f8-03ff
timer
0 0040-005f
vga+
03c0-03df
Tipp:
10
Auch procinfo liefert eine Übersicht über das System:
1.1 Das /proc-Dateisystem
# procinfo
Linux 2.6.18-8.el5 ([email protected]) (gcc 4.1.1 20070105)
#1 SMP Thu Mar 15 19:57:35 EDT 2007 1CPU [localhost]
Memory:
Mem:
Swap:
Total
483096
618492
Bootup: Mon Dec
user :
nice :
system:
idle :
steal :
uptime:
irq 0:
irq 1:
irq 3:
irq 4:
irq 5:
irq 6:
irq 7:
irq 8:
irq 9:
irq 10:
1.1.2
Used
446592
0
Free
36504
618492
1 14:40:40 2008
0:03:23.46
0:00:00.11
0:00:46.49
20:36:09.71
0:00:00.00
20:40:06.57
74421046
10
4
5
1
6
0
1
1
0
0.3%
0.0%
0.1%
99.7%
0.0%
Shared
0
Buffers
77876
Load average: 0.00 0.00 0.00 1/81 5225
page
page
swap
swap
in :
out:
in :
out:
0
0
0
0
context :
3840907
timer
i8042
floppy [2]
parport0
rtc
acpi
MPU401 UART
irq 11:
irq 12:
irq 14:
irq 15:
irq169:
irq177:
irq185:
irq193:
irq201:
irq209:
1
118
34099
667903
25548
0
0
0
0
23915
i8042
ide0
ide1
eth0
ohci_hcd:usb1
ohci_hcd:usb2
ohci_hcd:usb3
ehci_hcd:usb4
SiS SI7012, eth1
Das Verzeichnis /proc/net/
Einige Kernel-Netzwerk-Tabellen befinden sich im Verzeichnis /proc/net/.
✎
Beispiele /proc/net/-Dateien:
dev Tabelle der Netzwerk-Devices mit Statistiken
arp die ARP-Tabelle
route die Routing-Tabelle
ip_masquerade enthält eine Übersicht, über alle Verbindungen, die der Rechner über
IP-Masquerading weiterleitet (existiert ab Kernel 2.6 nicht mehr).
11
Systemdiagnose
1.1.3
Das Verzeichnis /proc/sys/
Das /proc/sys/-Verzeichnis enthält zwei Arten von Pseudodateien:
• Normale Dateien, die Statusinformationen ausgeben, wie alle, die wir oben
schon kennengelernt haben. Diese sind nur lesbar.
• Kernelparameter-Dateien. Diese repräsentieren die Werte von Kernelvariablen,
etwa die maximal mögliche Anzahl an geöffneten Dateien, das IP-Forwarding,
etc. In diese Dateien kann auch vom Systemadministrator geschrieben werden.
Dadurch lässt sich der Wert dieser Variablen ändern. Dies ist jedoch ein flüchtiger Zustand. Beim nächsten Neustart sind die Einstellungen zurückgesetzt. Abhilfe schafft bei RedHat und Debian das Utility sysctl (Konfigurationsdatei
/etc/sysctl.conf), mit dem sich diese Einstellungen dauerhaft konfigurieren
lassen. Auch SuSE verwendet mittlerweile sysctl mit der zusätzlichen Konfigurationsdatei /etc/sysconfig/sysctl.
Allgemeine Kernel-Parameter regeln die allgemeinen Eigenschaften des Kernels.
Beispiele:
✎
fs/ Dieses Unterverzeichnis enthält Parameter, die Dateisysteme betreffen.
fs/file-max enthält die maximale Anzahl geöffneter Dateien, die der Kernel verwaltet.
Beispiel:
# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
kernel In diesem Unterverzeichnis kann man das Verhalten des Kernels wie etwa Scheduling, Speicherverwaltung oder Kernelausgaben beeinflussen (LPI
2: 201.1).
kernel/panic Steht hier eine 0, dann bleibt der Kernel beim Systemabsturz in einer
Panic-Schleife; ungleich 0 bedeutet, dass der Kernel nach so vielen Sekunden
automatisch das System wieder hochfahren soll.
kernel/version enthält die Kernel-Version.
12
✎
1.1 Das /proc-Dateisystem
kernel/ctrl-alt-del Ist diese Variable 0, so wird ein Signal an den init-Prozess weitergeleitet, so dass dieser elegant das System herunterfahren kann. (Siehe entsprechende Zeile in /etc/inittab.) Ist diese Variable 1, so macht der Kernel
bei dieser Tastenkombination einen unbarmherzigen Reboot, ohne die PlattenCaches auf die Platte zurückzuschreiben.
vm/ In diesem Unterverzeichnis befinden sich Kernelparameter zur Speicherverwaltung. Ab Kernel-Version 2.6 gibt es eine Datei namens swappiness. Sie enthält
eine Zahl zwischen 0 und 100. Höhere Werte führen dazu, dass das System versucht, so viel wie möglich an passiven Prozessen auszulagern, so dass mehr
Speicher für laufende Anwendungen frei wird. Niedrigere Werte führen dazu,
dass mehr Anwendungen im Speicher gehalten werden, auch wenn sie sich im
Ruhezustand befinden.
✎
Beispiel:
# cat /proc/sys/vm/swappiness
60
# echo 50 > /proc/sys/vm/swappiness
# cat /proc/sys/vm/swappiness
50
IP-Kern-Parameter befinden sich in den /proc/sys/net/ipv4/-Dateien.
✎
Beispiele:
ip_forward Das IP-Forwarding (Routing) ist bei „1“ eingeschaltet und bei „0“ ausgeschaltet. Das bedeutet, dass, bei aktiviertem IP-Forwarding, Pakete von einer
Netzwerkschnittstelle auf die andere durchgeleitet werden.
tcp_syncookies bietet, wenn es aktiviert ist, Schutz gegen das Überfluten des Rechners mit Verbindungsaufbau-Paketen (SYN-Flooding ). Soll aktiviert sein.
ip_always_defrag defragmentiert IP-Pakete immer. Ist auf jeden Fall bei einer Firewall notwendig. Da die Quell- und Zieladressen sowie Ports, nach denen ja
gefiltert wird, nur im Header des Pakets und damit im ersten Fragment stehen,
so muss man, um über ein fragmentiertes Paket zu entscheiden, dieses erst defragmentieren. Diese Datei existiert ab Kernel 2.6 nicht mehr.
conf/Schnittstelle/rp_filter aktiviert für die angegebene Schnittstelle den Schutz
gegen IP-Spoofing, also den Schutz vor vorgetäuschten IP-Adressen. Soll aktiviert sein.
13
Systemdiagnose
conf/Schnittstelle/accept_redirects legt fest, ob die Schnittstelle ICMP-Redirects unterstützt. Dies wird meist nur für Angriffe ausgenutzt und soll daher
deaktiviert sein.
conf/Schnittstelle/accept_source_route lässt auf dieser Schnittstelle SourceRouting zu, das heißt, dass der Absender eines Paketes festlegt, welchen Weg
das Paket nimmt. Auch das ist heute fast nur für Angriffe nützlich und soll daher
deaktiviert sein.
1.1.4
Die Prozessnummern-Verzeichnisse
sind direkte Unterverzeichnisse von /proc/ (LPI 2: 201.5) in der Gestalt
/proc/Prozessnummer/
In diesen Verzeichnissen findet man alle Informationen über einen laufenden Prozess.
Inhalte:
cmdline Die Kommandozeile des Programmaufrufs
environ Die Umgebungsvariablen des Prozesses
cwd Das aktuelle Verzeichnis des Prozesses
mem Speicherverbrauch des Prozesses
exe Die ausführbare Datei, die den Prozess erzeugt hat
root Verknüpfung auf das root-Verzeichnis des Prozesses
Achtung: Manchmal sperrt man aus Sicherheitsgründen Prozesse, die ein Sicherheitsrisiko darstellen, in einen Sandkasten, also einem kleinen Root-Dateisystem, ein, damit sie am System keinen Schaden anrichten können. Diesen Sandkasten kann man mit dem Befehl chroot erzeugen und deswegen
nennt man das in der Fachsprache chroot-Umgebung . In dieser darf jedoch kein
/proc-Dateisystem gemountet werden, denn mit /proc/1/root/ kann man das
ursprüngliche Root-Verzeichnis zurückerhalten. Damit kann das unter Umständen eine Sicherheitslücke darstellen.
1.2 Kernel-Variablen dauerhaft verankern
Bei SuSE, RedHat und Debian findet das Utility sysctl (LPI 2: 204.2) Verwendung, das beim Hochfahren des Systems die Kernel-Variablen auf die in der Datei
/etc/sysctl.conf angegebenen Werte setzt:
14
!
1.3 IDE- und SCSI-Geräte überwachen und steuern
✎
Beispieldatei für einen Router/Firewall:
/etc/sysctl.conf
# IP-Spoofing verhindern
net.ipv4.conf.all.rp_filter = 1
# ICMP-redirects verhindern
net.ipv4.conf.all.accept_redirects = 0
# Source-Routing deaktivieren
net.ipv4.conf.all.accept_source_route = 0
# IP-Forwarding aktivieren
net.ipv4.ip_forward = 1
# IP-Pakete immer defragmentieren (f. Paketfilter-Firwall notwendig)
# Nicht möglich, wenn Masquerading betrieben wird
# Ab Kernel 2.6 nicht mehr vorhanden
# net.ipv4.ip_always_defrag = 1
# TCP SYN Cookie-Schutz aktivieren
net.ipv4.tcp_syncookies= 1
Anstatt der umständlichen Schleifen kann man hier einfach das Schlüsselwort all verwenden.
Tipp: Hat man zur Laufzeit des Systems etwas an dieser Konfigurationsdatei verändert, so kann man mit
# sysctl -p
die aktuelle Konfiguration aktivieren.
1.3 IDE- und SCSI-Geräte überwachen und steuern
1.3.1
IDE-Geräte
Informationen über IDE-Geräte findet man unter /proc/ide/Gerät/:
cache Größe des Hardware-Cache
capacity Kapazität der Platte
15
Systemdiagnose
geometry Hard-/Softwaregeometrie der Platte
model Modell-Bezeichnung
settings Festplattenparameter
1.3.2
Festplatten-Tuning
bedeutet, dass man an einigen Parametern der Festplatte herumschrauben kann. Dies
kann jedoch unter Umständen fatale Folgen haben (Datenverlust), falls nicht von fachkundiger Hand durchgeführt. Hier beschränken wir uns auf ungefährliche Optimierungen.
Das Utility hdparm manipuliert die Festplatten-Laufzeit-Parameter (LPI 2: 204.2: hdparm).
Hier die Benutzung anhand einiger
Beispiele:
Geräteinformationen: # hdparm -i /dev/hda
/dev/hda:
Model=ST320423A, FwRev=3.02, SerialNo=7EJ0Y17L
Config= HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5%
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=512kB, MaxMultSect=32, MultSect=32
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=40011300
IORDY=on/off, tPIO=min:240,w/IORDY:120, tDMA=min:120,rec:120
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 *udma4
Hier kann man einiges an Informationen entnehmen: Die Platte unterstützt LBA,
Ultra DMA 4, das gerade aktiv ist.
Es gibt folgende Arten der Datenübertragung zwischen Festplatte und Hauptspeicher:
Programmed IO Die PIO-Modi 0–5 benutzen die CPU als Teil des Datenübertragungsweges und verbrauchen daher Rechenzeit. Die maximalen
Datenübertragungsgeschwindigkeiten reichen von 3,3 MB/s (PIO 0) bis
16,6 MB/s (PIO 5).
Direct Memory Access bedeutet, dass die Festplatte ohne Zutun der CPU die
Daten in den Hauptspeicher überträgt. Es existieren die Spielarten MDMA (Multiword DMA) und UDMA (Ultra DMA). Ersteres spielt heute
16
✎
1.3 IDE- und SCSI-Geräte überwachen und steuern
eine untergeordnete Rolle, während fast alle modernen Platten Ultra DMA
beherrschen. Derzeit existieren die Ultra DMA-Modi 0–5. Die maximalen
Datenübertragungsgeschwindigkeiten reichen von 16,7 MB/s (UDMA 0)
bis 100 MB/s (UDMA 5).
DMA-Modus aktivieren/deaktivieren:
# hdparm -d 1 /dev/hda
# hdparm -d 0 /dev/hda
# DMA aktivieren
# DMA deaktivieren
Sollte die Platte kein DMA unterstützen, fällt sie automatisch in den vorigen
Modus zurück.
Ultra DMA-Modus aktivieren Die Festlegung des Übertragungsmodus erfolgt mit
dem Argument -X und einer darauffolgenden Zahl, die den Übertragungsmodus
bestimmt:
Modus
PIO-0
PIO-1
PIO-2
PIO-3
PIO-4
✎
Zahl
8 (0+8)
9 (1+8)
10 (2+8)
11 (3+8)
12 (4+8)
Modus
MDMA-0
MDMA-1
MDMA-2
Zahl
32 (0+32)
33 (1+32)
34 (2+32)
Modus
UDMA-0
UDMA-1
UDMA-2
UDMA-3
UDMA-4
UDMA-5
Zahl
64 (0+64)
65 (1+64)
66 (2+64)
67 (3+64)
68 (4+64)
69 (5+64)
Beispiel: Aktivieren des UDMA-5 auf der ersten IDE-Platte im System:
# hdparm -d 1 -X 69 /dev/hda
/dev/hda:
setting using_dma to 1 (on)
setting xfermode to 69 (UltraDMA mode5)
using_dma
= 1 (on)
Multisektormodus (IDE-Blockmode) aktivieren Moderne IDE-Festplatten haben zumeist die Fähigkeit, nicht nur einen Sektor zu 512 Bytes, sondern gleich mehrere
Sektoren hintereinander in einem Zug zu übertragen. Da bei größeren Dateien
auf der Platte meist die Daten auf hintereinanderliegenden Sektoren abgelegt
sind, beschleunigt das den Dateizugriff erheblich.
Um den Multisektormodus zu aktivieren, müssen Sie zuerst herausfinden, wieviele Sektoren die Platte pro Zugriff gleichzeitig übertragen kann:
17
Systemdiagnose
# hdparm -i /dev/hda
/dev/hda:
Model=FUJITSU MHT2040AT, FwRev=009A, SerialNo=NN67T3813W96
Config= HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=DualPortCache, BuffSize=2048kB,
MaxMultSect=16, MultSect=off
...
Im dargestellten Beispiel sehen Sie, dass die Platte Multisektormodus mit 16
Sektoren gleichzeitig beherrscht. Im Beispiel aktivieren Sie den Multisektormodus wie folgt:
# hdparm -m 16 /dev/hda
/dev/hda:
setting multcount to 16
multcount
= 16 (on)
Datentransferrate testen: # hdparm -Tt /dev/hda
/dev/hda:
Timing buffer-cache reads:
Timing buffered disk reads:
128 MB in 2.40 seconds = 53.33 MB/sec
64 MB in 3.40 seconds = 18.82 MB/sec
Die Kommunikation zwischen Plattencontroller und Rechner erfolgt hier mit
53 MB pro Sekunde, der effektive Datentransfer beim Lesen von der Platte ist
rund 19 MB pro Sekunde.
Plattenmotor abschalten: Nach einer gewissen Zeit der Inaktivität kann man den
Plattenmotor ruhen lassen. Er fährt dann erst beim nächsten Zugriff wieder hoch.
Dies ist vor allem bei Laptops nützlich, um Batterie zu sparen:
# hdparm -S 180 /dev/hda1
Hier schalten wir den Plattenmotor nach 15 Minuten = 180 mal 5 Sekunden ab.
Werte von 1 bis 240 sind möglich. Für längere Zeiten siehe die Man-Page von
hdparm.
Man kann den Plattenmotor mit
18

Documentos relacionados