Ü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

Windows 7 Bootmanager neu anlegen

Mir ist gerade ein Bootmanager von Windows 7 um die Ohren geflogen und ich einen halben Tag gebraucht, um diesen wieder neu zu installieren. Damit es beim nächsten mal schneller geht, habe ich mir im folgenden die Befehle für eine erneute Installation notiert.

Automatische Reparatur von Windows 7
In vielen Fällen hilft die automatische Reparatur von Windows 7. Diese sollte man immer mindestens drei mal ausführen, da bei jeder Reparatur nur ein Fehler behoben wird. Wenn dies nicht hilft muss man von Hand reparieren und dazu die folgenden Schritte ausführen oder über UEFI booten. UEFI wird aber nur von aktueller Hardware unterstützt.

Boot Manager von Hand einrichten

attrib -h -s C:\boot\BCD
del C:\boot\BCD
bcdedit /createstore c:\boot\bcd.temp
bcdedit.exe /store c:\boot\bcd.temp /create {bootmgr} /d "Windows Boot Manager"
bcdedit.exe /import c:\boot\bcd.temp
bcdedit.exe /set {bootmgr} device partition=C:
bcdedit.exe /timeout 10
attrib -h -s C:\boot\bcd.temp
del c:\boot\bcd.temp

Windows über UEFI booten

  • Mit einer Linux-Live-CD wie ParteMagic booten und mit gdisk prüfen ob die Festplatte bereits GPT ist. Wenn die Festplatte /dev/sda ist, gibt man also das folgende ein.
    sudo gdisk \dev\sda

    gdisk listet jetzt die Filesysteme auf die auf der Festplatte erkannt wurden. Wurde nur MBR erkannt, wird gleich gefragt ob man konvertieren möchte, wenn MBR und GPT oder sonst was erkannt wird, muss man MBR auswählen.

  • Danach muss mit gparted auf der Festplatte der alte Bootsektor gelöscht werden. Meist ist das eine kleine Partition vor der eigentlichen System Partition.
  • Danach muss die Systempartition so verschoben, vergrößert oder verkleinert werden, dass vor ihr Systempartition mindestens 229MB frei sind.
  • Wenn die Partitionierung abgeschlossen ist muss der Computer mit der eingelegten Windows 7 InstallationsCD neu gebootet werden. Extrem wichtig ist hierbei, dass die CD über das BIOS mit UEFI gebootet wird!
  • Sobald das Setup fertig geladen ist gelangt man mit „Umschalt+F10“ in eine Konsole. In dieser Konsole muss diskpart gestartet werden. In der sich öffnenden Eingabeaufforderung muss das folgende eingegeben (sofern unsere Festplatte disk 0 ist)
    select disk 0
    create partition efi size=100
    format quick fs=fat32 label="System"
    assign letter="S"
    create partition msr size=128
    exit
  • Zum Schluss müssen mit dem folgenden Befehl noch die EFI-Dateien von Windows auf die neue Platte kopiert werden.
    mkdir S:\EFI\Microsoft\Boot
    xcopy /s C:\Windows\Boot\EFI\*.* S:\EFI\Microsoft\Boot
  • Nachdem nun das UEFI booten von Windows vorbereitet wurde, beenden wir die Konsole und klicken im Setup auf „Computerreparaturoptionen“. Das Tool wird gleich am Anfang aufschreien, dass er eine automatische Reparatur durchführen kann. Das machen wir natürlich und der Computer startet sich neu aber jetzt über UEFI.

Ü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>