In meinem heutigen Artikel möchte ich mich einmal damit beschäftigen wie man iSCSI Storage an einen Windows Hyper-V Server hängen kann. Das übliche Szenario für ein solches Unterfangen ist, dass man in einem Hyper-V Cluster ein LUN auf einem SAN oder NAS per iSCSI an einen der Knoten anbindet. Grundsätzlich ist dies über den iSCSI-Initiator relativ einfach. Beim Windows Hyper-V Server kann man das aber leider nicht mit diesem kleinen hilfreichen Programm machen, da ein Windows Hyper-V Server nun mal keine GUI hat, d.h. wir müssen das in diesem Fall über PowerShell bewerkstelligen. Auch das ist nicht so kompliziert wie es sich anhört wenn man weiß was zu tun ist.
Als erstes müssen wir mal checken ob der iSCSI-Dienst unter dem jeweiligen Server überhaupt ausgeführt wird. Nur dann ist es überhaupt möglich eine Verbindung mit einem iSCSI-Target aufzubauen. Standardmäßig ist dieser Dienst auf einem Windows Server deaktiviert.
Der Befehl
Get-Service -Name MSiSCSI
gibt über den Zustand des Dienstes Auskunft. In meinem Beispiel läuft der Dienst noch nicht:
Das ändern wir mit den folgenden beiden Befehlen
Start-Service MSiSCSI Set-Service -Name MSiSCSI -StartupType Automatic
Die erste Zeile startet den Service einfach und die zweite Zeile setzt den Starttyp auf „Automatic“ damit der Dienst auch nach einem Neustart des Hyper-V Servers wieder gestartet wird und die auf dem Server ausgeführten Virtuellen Maschinen auch ihre Festplatten wiederfinden. Bei meiner Maschine sieht das dann so aus
Über Get-Service (siehe oben) können wir uns dann noch einmal anschauen ob der Dienst jetzt auch wirklich läuft. In meinem Fall tut er das.
Als nächstes müssen wir ein so genanntes iSCSI-Target Portal anlegen. Das ist sozusagen die Adresse des SANs im Netzwerk. Auf einem iSCSI-Target Portal können mehr als ein LUN zur Verfügung gestellt werden. Mein SAN heißt sehr fantasielos einfach san.geislers.net, d.h. ich trage diese Adresse ein.
New-iSCSITargetPortal -TargetPortalAddress san.geislers.net
Kann sich der Server mit dem iSCSI-Target Portal verbinden, so sieht man die folgende Ausgabe
Was noch ganz wichtig ist damit dieser Schritt überhaupt funktioniert ist, dass der zugreifende Server (also in unserem Fall hyperv010.geislers.net) auch im iSCSI-Target registriert ist. Ist der Server nicht registiert, so wird ihm der Zugriff auf das iSCSI-Target verwehrt. Zur Registrierung benötigt man den IQN des Servers, in meinem Beispiel ist das IQN:iqn.1991-05.com.microsoft:hyperv010.geislers.net.
Über den Befehl
Get-iSCSITarget
Werden alle verfügbaren iSCSI-Targets angezeigt. Auf meinem Server sieht das wie folgt aus
Wir wollen im Beispiel den Storage für unseren Hyper-V Knoten hyperv010.geislers.net anhängen, das können wir über den Befehl
Connect-iSCSITarget -NodeAddress iqn.2004-04.com.qnap:ts-1263u-rp:iscsi.hyperv010.fa650f
erreichen. Auch wieder auf meiner Maschine gibt es die folgende Rückmeldung
Der Wert true bei der Eigenschaft IsConnected lässt es schon vermuten – wir haben unser iSCSI-Target jetzt an den Server angehängt. Das können wir auch mit dem Befehl
Get-iSCSIConnection
überprüfen, was die folgende Ausgabe ergibt
Offensichtlich verfügen wir nun über eine Verbindung zum iSCSI-Target. Wenn man sich die Ausgabe des Connect-iSCSITarget Befehls weiter oben noch einmal genauer ansieht erkennt man dass momentan die Eigenschaft IsPersistent auf False steht. Das ist natürlich nicht optimal, da wir die Verbindung zum iSCSI-Target ja auch gerne behalten würden wenn der Server mal durchgebootet wird, das können wir darüber erreichen dass wir die Session registrieren.
Get-iSCSISession | Register-iSCSISession
Der Befehl selbst gibt keine Rückmeldung (zumindest kein Fehler – auch das ist eine Rückmeldung ;-)), mit dem Befehl
Get-iSCSISession
kann man sich Infos zur Session anzeigen lassen. Und nun wird bei IsPersistent auch true angezeigt. Damit sind wir hier soweit fertig, müssen jetzt aber natürlich noch die Disk einrichten und formatieren. Momentan ist ja lediglich ein komplett leeres LUN angehängt. Um weiterarbeiten zu können benötigen wir die Disk-Nummer der neu angehängten iSCSI-Disk. Diese können wir mit dem folgenden Befehl ermitteln:
Get-Disk | Where-Object BusType -eq "iSCSI"
Im Screenshot kann man sehen, dass die Disk-Nummer 2 ist. Das nutzen wir jetzt dazu um die Disk Online zu schalten zu initialisieren und zu Formatieren. Hierzu hängen wir ein paar PowerShell Befehle hintereinander.
Initialize-Disk -Number 2 -PartitionStyle GPT -PassThru | ´ New-Partition -AssignDriveLetter -UseMaximumSize | ´ Format-Volume
Ganz wichtig ist hier, dass man auch wirklich die richtige Disk-Nummer angibt, weil man ansonsten möglicherweise eine falsche Disk neu partitioniert und formatiert. Da PowerShell ein Profi-Tool ist wird vor so einer Aktion auch nicht groß nachgefragt sondern das wird einfach gemacht.
Ob die neue Festplatte im Server nun auch wirklich zur Verfügung steht können wir über den Befehl
Get-Partition
herausfinden.
Hier wird angezeigt dass die neue Platte unter dem Laufwerksbuchstaben D zur Verfügung steht. Das können wir auch leicht überprüfen indem wir auf die Platte wechseln und uns einmal das Verzeichnis auflisten lassen.
Wie erwartet ist in diesem Verzeichnis natürlich noch nichts drin.