Bei einem Linux unter VMware im laufenden Betrieb eine Festplatte einbinden

Oft ergibt sich die Notwendigkeit auf einem Server mit Linux im laufenden Betrieb eine neue Festplatte anzuschließen. Z.B. wenn der Server virtuell unter VMware läuft und man diesem eine neue Festplatte zuordnet hat und diese ohne Neustart des Servers einbinden möchte.

Um dies bei einem Server mit Linux zu machen benötigt man als erstes die Nummer des HBA (Host Bus Adapter). Diese findet man am besten über das sysfs raus.  Jeder HBA hat ein Verzeichnis unterhalb des Ordners /sys/class/scsi_host/.  Der HBA mit der Nummer 0 hat somit den Ordner /sys/class/scsi_host/host* usw.. In jedem dieser Ordner existiert eine Datei mit dem Namen proc_name. In dieser befindet sich der name des Treibers des jeweiligen HBA. Mit dem Wissen das der Treiber für den LSI Controller von VMware mptspi heißt, muss man jetzt nur noch den HBA, der einen Treiber mit diesem Namen hat. Um nicht in allen Dateien von Hand nachzusehen, kann man dies am besten den Befehl grep fürs ich erledigen lassen. Mit dem folgten Befehlt erhält man eine Ausgabe aller HBA, die die Buchstabenfolge mpt enthalten.

grep mpt /sys/class/scsi_host/host*/proc_name

Wenn die Ausgabe wie folgt aussieht, hat der HBA die Nummer 32.

/sys/class/scsi_host/host32/proc_name:mptspi

Nachdem man die Nummer des HBA rausgefunden hat, muss man den HBA seine Geräte neu scannen lassen. Mit dem folgenden Befehl bittet man den HBA mit der Nummer 32, seine Geräte im laufenden Betrieb neu zu scannen.

echo "- - -" > /sys/class/scsi_host/host32/scan

Danach sollte man mit dmesg sich die Kernelmeldungen ausgeben lassen. Ganz unten bei der Ausgabe sollte der Fund der neuen Festplatte gemeldet werden. Wenn die letzten Zeilen z.B. wie folgt aussehen, ist die Festplatte als Device /dev/sdb von Linux erkannt worden.

Mar  1 14:52:07 portal kernel: [ 1287.033631] scsi 32:0:1:0: Direct-Access     VMware   Virtual disk     2.0  PQ: 0 ANSI: 6
Mar  1 14:52:07 portal kernel: [ 1287.033641] scsi target32:0:1: Beginning Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034017] scsi target32:0:1: Domain Validation skipping write tests
Mar  1 14:52:07 portal kernel: [ 1287.034020] scsi target32:0:1: Ending Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034046] scsi target32:0:1: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 127)
Mar  1 14:52:07 portal kernel: [ 1287.034346] sd 32:0:1:0: [sdb] 104857600 512-byte logical blocks: (53.7 GB/50.0 GiB)
Mar  1 14:52:07 portal kernel: [ 1287.034422] sd 32:0:1:0: [sdb] Write Protect is off
Mar  1 14:52:07 portal kernel: [ 1287.034425] sd 32:0:1:0: [sdb] Mode Sense: 61 00 00 00
Mar  1 14:52:07 portal kernel: [ 1287.034444] sd 32:0:1:0: [sdb] Cache data unavailable
Mar  1 14:52:07 portal kernel: [ 1287.034447] sd 32:0:1:0: [sdb] Assuming drive cache: write through
Mar  1 14:52:07 portal kernel: [ 1287.034908] sd 32:0:1:0: Attached scsi generic sg2 type 0
Mar  1 14:52:07 portal systemd-udevd[1657]: Process '/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'' failed with exit code 2.
Mar  1 14:52:07 portal kernel: [ 1287.042034] sd 32:0:1:0: [sdb] Attached SCSI disk

Wenn die Festplatte als /dev/sdb erkannt wurde, können wir mit dem einrichten einer Partition weiter machen. Dazu muss zunächst eine Partitionstabelle auf der Festplatte angelegt und dann eine Partition erstellt werden. Dies kann man für die Festplatte /dev/sdb aus unserem Beispiel z.B. mit dem folgenden Befehlt erreichen.

cfdisk /dev/sdb

Nach eingäbe dieses Befehlt wird man zunächst gefragt welche Partitionstabelle man anlegen möchte. Ich empfehle die neuere und modere gpt anstelle der älteren dos zu wählen. Danach kann man in einem kleinen Menü eine neue Partition anlegen und speichern. Auf dieser Partition kann man dann mit mkfs ein Dateisystem anlegen und dieses kann man dann mit dem Befehlt mount in das laufende Linux einbinden. Und voilà, die neue Platte steht ohne Neustart zur verfügung.

Test einer Synology DS416play mit DSM 6.1

Synology DS416play

Die taiwanische Firma Synology wurde im Jahr 2000 von den ehemaligen Microsoft Managern Cheen Liao und Philip Wong gegründet und hat sich zum Ziel gesetzt Network Attached Storage-Geräten (kurz NAS) mit umfangreicher Software auf Basis von Linux zu bauen. Dabei nennt Synology die Hardware DS (DiskStation) und die Software DSM (DiskStation Manager).

Als ich vor 10 Jahren die ersten NAS (Network Attached Storage) Geräte von Synology eingerichtet habe, war ich bereits überrascht wir groß der Funktionsumfang der Software und die Anpassungsmöglichkeiten dieser Geräte waren. Man merkte den Geräten aber an, dass sie eher für kleinere Firmen und den privaten Gebrauch gebaut wurden. Für den Einsatz in großen Firmennetzen waren sie noch nicht reif.

Inzwischen hatte ich einige Jahre keine Synology mehr in der Hand und es wurde höchste Zeit, sich so ein Gerät mit der aktuellen Software mal wieder näher anzuschauen. Als zudem noch mein Speicherplatz für das Backup meiner privaten Daten knapp wurde, beschoss ich mir ein aktuelles NAS der Firma Synology zuzulegen und dieses genauestens unter die Lupe zu nehmen.

Welches NAS von Synology ist für mich das beste?
Zunächst stellte sich die Frage, welches der aktuellen NAS-Geräte von Synology am ehesten für meine Bedürfnissen passt. Synology bietet inzwischen über 20 unterschiedliche NAS Geräte an, die für verschiedenste Einsatzzwecke ausgelegt sind. Es gibt sowohl für den Privatanwender als auch für Firmen verschiedener Größenordnungen passende Geräte zu finden. Für mich persönlich war eine große Speicherkapazität und ein geringer Stromverbrauch wichtig. Außerdem wollte ich gerne eine etwas leistungsfähigere CPU, um 4k Videos von dem NAS auf den Fernseher übertragen zu können. Nach einer Recherche im Internet entschied ich mich für das Model DS416play welches es aktuell bei Amazon für 442,19- € gibt. Es kann mit vier Platten bestückt werden und bringt eine etwas leistungsstärkere CPU mit. Mit vier Festplatten mit einer Größe von 4 TB und der Verwendung eines RAID (Redundant Array of Independent Disks) mit einer Festplatte für Redundanz erhält man über 10 TB Speicherplatz. Für meine privaten Zwecke ist das zunächst ausreichend. Zudem reicht die CPU der DS416play, um 4k Videos zum Fernseher zu übertragen.

Zusammenbauen und einrichten
Das zusammenbauen und einrichten des NAS ist für jemanden mit Computerkenntnissen schnell erledigt. Die Festplatten können ohne Schrauben eingebaut werden. Sobald man das Gerät anschaltet, holt es sich eine IP-Adresse per DHCP und ist über die URL http://diskstation:5000 erreichbar. Wenn man diese URL im Browser aufruft, landet man auf dem Desktop des DSM (DiskStation Managers). Dort kann man in der Systemsteuerung die Konfiguration des Gerätes vornehmen. Die vier von mir verbauten Festplatten hatte das NAS bereits automatisch zu einem SHR1 (Synology Hybrid RAID) zusammengefasst. Bei Bedarf kann das NAS natürlich auch andere RAID-Arten. Das SHR1 dürfte für die meisten aber auch das geeignetste RAID sein, da es am flexibelsten ist. Danach ist das Gerät prinzipiell einsatzbereit. Es gibt natürlich noch haufenweise kostenlose und kostenpflichtige Zusatzsoftware, die man über das sogenannte „Paket-Zentrum“ installieren kann. Ähnlich wie bei einem iPhone, ist das NAS damit nach Bedarf erweiterbar und kann zu einem kleinen Server mit diversen Funktionalitäten ausgebaut werden.

Fazit
Die NAS Systeme von Synology sind extrem erweiterbar, haben ein sehr gutes Preis-Leistung-Verhältnis und sind fast schon kleine Applikationsserver mit diversen Funktionen. Für den privaten Gebrauch und für kleine Firmen sind sie völlig ausreichend und mehr Leistung und mehr Funktionen sind für das Geld nicht zu bekommen. Ich kann diese Geräte sehr empfehlen.

Wenn man möchte gibts die Synology DS416play bei Amazon auch bereits bestückt mit Festplatten. Die Variante mit 12 TB Speicherplatz kostet bei Amazon aktuell z.B. gerade 995,- €.

Ü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/ (Update: Leider gibt es diese Webseite nicht mehr und ich habe den Link deshalb entfernt.).

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>