Firmware Intel Data Center SSDs mit Hyper-V Server und AVAGO RAID Controller

Die Firmware von Intel Data Center SSDs auf einem Microsoft Hyper-V Server (oder auch Windows Server Core) kann über die Eingabeaufforderung (cmd.exe) mit den folgenden Schritten aktualisiert werden.

Herunterladen der aktuellen Firmware, auf einem PC mit Internet-Zugang:

https://downloadcenter.intel.com/de/download/27863/Intel-SSD-Data-Center-Tool?v=t

Entpacken des Intel SSD Data Center Tools vom PC auf den Microsoft Hyper-V Host (unter der Voraussetzung, dass die entsprechenden Berechtigungen existieren).

unzip \Users\<Username>\Downloads\Intel_SSD_Data_Center_Tool_3.0.13_Windows.zip -d \\<Hyper-V-Hostname>\c$\temp\intel-ssd

Ich habe auf allen meinen PCs unzip.exe über ein Batchscript im Pfad liegen, um an der Eingabeaufforderung schnell eine Datei entpacken zu können. Alternativ geht das natürlich auch mit PowerShell.exe ab Windows 10 oder Windows Server 2016 mit Expand-Archive:

Expand-Archive -LiteralPath C:\Users\<Username>\DownloadsIntel_SSD_Data_Center_Tool_3.0.13_Windows.zip -DestinationPath '\\<Hyper-V-Hostname>\c$\temp\intel-ssd\' -Force

image

Wurde das Intel SSD Data Center Tools auf den Host entpackt, wechseln wir in einer RDP Session auf diesen, um das Update vor zu nehmen.

mstsc /f /v:<Hyper-V-Hostname>

Auf dem Hyper-V Host befindet sich im Verzeichnis C:\Temp\intel-ssd das Intel SSD Data Center Tool welches wir nun in der richtigen Version (x64) installieren müssen:

image

Wie so oft hat man bei Intel Software keine Möglichkeit das Zielverzeichnis zu beeinflussen und so haben wir hinterher auf Laufwerk C: im Root die folgenden Verzeichnisse:

  • \Intel
  • \isdct

Das ist zwar nicht schön, aber auch nicht schlimm Winking smile zum eigentlichen Update muss man ins ISDCT Verzeichnis wechseln:

C:\Temp\intel-ssd> cd \isdct

Dort befindet sich isdct.exe womit wir die Firmware der SSDs aktualisieren können, wozu die folgenden Schritte notwendig sind.

Für den Fall, dass die SSDs an einem AVAGO/LSI RAID Controller hängen, muss der folgende Befehl eingegeben werden.

isdct.exe set -system EnableLSIAdapter=true 

image

Ohne diesen Aufruf, erkennt das Tool die SSDs nicht, oder nicht korrekt!

Mit den folgendem Aufruf, können die im System vorhandenen SSDs angezeigt werden, dabei analysiert auch gleich das Intel Data Center Tool ob ein Update der Firmware notwendig ist.

isdct.exe show –intelssd

image

Wichtig hier sind die folgenden Informationen:

  • Firmware : N2010112 (aktuelle Firmware)
  • FirmwareUpdateAvailable : N2010121 (neue Firmware)
  • Index : 0 (Index der SSD, geht bei 4 SSDs von 0 bis 3)

Die eigentliche Aktualisierung erfolgt nun mit diesem Aufruf – Wichtig: Bis jetzt wurden nur Informationen der SSDs gelesen, die Aktualisierung ist ein Schreibvorgang (Stichwort Datenbackup) der laut Intel nicht destruktiv ist (also eigentlich nix passieren kann).

isdct.exe load -intelssd <Index>

Für den Fall, dass wir 4 SSDs (Index 0 bis 3) aktualisieren müssen kann auch das folgende Script verwendet werden.

@ECHO OFF

FOR /L %%a IN (0,1,3) DO (

	ECHO y | isdct.exe load –intelssd %%a

)

Eine abschließende Analyse mit dem Intel SSD Data Center Tool zeigt, dass nun alle SSDs die aktuelle Firmware besitzen.

- Intel SSD DC S3520 Series PHDV723201YD480BGN -

Bootloader : Property not found
DevicePath : LSI10
DeviceStatus : 
Firmware : N2010121
FirmwareUpdateAvailable : The selected Intel SSD contains current firmware as of this tool release.
Index : 0
ModelNumber : INTEL SSDSC2BB480G7
ProductFamily : Intel SSD DC S3520 Series
SerialNumber : PHDV723201YD480BGN

- Intel SSD DC S3520 Series PHDV723201K1480BGN -

Bootloader : Property not found
DevicePath : LSI5
DeviceStatus : 
Firmware : N2010121
FirmwareUpdateAvailable : The selected Intel SSD contains current firmware as of this tool release.
Index : 1
ModelNumber : INTEL SSDSC2BB480G7
ProductFamily : Intel SSD DC S3520 Series
SerialNumber : PHDV723201K1480BGN

- Intel SSD DC S3520 Series PHDV717503PB480BGN -

Bootloader : Property not found
DevicePath : LSI6
DeviceStatus : 
Firmware : N2010121
FirmwareUpdateAvailable : The selected Intel SSD contains current firmware as of this tool release.
Index : 2
ModelNumber : INTEL SSDSC2BB480G7
ProductFamily : Intel SSD DC S3520 Series
SerialNumber : PHDV717503PB480BGN

- Intel SSD DC S3520 Series PHDV717501MN480BGN -

Bootloader : Property not found
DevicePath : LSI7
DeviceStatus : 
Firmware : N2010121
FirmwareUpdateAvailable : The selected Intel SSD contains current firmware as of this tool release.
Index : 3
ModelNumber : INTEL SSDSC2BB480G7
ProductFamily : Intel SSD DC S3520 Series
SerialNumber : PHDV717501MN480BGN

So, nun sind wir fertig … den Server noch Rebooten und das war es dann.

Enjoy it, b!

Hyper-V VM Windows Server 2016 hängt beim Shutdown oder Reboot

Beim letztem Patchday musste ich feststellen, dass ein Windows Server 2016, der als VM auf einem Hyper-V Host lief, keinen Shutdown oder Reboot durchführen konnte. Die VM blieb einfach hängen.

Meine erste Vermutung war ein Problem mit dem Pagefile beim Shutdown und so schaute ich mir die Konfiguration des Servers an.

image

Gemäß der Standard-Einstellung hat sich das Betriebssystem dazu entschieden, dass Pagefile auf Laufwerk D: zu legen. Nach Änderung auf Laufwerk C: (wie im folgendem Bild zu sehen) konnte die VM problemlos herunterfahren oder auch durchstarten.

image

Sollte ich Zeit haben, muss ich mir die Sache genauer anschauen. Aber der Workaround oben hat schon einmal geholfen.

Enjoy it, b!

Synology NAS Mail-Weiterleitung

Im Büro oder Zuhause gibt es oftmals Geräte welche ihren Status per E-Mail versenden können, dazu gehören unter anderem RAID-Controller, die USV aber auch Multifunktionsgeräte (wie zum Beispiel das Lexmark X544). Das Problem, besonders bei älteren Geräten ist, dass diese oftmals keine verschlüsselten E-Mails versenden können, oder der Konfigurationsdialog nur einen Mail-Server zulässt der mit geringer oder gar keiner Authentifizierung Mails versenden kann. So eine Konfiguration ist über das Internet nicht sinnvoll und sogar fahrlässig, bzw. wird von den Providern gar nicht angeboten.

Die Lösung für ein solches Szenario stellt ein interner Mail-Server dar, der zum einen aus dem Internet nicht erreichbar ist und intern, also im Heimnetz, E-Mails ohne Anmeldung entgegennimmt und diese über den Provider versendet. Ein internes SMTP-Relay. Unter Windows verwendet man hier den integrierten SMTP-Server, betreibt man stattdessen ein NAS Zuhause, muss auf einen dort vorhandenen SMTP-Server zurück greifen.

Für die Synology NAS Geräte gibt es einen Mail Server (letztendlich ist das Postfix) welchen ich für die Weiterleitung über einen 1&1 Mail-Account konfiguriert habe. Dazu waren die folgenden Schritte notwendig.

Als erstes muss der Mail Server über das Synology Package Center installiert werden und danach werden die Einstellungen des Mail Server mit Open geöffnet.

image

Im Tap SMTP habe ich dazu die folgenden Einstellungen gesetzt, mit der Einstellung im roten Kasten schafft es auch mein betagter Lexmark X544dn Mails über die Synology zu versenden.

image

Im nächsten Schritt muss der 1&1 E-Mail-Account für das SMTP Replay konfiguriert werden.

image

1&1 bietet an, die Kommunikation zu verschlüsseln was natürlich sinnvoll ist. Daher Port 587 und TLS, sowie die Anmeldedaten aus Mail-Adresse und Passwort.

Wichtig bei 1&1 ist es, dass die Mails von dem konfiguriertem Account oder einer anderen gültigen Mail-Domain verendet werden. Eine Konfiguration wie mit vielen anderen Providern, zum Beispiel x544@home.local oder fax@home.local als Absender habe ich nicht hinbekommen. Ich musste dann am Lexmark MFC device@gültige.domain als Absender eintragen.

Das Tap IMAP/POP3 bleibt leer (hier nichts anhaken), darüber hinaus habe ich Security ebenfalls im Default (leer) gelassen.

Da auf der Synology der User bernd-xxx als Admin “mail-enabled” ist, habe ich einen Alias (Tap Alias) angelegt welcher die Mails an eine externe Mail-Adresse weiter leitet.

image

Zum Abschluss fehlt noch das Reporting, was den nun an Mails versendet wird. Hierzu sind im Tap Report die folgenden Einstellungen notwendig.

image

So, nun klappt das Versenden von meinem Lexmark MFC ohne Probleme.

image

Enjoy it, b!

Hyper-V Linux VM Boot Problem

Für einen aufwendigeren Test hatte ich mir unter Hyper-V eine Linux VM (Generation 2 mit CentOS 7.4) konfiguriert, mit der Absicht deren Disk für eine Reihe weiterer VMs zu verwenden … analog zum SysPrep von Windows.

Der Boot einer neuen VM mit der kopierten Linux VHDX ging aber sofort, mit der folgenden Meldung daneben.

image

Die Lösung des Problems ist, wenn man die notwendigen Schritte kennt nicht sonderlich schwer. Eigentlich haben wir ein Problem mit dem Bootloader von Linux.

Im ersten Schritt schalten wir die VM über das Hyper-V Management aus und fügen im Anschluss (wenn die VM aus ist) ein Linux ISO hinzu. Danach verändern die Boot Reihenfolge so, dass die VM von der DVD (sprich dem ISO Image startet).

image

Die Änderung erfolgt unter Change Hardware/Firmware/Boot order im Hyper-V Management und sollte das DVD-Laufwerk an erster Stelle haben.

  1. DVD Drive
  2. Hard Drive
  3. Network Adapter

Nun wird die VM wieder eingeschaltet und es erfolgt ein Boot von der DVD. Innerhalb des Boot-Menüs erfolgt dann die Auswahl Select Troubleshooting / Rescue a CentOS system.

image

Linux erkennt nun die vorhandene Installation und mounted diese unter /mnt/sysimage

Damit liegt unser Boot-Verzeichnis unter /mnt/sysimage/boot/efi/EFI und wir können das mit Hilfe der folgenden Schritte reparieren.

# Wechsel in das EFI Verzeichniss
cd /mnt/sysimage/boot/efi/EFI
# "Weg-Kopieren" des Boot files
cp -r centos/ boot
# ODER ALTERNATIV bei Ubuntu
cp -r ubuntu/ boot
mv fbx64.efi grubx64.efi

Nun fahren wir das Linux System wieder runter …

shutdown

… schalten die VM aus und ändern erneut die Boot-Reihenfolge unter Change Hardware/Firmware/Boot order im Hyper-V Management damit nun die VHD an erster Stelle steht.

  1. Hard Drive
  2. DVD Drive 
  3. Network Adapter

Damit startet mein CentOS ohne Probleme.

Enjoy it, b!

File Server Resource Manager, SRMSVC 8197

Nach der Installation der File Server Resource Managers (FSRM) Role hatte ich auf verschiedenen Servern das Problem, dass die MMC beim Versuch irgendwelche Einstellungen vor zu nehmen abgestürzt ist.

Im Application Eventlog fand ich dazu einen vom Zeitpunkt her korrelierenden Fehler, der mir so erstmal wenig gesagt hat.

image

Nach einiger Recherche bin ich auf folgende Lösung gestoßen, welche auf allen betroffenen Server das Problem  behoben hat.

@echo off
cd "%windir%\system32\wbem"
mofcomp srm.mof

net stop srmsvc
net start srmsvc
	

Danach hat der FSRM ohne Probleme funktioniert und ich konnte die Konfiguration durchführen.

Enjoy it, b!

Goodmorning WSUS

Hier mal wieder ein Beitrag zu meiner Lieblingstechnologie, dem WSUS.

Prinzipiell ermöglicht der WSUS die Nutzung einer Vielzahl von SQL Server Editionen, besonders häufig treffe ich auf die Installation des WSUS in Verbindung mit der SQL Server Express Edition. Diese Edition verwende ich (nicht zuletzt, weil sie nichts kostet) ebenfalls sehr gerne auch für andere Anwendungen. Allerdings muss man hier auf eine Kleinigkeit achten, eine Datenbank darf nicht größer als 10GB werden und damit kommen wir wieder zum WSUS. Die 10GB Grenze sprengt der WSUS bei einer Reihe meiner Installationen, bzw. bewegt sich knapp darüber. Nun stellt sich die Frage: Wie bekomme ich die WSUS Datenbank (die übrigens immer noch SUSDB heißt) wieder klein, also unter die 10GB Grenze.

Die Überschreitung dieser, kündigt sich übrigens auch im Application Eventlog des Servers an.

image

Ist die WSUS Datenbank größer als 10GB geworden, haben wir zwei Möglichkeiten. Wechsel der Datenbank Editon im Hintergrund (SQL Server Standard zum Beispiel) was aber mit Kosten verbunden ist oder versuchen die WSUS Datenbank zu verkleinern.

Verkleinern der WSUS Datenbank

Dazu sind drei Schritte (mit möglichen Wiederholungen) notwendig.

  1. Entfernen von nicht mehr notwendigen Updates, etc.
  2. Ein auf T-SQL basierender WSUS Maintenance Task, https://gallery.technet.microsoft.com/scriptcenter/6f8cde49-5c52-4abd-9820-f1d270ddea61
  3. Abschließender „Shrink“ der WSUS Datenbank

Klingt eigentlich ganz einfach und das ist es eigentlich auch Winking smile 

Schritt 1 – Entfernen von nicht mehr notwendigen Updates …

Für das Entfernen von nicht mehr notwendigen Updates hat Microsoft den Server Cleanup Wizard in den WSUS integriert.

image

Der funktioniert auch gelegentlich, insofern man nicht gleiche alle Optionen auf einmal wählt. In letzter Zeit hatte ich häufig den Fall, dass sich der WSUS im Hintergrund beendet oder der Wizard selbst die gewählten Aufgaben nicht vollständig zu Ende bringen konnte. Einfacher und deshalb von mir bevorzugt finde ich das Durchführen der Bereinigung mit PowerShell.

Invoke-WsusServerCleanup -DeclineSupersededUpdates -DeclineExpiredUpdates -CleanupObsoleteComputers -CleanupObsoleteUpdates

Der Aufruf läuft zwar auch nicht auf Anhieb durch, kann aber im Falle einer Terminierung problemlos nochmals gestartet werden. Ich musste das auf einem Server 9x wiederholen, wichtig dabei ist das eine Bereinigung stattfinden nur leider nicht fertig wird. Ein wiederholter Aufruf (Pfeil Oben-Taste in der PowerShell Konsole) macht da weiter wo der Abbruch stattfand und kommt nach einigen Durchläufen zu einem positiven Ergebnis.

Der folgende Screenshot zeigt die letzten beiden Timeouts des Befehls (#7 und #8) und letztendlich die erfolgreiche Bereinigung (Obsolete Updates Deleted: 103).

image

Im nächsten Schritt müssen wir die SQL Datenbank des WSUS (SUSDB) einem Maintenance Task unterziehen.

Schritt 2 – WSUS Database Maintenance Task

Dafür verwenden wir in Script aus der Technet Gallery …

/******************************************************************************
This sample T-SQL script performs basic maintenance tasks on SUSDB
1. Identifies indexes that are fragmented and defragments them. For certain
   tables, a fill-factor is set in order to improve insert performance.
   Based on MSDN sample at http://msdn2.microsoft.com/en-us/library/ms188917.aspx
   and tailored for SUSDB requirements
2. Updates potentially out-of-date table statistics.
******************************************************************************/

USE SUSDB;
GO
SET NOCOUNT ON;

-- Rebuild or reorganize indexes based on their fragmentation levels
DECLARE @work_to_do TABLE (
    objectid int
    , indexid int
    , pagedensity float
    , fragmentation float
    , numrows int
)

DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @schemaname nvarchar(130); 
DECLARE @objectname nvarchar(130); 
DECLARE @indexname nvarchar(130); 
DECLARE @numrows int
DECLARE @density float;
DECLARE @fragmentation float;
DECLARE @command nvarchar(4000); 
DECLARE @fillfactorset bit
DECLARE @numpages int

-- Select indexes that need to be defragmented based on the following
-- * Page density is low
-- * External fragmentation is high in relation to index size
PRINT 'Estimating fragmentation: Begin. ' + convert(nvarchar, getdate(), 121) 
INSERT @work_to_do
SELECT
    f.object_id
    , index_id
    , avg_page_space_used_in_percent
    , avg_fragmentation_in_percent
    , record_count
FROM 
    sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'SAMPLED') AS f
WHERE
    (f.avg_page_space_used_in_percent < 85.0 and f.avg_page_space_used_in_percent/100.0 * page_count < page_count - 1)
    or (f.page_count > 50 and f.avg_fragmentation_in_percent > 15.0)
    or (f.page_count > 10 and f.avg_fragmentation_in_percent > 80.0)

PRINT 'Number of indexes to rebuild: ' + cast(@@ROWCOUNT as nvarchar(20))

PRINT 'Estimating fragmentation: End. ' + convert(nvarchar, getdate(), 121)

SELECT @numpages = sum(ps.used_page_count)
FROM
    @work_to_do AS fi
    INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
    INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id

-- Declare the cursor for the list of indexes to be processed.
DECLARE curIndexes CURSOR FOR SELECT * FROM @work_to_do

-- Open the cursor.
OPEN curIndexes

-- Loop through the indexes
WHILE (1=1)
BEGIN
    FETCH NEXT FROM curIndexes
    INTO @objectid, @indexid, @density, @fragmentation, @numrows;
    IF @@FETCH_STATUS < 0 BREAK;

    SELECT 
        @objectname = QUOTENAME(o.name)
        , @schemaname = QUOTENAME(s.name)
    FROM 
        sys.objects AS o
        INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id
    WHERE 
        o.object_id = @objectid;

    SELECT 
        @indexname = QUOTENAME(name)
        , @fillfactorset = CASE fill_factor WHEN 0 THEN 0 ELSE 1 END
    FROM 
        sys.indexes
    WHERE
        object_id = @objectid AND index_id = @indexid;

    IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) OR (@fragmentation < 30.0)
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
    ELSE IF @numrows >= 5000 AND @fillfactorset = 0
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD WITH (FILLFACTOR = 90)';
    ELSE
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
    PRINT convert(nvarchar, getdate(), 121) + N' Executing: ' + @command;
    EXEC (@command);
    PRINT convert(nvarchar, getdate(), 121) + N' Done.';
END

-- Close and deallocate the cursor.
CLOSE curIndexes;
DEALLOCATE curIndexes;


IF EXISTS (SELECT * FROM @work_to_do)
BEGIN
    PRINT 'Estimated number of pages in fragmented indexes: ' + cast(@numpages as nvarchar(20))
    SELECT @numpages = @numpages - sum(ps.used_page_count)
    FROM
        @work_to_do AS fi
        INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id
        INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id

    PRINT 'Estimated number of pages freed: ' + cast(@numpages as nvarchar(20))
END
GO


--Update all statistics
PRINT 'Updating all statistics.' + convert(nvarchar, getdate(), 121) 
EXEC sp_updatestats
PRINT 'Done updating statistics.' + convert(nvarchar, getdate(), 121) 
GO

… das über das SQL Server Management Studio ausgeführt wird.

image

Einfach reinkopieren und (New Query) und mit Execute ausführen, dass Script selektiert die SUSDB gleich zu Anfang und beginnt die Indizes neu zu organisieren.

Nun kann die SUSDB verkleinert (Shrink) werden.

Schritt 3 – Verkleinern (Shrink) der SUSDB

Dazu wählen wir im Object Explorer des Microsoft SQL Server Management Studios die SUSDB aus.

image

Danach mit der rechten Maustaste Tasks / Shrink / Database und klicken hier auf OK.

Wie im Screenshot zu sehen ist, hat die Datenbank auf einmal 64% freien Platz … was doch ganz ordentlich ist.

image

Wie alles beim WSUS dauert das verkleinern seine Zeit, danach haben wir aber das Problem für die nächste Zeit behoben.

Vorher:

08.05.2018  05:56    10.652.549.120 SUSDB.mdf

Nachher:

08.05.2018  06:16     3.385.720.832 SUSDB.mdf

Enjoy it, b!

Windows 10 Update 1803 und der Windows Essentials Connector

Mit dem Update auf Windows 10 Build 1803 stand natürlich wieder die Frage im Raum “Was macht der Connector für den Windows Server Essentials”?

Im Gegensatz zu diesem und dem letztem https://sbsland.me/2018/03/01/windows-server-2012-essentials-connector-und-windows-10-upgrade/Blog zu dem Thema, nimmt die Anzahl der esoterischen Maßnahmen ab Smile Mir hat genau ein (1x) weiterer Reboot des aktualisierten Windows 10 PCs genügt und der Windows Server Essentials Connector hatte wieder eine Verbindung zum Server.

Klasse, dann geht das nämlich im Herbst gleich nach dem Neustart (so als Prognose).

Enjoy it, b!