Überwachung eines LSI SAS2 Controllers (SAS2008) mit Nagios

Der LSI SAS Controller wird durch das Kernel-Modul mpt2sas betrieben. Für das anzeigen des Status wird ein CLI Tool mit dem Namen sas2ircu benötigt. Aktuelle Debian bzw. Ubuntu Pakete sind auf der Webseite http://hwraid.le-vert.net/wiki/DebianPackages#no1 zu finden.

Damit man die Ausgabe dieses CLI Tools mit Nagios überwachen kann, benötigt man das Nagios-Plugin check_sas2ircu.

Damit das Nagios-Plugin funktionierte, muss es natürlich mit sudo gestartet werden. Damit dies funktioniert, muss man in die Datei /etc/sudoers noch die folgende Zeile eintragen:

nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_sas2ircu

Überwachung des 3ware Controllers SAS9750-8i mit Nagios

Um den Status eines RAID bei einem 3ware Controller abzufragen, gibt es ein CLI Tool mit dem Namen tw_cli. Jonas Genannt war so nett und hat dazu ein paar Debian-Pakete gebaut, die auch unter Ubuntu laufen. Diese findet man auf der Webseite http://jonas.genannt.name/.

Die Ausgabe dieses CLI Tools kann man dann wiederum mit Nagios überwachen. Dadurch bekommt man sofort mit, wenn eine Festplatte ausfällt. Ich habe dazu das Nagios-Plugin check_3ware_raid_1_1 verwendet. Es gibt aber auch noch diverse andere.

Damit das Nagios-Plugin funktionierte, musste ich allerdings einen Softlink für das tw_cli im Verzeichnis der Nagios-Plugins anlegen und das Nagios Plugin mit sudo starten. Damit dies funktioniert, muss man in die Datei /etc/sudoers natürlich noch die folgende Zeile eintragen:

nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_3ware_raid_1_1

AHCI nachträglich bei Windows 7 oder Vista aktivieren

Als ich Vorgestern ein Image eines Windows 7 Computers auf neue Hardware übertrug stellte ich überrascht fest, dass der Bootvorgang mit einem Bluescreen durch einen stop 0x0000007B error beendet wurde. Dieser Fehler kommt, wenn Windows auf seine Bootfestplatte nicht zugreifen kann. Wenn er nach einem Hardwarewechsel auftaucht, hat man meistens einen falschen oder nicht vorhandenen Treiber für den neuen Festplattencontroller. In meinem Fall hatte das Windows 7 aber den normalen IDE Treiber von Microsoft, der mit den meisten Controllern zurecht kommt.

Nach längeren Tests fand ich dann heraus, dass Windows ohne Probleme bootete, wenn man im BIOS den Controller von AHCI auf IDE umstellte. Windows kann also nicht mit AHCI umgehen, wenn man es mit IDE installiert hat.

Nach dem lesen von diversen KB-Artikeln von Microsoft habe ich aber eine Lösung gefunden. Man kann nämlich in der Registry einstellen, dass die AHCI-Treiber von Windows beim Booten geladen werden. Danach bootet Windows auch mit einem AHCI-Controller. Im folgenden nun eine kleine Anleitung dafür (sie funktioniert zumindest bei Intel-Controllern):

  1. Den Controller im BIOS auf IDE stellen, damit Windows startet
  2. regedit starten
  3. In den beiden Schlüsseln HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\iastorv und HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\msahci den Wert Start auf 0 setzen (das heißt er soll den Treiber gleich beim booten laden)
  4. Neustart von Windows und umstellen des Controllers im BIOS auf AHCI

Überprüfen der Festplattenauslastung bei Linux

Bei Servern will ab und zu die Festplattenauslastung überprüfen. Gerade wenn auf einem Server mehrere virtuellen Gäste laufen, ist es sehr interessant zu erfahren wie ausgelastet ein Controller bzw. die Festplatten an diesem sind. Um die Auslastung zu überprüfen eignet sich unter Linux meiner Meinung nach sehr gut das Programm iostat. Dies ist unter Debian/Ubuntu in dem Paket sysstat enthalten und lässt sich mit dem folgenden Befehl installieren.

apt-get install sysstat

Ich verwende meistens die Parameter d und x, gebe also den folgenden Befehl ein.

iostat -dx

Der Befehl erzeugt dann eine Tabelle mit den Daten zu allen IO-Devices aus der man die wichtigsten Infos über die Auslastung ablesen kann. Die Ausgabe sieht ungefähr wie folgt aus.

Linux 3.2.0-32-generic (ubuntu05)       26.10.2012      _x86_64_        (16 CPU)
 
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
scd0              0,00     0,00    0,00    0,00     0,00     0,00     8,00     0,00   58,46   58,46    0,00  58,46   0,00
sda               0,00     5,97    0,00   11,19     0,02   520,12    92,98     1,77  158,44   36,01  158,48  11,82  13,22
sdb               0,02     0,64    1,24    3,31   109,92   322,72   190,03     0,09   20,04    2,74   26,54   1,59   0,72
dm-0              0,00     0,00    1,26    3,94   109,90   322,66   166,38     0,10   18,51    2,90   23,52   1,39   0,72
dm-1              0,00     0,00    0,00    0,02     0,01     0,07     8,00     0,00   47,59    3,78   56,58   1,80   0,00

Erweitern eines Datenträgers unter Windows Server 2003, Windows XP und Windows 2000

Im Gegensatz zu Windows 2008 und Windows 2008R2 ist es bei älteren Windows Versionen nicht möglich Partitionen über die Datenträgerverwaltung zu erweitern. Dies geschieht hier über das Kommandozeilentool diskpart.exe. Wenn man in einer Eingabeaufforderung diskpart.exe eingibt, erscheint eine Shell. In dieser kann man sich mit dem Befehl list volume eine Liste der Datenträger anzeigen lassen. Wenn man den richtigen identifiziert hat, kann man diesen mit select volume auswählen und mit extend [size=n] [disk=n] [noerr] vergrößern. Dabei ist zu beachten, dass das Vergrößern nur funktioniert, wenn die Auslagerungsdatei nicht auf dem Datenträger liegt und das Betriebssystem nicht von dort gestartet wurde.

Nähere Informationen findet man bei Microsoft auf der Webseite unter dem folgenden Link: http://support.microsoft.com/kb/325590/de.

Oft möchte man aber bei einem älteren Windows 2003 Server eben genau die C-Partition mit dem Betriebssystem vergrößern, weil diese durch die ganzen Sicherheitsupdates inzwischen überläuft. Dank dem Blog root1024 habe ich dafür das Kommandozeilentool expart.exe von Dell entdeckt. Dieses Tool kann Systempartition (und natürlich auch andere Partitionen) einfach online (ohne Neustart) erweitern.

Linux: Austausch einer defekten Festplatte im Software-RAID

Der Status des Software RAID (Redundant Array of Independent Disks) wird bei Linux in der Datei /proc/mdstat festgehalten. Man kann sich den Status eines RAID also mit folgenden Befehl anzeigen lassen:

cat /proc/mdstat

Wenn z.B. die Festplatte /dev/sdb defekt ist, könnte die Ausgabe von wie folgt aussehen:

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear] [multipath]
md2 : active raid1 sdb3[2](F) sda3[0]
730202368 blocks [2/1] [U_]
 
md1 : active raid1 sda2[0] sdb2[2](F)
264960 blocks [2/1] [U_]
 
md0 : active raid1 sdb1[1](F) sda1[0]
2102464 blocks [2/2] [U_]

Details über die einzelnen RAID Devices kann man sich mit dem Befehl mdadm anzeigen lassen. Wenn man die Details von md1 sehen möchte gibt man also den folgenden Befehl ein:

mdadm --detail /dev/md0

Bevor eine neue Festplatte verbaut wird, sollte jetzt zunächst die defekte Festplatte aus dem RAID entfernt werden.

mdadm /dev/md0 -r /dev/sdb1
mdadm /dev/md1 -r /dev/sdb2
mdadm /dev/md2 -r /dev/sdb3

Unter Umständen kann es sein, dass eine verwendete Festplatte teilweise defekt ist und sich nicht alle Devices im Status [U_] befinden, sondern einige Devices im Status [UU] sind. In diesem Fall schlägt der Befehl fehl, da das device in Ordnung ist. In diesem Fall müssen vorher die intakten Devices mit dem Befehl mdadm als defekt markiert werden. Wenn in unserem Beispiel das Device md1 noch intakt wäre, könnte man dies mit dem folgenden Befehl erreichen:

mdadm --manage /dev/md1 --fail /dev/sdb2

Danach kann die neue Festplatte verbaut werden. Wenn dies geschehen ist können Partitionierung und Bootsektor von der intakten Festplatte mit dem Befehl dd kopiert werden. Das kopieren der Partitionstabelle mit dd funktioniert nicht für extended-Partitionen, diese müssen von Hand angelegt werden. Da in unserem Beispiel keine extended-Partitionen vorkommen, könnte man mit dem folgenden Befehl Partitionierung und Bootsektor auf die neue Festplatte kopieren:

dd if=/dev/sda of=/dev/sdb count=1 bs=512

Die Partitionstabelle muss nun vom Kernel neu eingelesen werden.

sfdisk -R /dev/sdb

Zum Schluss müssen die Partitionen der neuen Festplatte noch in das RAID eingebunden werden:

mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md1 -a /dev/sdb2
mdadm /dev/md2 -a /dev/sdb3

Die neuen Partitionen sind somit Teil des Arrays und werden nun synchronisiert. Dieser Vorgang kann je nach Größe eine ganze Weile dauern. Mittels cat /proc/mdstat kann der Status der Synchronisation aufgerufen werden.

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear] [multipath] 
md2 : active raid1 sdb3[2] sda3[0]
      730202368 blocks [2/1] [U_]
      [==>..................]  recovery = 11.7% (85713024/730202368) finish=143.8min speed=74694K/sec
 
md0 : active raid1 sdb1[2] sda1[0]
      2102464 blocks [2/1] [U_]
        resync=DELAYED
 
md1 : active raid1 sdb2[1] sda2[0]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

OMSA unter Ubuntu für den Dell PERC H700 einrichten

In den Dell PowerEdge Servern wird aktuell häufig der PERC H700 RAID-Controler verbaut. Als ich Heute bei einem solchen Server – der mit der aktuellen „Long Term Support“ Ubuntu-Version „10.04 LTS“ läuft – den OMSA (OpenManage Server Administrator) installierte, überraschte mich dieser gleich mit der Warnung: Controller 0 [PERC H700 Integrated]: Driver '00.00.04.01' is out of date.

Nach ein wenig Recherche im Internet zeigte sich, dass der Treiber 00.00.04.01 eigentlich o.k. ist. Da bei RedHat und SuSe aber inzwischen neuere Treiber verwendet werden, verlangt der OMSA hier den neuen.

Da mich die Warnung in der Überwachung stört, habe ich diese einfach abgeschaltet. Dazu ändert man einfach die Datei lsiver.cfg entsprechend ab. Wenn man das OMSA 6.4 Paket von Dell installiert hat (dieses finde man unter der URL: http://linux.dell.com/repo/community/deb/), liegt diese Datei in dem Verzeichnis /opt/dell/srvadmin/etc/srvadmin-storage/.

In der Datei lsiver.cfg gibt es einen Abschnitt der wie folgt beginnt:

ID=0x1F17
VENDORID=4
NAME=PERC H700 Integrated

In diesem Abschnitt steht etwas weiter unten die Zeile:

DEF-LX26-64=00.00.04.27

Wenn man hier die 27 in 01 ändert und alle OMSA Services (am besten den ganzen Server) neu startet ist der Alarm weg.

Spezielle Routen für NetApp’s

Im HTTP-Managementinterface von NetApp kann man leider keine speziellen Routen eintragen. Um dennoch eine Route zu setzen, muss man über eine Telnet- oder SSH-Verbindung auf dem Filer in der Datei /etc/rc eine Zeile einfügen. Da es keinen Editor auf der NetApp gibt, muss diese Datei mit dem Befehl wrfile /etc/rc komplett überschrieben werden. Vorher sollte man sich diese Datei natürlich mit rdfile /etc/rc anzeigen lassen, um die alten Einstellungen übernehmen zu können (am besten dabei gleich eine Sicherheitskopie anfertigen). Nachdem man den Befehl wrfile /etc/rc eingibt erscheint ein Prompt, in das man die zuvor angezeigte und um eine Zeile erweiterte Datei eingibt und die Eingabe anschließend mit Str-C beendet. Danach sollte man die NetApp einmal neu starten und die Route sollte aktiv sein.

Im folgenden ein Beispiel der Datei /etc/rc. In dem Beispiel ist mit der roten Zeile eine spezielle Route für das Netzwerk 192.168.140.0 auf das Gateway 192.168.1.9 konfiguriert worden.

#Auto-generated by setup Mon Apr 26 10:11:50 CEST 2010
hostname netapp1
ifconfig e0a `hostname`-e0a mediatype auto flowcontrol full partner 192.168.1.45
ifconfig e0b `hostname`-e0b mediatype auto flowcontrol full partner 192.168.1.55
route add inet 192.168.140.0 192.168.1.9 1
route add default 192.168.1.10 1
routed on
options dns.domainname ohl.local
options dns.enable on
options nis.enable off
savecore