Synology NAS | Löschen eines Checkpoints unter Hyper-V

Vor einiger Zeit startete ein Hyper-V Server neu, während ein Backup-Task des Synology Active Backup for Business aktiv war.

Active Backup for Business, sichert unter Hyper-V virtuelle Maschinen (VMs) dadruch, dass ein Checkpoint / SnapShot auf dem Hyper-V Server erstellt und aus diesem die VM konsistent gesichert wird.

Checkpoint-no-delete

Durch den automatischen Neustart des Hyper-V Hosts blieb der Checkpoint bestehen und konnte nicht über den Hyper-V Manager gelöscht werden.

Checkpoint-no-delete-2

Um den Checkpoint zu entfernen musste ich explizit PowerShell verwenden. Unter PowerShell heißt der Checkpoint dann auch wieder Snapshot (Microsoft wird das hoffentlich im Windows Server 2022 korrigieren).

# Löschen des Active Backup Snapshots
Get-VMSnapshot -VMName 'Name der VM' | Remove-VMSnapshot

Enjoy it, b!

Synology DSM 7 | Nacharbeiten Active Backup 2

Neben dem in diesem Blog beschrieben Problem mit dem Hyper-V PowerShell-Module und Synology Active Backup for Business, bin ich auf ein weiteres Problem nach dem Upgrade auf DSM 7 gestoßen.

Zuvor muss ich aber klarstellen, dass die Probleme nicht explizit durch das Upgrade verursacht wurden, sondern durch die ebenfalls neue Version von Synology Active Backup.

Active Backup for Business und die “geänderten Blöcke” einer VM

Mit dieser Fehlermeldung konnte ich zuerst einmal Garnichts anfangen.

image

Ein wenig mehr Informationen waren dann in diesem Log zu finden.

image

Der manuelle Start des Tasks brachte dazu das folgende Ergebnis.

Untitled

Im deutschen Synology-Forum habe ich dann ein ähnliches Problem mit VMware gefunden, allerdings aus dem Jahr 2018. Die Lösung war das Vergrößern des virtuellen Datenträgers (VHD) der VM, in diesem Fall von 96GB auf 100GB.

Interessant war dabei, dass alle anderen VMs ohne Probleme gesichert wurden. Lediglich diese VM machte mit der Fehlermeldung oben Probleme. Ob der Grund die noch verwendete Generation 1 war, oder möglicher Weise die initiale Erstellung der VHD kann ich aktuell nicht nachvollziehen. Die Erweiterung auf 100GB konnte das Problem lösen und das Backup funktionierte wieder wie vor dem Upgrade.

Um die Größe der VHD einer Generation 1 VM zu ändern, muss diese heruntergefahren werden. Danach kann mit dem Hyper-V Manager oder PowerShell die Änderung erfolgen.

# Erweitern des virtuellen Datenträgers einer VM
Resize-VHD -Path "D:\Virtual Machines\BaseVHDX.vhd" -SizeBytes 100GB

Enjoy it, b!

Auslesen der Seriennummer einer SSD mit PowerShell

Nachdem ich in ein Notebook eine neue SSD eingebaut hatte und das Gerät auch schon zuverlässig seinen Dienst tat, fiel mir auf das ich mir die Seriennummer nicht notiert hatte.

Wenn man nochmals, z.B. über die Fernwartung oder RDP Zugriff auf das Gerät erhält kann man die Seriennummer über PowerShell und das WMI auslesen.

# Auslesen der Seriennummer
Get-WmiObject -Class Win32_PhysicalMedia | Format-List Tag, Serialnumber

image

PowerShell braucht dazu nicht einmal mit administrativen Rechten gestartet werden.

Enjoy it, b!

Windows 10 Home, Password will never expire …

Oft bekomme ich eine Home-Edition von Windows 10 in die Finger, meistens erfolgt gleich ein Upgrade auf Windows 10 Professional da eine Mitgliedschaft in einer Domäne notwendig ist. Kürzlich war es aber mal wieder soweit und dieses System sollte auf Windows 10 Home belassen werden, damit wollte auf das in diesem Blog beschriebene Script zurück greifen, um das Passwort auf nicht ablaufend zu setzen. Bei einer Passwortlänge von 16 Zeichen, halte ich diese Einstellung für vertretbar.

Gleich vorneweg, ja das Script funktioniert nach wie vor. Mir ist aber aufgefallen, dass ich zum einen weitere Parameter für das Benutzer-Konto setzen will und darüber hinaus PowerShell das doch noch viel besser machen kann  Thumbs up Dazu muss aber mindestens die Version Windows 10 1607 oder neuer im Einsatz sein. Das Script unter der Verwendung von WMIC wurde davor entwickelt.

Aufgabe

Ein Benutzer mit dem, zugegebenen Maßen kurzem Namen “kn” soll erstellt werden. Ich mache das auf Home Systemen oder auch in kleinen Netzwerken gerne da damit der Name des Windows Benutzer Profils hinreichend kurz wird und z.B. OneDrive ein paar Zeichen mehr im Pfadnamen hat. Durch das zusätzliche Setzen eines vollen Namens, erscheint dann dieser am Anmeldebildschirm.

  1. Benutzername = kn
  2. Vollständiger Name = “Karl Napf”
  3. Passwort-Ablauf = nicht ablaufend / never expires

PowerShell Befehle

Mit dem PowerShell-Befehl New-LocalUser erfolgen. Vor dem eigentlichen Befehl, besteht die Möglichkeit das Passwort vertraulich an der Eingabeaufforderung mit Read-Host einzulesen.

Alle PowerShell-Befehle mitt in einer PowerShell-Sitzung mit erhöhten Rechten ausführen.

# Einlesen des Passworts
$Password = Read-Host -AsSecureString

# Anlegen des Benutzers
New-LocalUser -Name 'kn' -FullName 'Karl Napf' -Password $Password -PasswordNeverExpires -Description 'Karl Napf, der Erfinder der Brotsuppe'

Die Kontrolle mit net user, zeigt ein zufriedenstellendes Ergebnis.

image

Enjoy it, b!

Hyper-V Replication State Critical

Nach dem Update einiger Hyper-V Hosts wollte die, für einige VMs eingerichtete Hyper-V Replication nicht mehr starten. Der Replication Health stand auf Critical und das Übliche, über das Menü des Hyper-V Manager verfügbare Resume Replication funktionierte nicht.

image

Eine Abfrage mit PowerShell stellte die Situation wie folgt dar.

image

Zusätzlich wurde im Hyper-V Manager die folgende Information bereitgestellt.

image

Das Problem war, dass ein Resync der Hyper-V Replication notwendig war. Dieser aber über den Hyper-V Manager nicht zur Verfügung stand, also in der GUI nicht angeboten wurde.

Die Lösung stellt hier, wie so oft unter Windows, PowerShell bereit. Hier besteht explizit die Möglichkeit einen Resync der VM anzustoßen.

# Hyper-V Replication, resync einer einzelnen VM
Resume-VMReplication -VMName 'mt-app-2.testlab.local' -Resynchronize

Sollten mehrere VMs von dem Problem betroffen sein, können alle mit dem gleichen Health State über die Kombination der folgenden Befehle zu einem Resync bewegt werden.

# Hyper-V Replication, resync aller VMs eines Hosts im Zustand "critical"
Get-VMReplication | Where-Object { $_.Health -eq 'Critical' } | Resume-VMReplication -Resynchronize

Bei einem Resync geht einiges an I/O über die Leitung und abhängig von der Größe der VMs kann das durchaus einige Zeit in Anspruch nehmen.

image

image

In diesem Fall waren es gut 5 Stunden. So, läuft wie man heute gerne dazu sagt.

image

image

Enjoy it, b!

Aktive Computer im Active Directory

Für die Verlängerung von Lizenzen musste ich die Anzahl von Computern, die noch aktiv sind, ermitteln. Leider wurden zwar neue PCs stetig im Active Directory (AD) hinzugefügt, alte Computer-Konten aber einfach dort belassen.

Es bestand also die Notwendigkeit alle Computer zu finden die Ihr Passwort in den letzten 30 Tagen gewechselt hatten. Der Wechsel nach 30 Tagen ist der von Microsoft festgelegte Standard und kann über eine GPO geändert werden.

https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/domain-member-maximum-machine-account-password-age

Zur Auswertung macht es darum Sinn, hier nochmals einen Blick auf die Richtlinie zu werfen.

Geholfen hat mir dieser Einzeiler in PowerShell:

# Ermitteln der vorhandenen Computer im AD
Get-ADComputer -Filter {enabled -eq $true} -Properties * | select Name, DNSHostName, OperatingSystem, LastLogonDate, LastLogonTimestamp | FT Name, @{n='LastLogonTimeStamp';e={[DateTime]::FromFileTime($_.LastLogonTimeStamp)}} -A | Out-File c:\temp\pc.txt

Damit wird im Verzeichnis c:\temp eine Datei mit dem Namen pc.txt erstellt. Deren Inhalt entsprechend analysiert werden kann.

image

In diesem Fall, war der XX_WKS-5 seit März nicht mehr im Betrieb!

Enjoy it, b!

Windows Backup und alte nicht mehr vorhandene Sicherungen

Es ist mal wieder Zeit etwas über Windows Backup und seine Eigenheiten zu schreiben.

Gelegentlich laufen mir die Sicherungsplatten der Small Business Server voll und Windows Backup schafft es nicht die alten Sicherungen zu entfernen.

image

Windows Backup liefert neben wbadmin.exe noch eine Reihe von PowerShell Befehlen mit, die bei der Wartung und damit zu Behebung des Problems hilfreich sind.

# Löschen aller alten Backups bis auf die letzten 10
wbadmin delete backup -keepversions:10 -quiet

Der Aufruf funktioniert sehr gut, allerdings kommt er nicht mit Backups zurecht die nicht mehr erreichbar sind, sich also auf einer Offline-Platte befinden. Damit haben wir die Situation, dass die Backups auf der Platte sind und noch einen Eintrag im Katalog besitzen. Ist die Platte noch da, können die Backups problemlos gelöscht werden. Im Falle eines Defekts oder Verlusts geht das nicht und wbadmin liefert die folgenden Fehlermeldungen (grüner Kasten).

image

The operation to delete backup version … failed with error:
The specified media type is invalid.

Eine Bereinigung des Backup-Katalogs ist über zwei Wege möglich, zum einen bietet wbadmin die Möglichkeit explizit die Backup-Version (blauer Kasten oben) zu löschen, fordert hier aber zweimal die Bestätigung mit [Y]es. Die Verwendung der Option –quiet überspringt leider die optionale Nachfrage zur Löschung des Eintrags aus dem Katalog.

# Löschen von alten Backups über die Versions-ID
wbadmin delete backup -versions:09/20/2014-21:00

Alternativ und effektiver bewerkstelligt man die Aufgabe mit PowerShell.

# Löschen aller alten Backups bis auf die letzten 10
Remove-WBBackupSet -MachineName server.domain.tld -KeepVersions 10

Auch bei dem Aufruf von Remove-WBBackupSet kommt es zu Fehlermeldungen wegen des fehlenden Mediums, diese werden aber ignoriert und der Backup-Katalog bereinigt.

Die nun noch vorhandenen Versionen lassen sich mit Get-WBBackupSet anzeigen

# Anzeige der nun noch vorhandenen Backup Versionen
Get-WBBackupSet

Bis zum nächsten Mal.

Enjoy it, b!

Hyper-V, Umstellung und Konfiguration von Switch Embedded Teaming (SET)

Seit Windows Server 2016 bietet Hyper-V die Möglichkeit des Switch Embedded Teaming (SET). Dieser Blog beschreibt die Umstellung eines Hyper-V Hosts (Windows Server 2019) von normalen Teaming auf SET.

  1. https://redmondmag.com/articles/2020/03/17/hyperv-switch-embedded-teaming-1.aspx
  2. https://redmondmag.com/articles/2020/03/19/hyperv-switch-embedded-teaming-2.aspx

Da in der Regel auf Hyper-V Hosts VMs aktiv sind, sollten hier einige Vorsichtsmaßnahmen ergriffen werden.

  1. Shutdown aller VMs
  2. Für den Fall, dass eine VM automatisch startet muss diese Aktion ebenfalls deaktiviert werden
  3. Anlegen oder aktivieren eines lokalen Admins, der auch funktioniert Winking smile

Im ersten Schritt werden alle mit dem zu lösenden Team verbundenen Virtual Switches auf Internal oder Private Network umgestellt, nur dann lässt sich ein bestehendes Team löschen.

image

Die Umstellung ist temporär und damit verlieren die darauf laufenden VMs ihre Verbindung ins Netzwerk und werden darum wie in Punkt 1 oben geschrieben am besten heruntergefahren.

Der PowerShell Befehlt Get-NetLbfoTeam, zeigt die vorhandenen Teams an.

image

Beide Teams (also Team Ethernet 1 und Team Ethernet 2) werden nun gelöscht und zu einem SET verbunden.

# Löschen eines Teams
Remove-NetLbfoTeam -Name "Team Ethernet 1"
Remove-NetLbfoTeam -Name "Team Ethernet 2"
# Löschen aller Teams
Get-NetLbfoTeam | Remove-NetLbfoTeam

Hier sollte klar sein, dass damit auch die Netzwerkverbindung zum Hyper-V Host verloren geht. Ist ein DHCP-Server vorhanden, werden die Adapter von diesem neue Adressen bekommen, ansonsten kann nun nur noch der Zugriff über die Konsole oder ein ILO-Board erfolgen. Siehe hier Punkt 3 oben, wir brauchen dann einen funktionierenden lokalen Administrator.

Das SET wird nun über diesen Befehl eingerichtet.

# Konfiguration eines SET Switch embedded teams
New-VMSwitch -Name "_ Network 172.16.16.0" -NetAdapterName "Ethernet","Ethernet 2","Ethernet 3","Ethernet 4" -EnableEmbeddedTeaming $true -AllowManagementOS $true

Was nicht wirklich gut aus der Microsoft Dokumentation von New-VMSwitch hervorgeht, ist die Beschreibung von –EnableEmbeddedteaming.

Bei mehr als einem Adapter, wird automatisch –EnableEmbeddedTeaming $true verwendet, bei nur einem Adapter –EnableEmbeddedTeaming $false. Soll also ein SET gebaut werden, der zu Beginn nur einen Adapter besitzt und irgendwann erweitert wird, dann muss unbedingt –EnableEmbeddedTeaming $true verwendet werden.

-AllowManagementOS $true ist notwendig, damit auch der Hyper-V Host den Adapter verwenden kann, wir also mit einem konvergierten Adapter arbeiten. Nur dann kann eine IP-Adresse darauf gebunden werden.

Danach kann mit sconfig wieder die korrekte / alte IP des Adapters gesetzt werden und im Hyper-V Manager steht dieser dann wie folgt zur Verfügung.

image

Damit sind wir fertig, leider nein … es können nämlich eine Reihe von Dingen schief gehen!

Bei einigen, nicht bei allen Umstellungen habe ich die folgende Meldung erhalten.

External Ethernet adapter ‚Intel(R) 82574L Gigabit Network Connection‘ is already bound to the Microsoft Virtual Switch protocol.

Dadurch lässt sich der Adapter nicht in das SET aufnehmen und bedarf einer zusätzlichen Behandlung. Wahrscheinlich auch mit PowerShell möglich, habe ich aber ncspbind den Vorzug gegeben.

Das Tool ist in dem folgenden KB-Artikel beschrieben:

Creating V-switches within the hyper-V environment fails

Der folgende Befehl löst dieses Problem:

nvspbind /u “AdapterName” 

Wenn ich mir nicht sicher bin, ob meine Adapter noch sauber funktionieren, gibt es die Möglichkeit diese komplett zurück zu setzen. Mit komplett meine ich komplett!!!!

netcfg –d

Danach hilft nur noch die Anmeldung über das ILO-Board und ein durchgeführter Neustart des Servers, nun kann ebenfalls der SET konfiguriert werden.

Mit einem Scanner, wie zum Beispiel dem Advanced IP-Scanner lassen sich IPs in einfach auffinden. Das Tool, habe ich bei solchen Umstellungen immer parat.

Enjoy it, b!

Windows und der Secure-Channel

Einer meiner Windows 10 PC hatte das Problem, dass ich auf eine Reihe von Ordnern im Netzwerk nicht zugreifen konnte. Hauptsächlich waren es umgeleitet Ordner aus dem Benutzerprofil. Ich leite gerne die Eigenen Dateien / Documents auf den Server um.

Das Problem war, dass der Secure-Channel zum Server nicht mehr sauber funktionierte. Wie so oft lag die Lösung in PowerShell vergraben, und das sage ich weil man einfach wissen muss das es mit diesem Befehl so einfach geht.

Test-ComputerSecureChannel liefert True oder False zurück, je nachdem wie der Zustand der Verbindung zwischen dem PC und der Domain (Domain-Controller) ist.

Im Fall von False, lohnt sich die Verwendung des Parameters –Verbose um genauere Informationen zu erhalten.

Test-ComputerSecureChannel -Verbose
VERBOSE: Performing the operation "Test-ComputerSecureChannel" on target "ws1"
False
VERBOSE: The secure channel between the local computer and the domain sbsland.local is broken.

Eine Reparatur erfolgt dann unter der Verwendung eines Domänen-Administrators.

Test-ComputerSecureChannel -Repair -Credential (Get-Credential)

Darüber hinaus lässt sich über den Parameter –Server auch die Verbindung zu weiteren PCs oder Servern in der Domäne prüfen.

Test-ComputerSecureChannel -Server sbs.sbsland.local -Verbose
VERBOSE: Performing the operation "Test-ComputerSecureChannel" on target "ws1"
False
VERBOSE: The secure channel between the local computer and the domain sbsland.local is in good condition.

image

Enjoy it, b!

Hyper-V failed to enable replication

Diese Meldung deutet auf ein Problem mit der Version der Virtuellen Maschine (VM) beim Einrichten einer Hyper-V Replica hin.

image

 

Was ist denn die Version einer VM genau?

Mit Windows Server 2012R2 wurden VMs der Generation 2 ermöglicht, eine Version der VMs trat aber bisher explizit nicht in Erscheinung, obwohl sie schon vorhanden war. Erst seit Windows Server 2016 ist es möglich die Version der VM im Hyper-V Manager als Spalte anzeigen zu lassen und darüber hinaus beim Erstellen der VM konkret die Version vor zu geben.

An einer Version, hängen Features von Hyper-V wie zum Beispiel die Möglichkeit eine VM in den Hibernation-Mode zu schicken. Daher muss ein Hyper-V Host die Version einer VM, die auf ihm ausgeführt werden soll auch unterstützen. Welche Version das ist, kann mit dem PowerShell-Befehl Get-VMHostSupportedVersion, ab Windows Server 2016 herausgefunden werden.

image

Get-VMHostSupportedVersion

Ob die Version in der Hyper-V MMC (Hyper-V Manager) angezeigt wird oder nicht, hängt vom verbundenen Hyper-V Host und nicht von der Version des Hyper-V Managers ab. Die folgende Abbildung zeigt das Hyper-V Management unter Windows 10 Build 1903 (neuer geht es aktuell nicht mehr) und einen dahinter liegenden Microsoft Hyper-V Server 2012R2.

image

Die nächste Abbildung das gleiche Hyper-V Management und einen damit verbunden Hyper-V Server 2016, inklusive der Möglichkeit die Configuration Version an zu zeigen.

image

Ähnlich verhält es sich in PowerShell, beim Anlegen einer VM. Das für Windows Server 2012R2 und älter zu verwende Hyper-V PowerShell-Modul, unterstützt den Parameter Version nicht, die VM muss also ohne diesen erstellt werden, bekommt aber trotzdem eine Version zugewiesen.

image

image

# Entladen des Hyper-V Modules
Remove-Module Hyper-V

# Import des aktuellen Hyper-V Modules
Import-Module Hyper-V

# Erstellen einer VM der Generation 2 mit Version 5.0
New-VM -ComputerName skye.whisky.local -VMName Linux -Generation "2.0" -Version "5.0"

Legt man nun auf einem Hyper-V Server 2016 oder neuer eine VM mit der Version 5.0 an, so ist die “kompatibel” mit Hyper-V 2012R2 und es kann auch eine Hyper-V Replica eingerichtet werden.

image

Import-Module Hyper-V -RequiredVersion 1.1

Get-VM -ComputerName nevis.whisky.local -VMName "_caolila.whisky.local" | fl Name, Generation, Version

Ein Version-Downgrade ist zum heutigen Stand nicht möglich, hier ist also Vorsicht geboten.

Enjoy it, b!