Eine bestehende Thin Provisioned Virtual Disk (VMDK) verkleinern

VMware Thin Provisioned VMDKs sind ja mittlerweile weder ein Performanceproblem noch eine VCDX Design-Unschicklichkeit, sondern ganz im Gegenteil in vielen produktiven Systemen zu finden. Vor allem temporäre Datenbankexplosionen (Temp Bulk-Inserts oder Exports) lassen sich damit ausgezeichnet vor der teuren Belegung von Produktivstorage abfedern. TEMP-Volumes die zwar in der Regel klein, aber im Notfall dann größer sein müssen sind schon fast „Thin-Standard“.

Oft wird uns die Frage gestellt, wie man eine Thin-Disk, nachdem diese temporär mit Daten belegt worden ist, wieder kleiner bekommt. Die VMDK wächst ja bekanntlich mit, verkleinert sich aber selbstständig nicht. Wie verkleinert man VMDKs?

Lösung

Die entsprechende Partition muss für optimale Ergebnisse erst defragmentiert werden und der freie Speicher dann mit Nullen gefüllt sein. Diese werden von den VMKFSTOOLS dann als solche erkannt. Betriebssystme Nullen ihren Speicher aus performancegründen praktisch nie, daher muss das forciert werden. geht aber recht schnell.

    1. Windows: SDelete herunterladen und mit
      sdelete.exe -z <Laufwerk>

      den verbliebenen Restspeicher nullen.

    2. Linux: Den Platz nullen mit dd:
      dd bs=1M count=8192 if=/dev/zero of=zero
    3. VM ausschalten (oder VMDK disconnecten)
    4. Via SSH auf einen Host verbinden
    5. Disk verkleinern mit
      vmkfstools -K [/vmfs/volumes/lun178/mydisk.vmdk]

Exchange 2010: „Diese Postfachdatenbank enthält mindestens ein Postfach, einen Postfachplan, ein Archivpostfach oder ein Vermittlungspostfach …“

Problem

Eine Exchange 2010 Datenbank lässt sich nach einer Migration auf einen anderen Server (2010 odr 2013) nicht löschen. Es erscheint bei jemden Versuch folgende Fehlermeldung:

Die Postfachdatenbank  kann nicht gelöscht werden.

<Mailbox Database Name>
Fehler: Diese Postfachdatenbank enthält mindestens ein Postfach, einen Postfachplan, ein
Archivpostfach oder ein Vermittlungspostfach. Führen Sie den Befehl ‘Get-Mailbox -Database
<Database ID>’ aus, um eine Liste aller Postfächer in der Datenbank abzurufen. Führen
Sie den Befehl ‘Get-MailboxPlan’ aus, um eine Liste aller Postfachpläne in dieser
Datenbank abzurufen. Führen Sie den Befehl ‘Get-Mailbox -Database <Database ID>
-Archive’ aus, um eine Liste mit Archivpostfächern in dieser Datenbank abzurufen. Führen
Sie den Befehl ‘Get-Mailbox -Database <Database ID> -Arbitration’ aus, um eine Liste
aller Vermittlungspostfächer in dieser Datenbank abzurufen. Wenn Sie ein Postfach, bei dem
es sich nicht um ein Vermittlungspostfach handelt, deaktivieren möchten, um die
Postfachdatenbank löschen zu können, führen Sie den Befehl ‘Disable-Mailbox <Mailbox
ID> aus. [....]

Lösung

Es gibt einige System-Postfächer, die in einer Liste aus „get-mailbox“ nicht auftauchen. Das sind – in den meisten Fällen – das Systempostfach und das Organisations-Postfach „FederatedEmail“. Diese Postfächer werden aber auch in der ManagementConsole nicht (mehr) angezeigt.

Die Namen der Postfachdatenbanken liefert die Exchange-PowerShell mit:

Get-MailboxDatabase

Daraus kann man dann jeweils die betroffenen Postfächer anzeigen um sie zu verschieben (nein, pipen ist mit Arbitration nicht möglich, man muss kopieren+einfügen):

Get-Mailbox -Database "AlteDatenbank" -Arbitration | Select-Object Name | fl

Dann kann man diese einzeln verschieben:

New-MoveRequest -Identity "FederatedEmail.4c4c4c4foobar" -TargetDatabase "NeueDatenbank"

Exchange Server 2013 umbenennen

Problem

Kann ich meinen Exchange Server 2013 umbenennen?

Lösung

Offiziell von Microsoft gibt es zwei unterstütze Wege dieses Ziel zu erreichen. Erstens den Exchange deinstallieren, Windows umbenennen und Exchange wieder installieren. Zweitens einen zusätzlichen Exchange in dieselbe Organisation installieren, alles dorthin migrieren, den Quellserver deinstallieren, umbennen, Exchange wieder installieren und zurückmirgrieren.

tldr; Nein.

Windows Batch Ausgabeumleitung

Problem

CACLS, ICACLS und ähnliche Tools schreiben ihre Fehler-Ausgabe nicht wie gewohnt durch den Parameter „>“ in eine umgeleitete Pipe oder Datei. Auch mit „find“ lässt sich die Ausgabe nicht parsen, es kommen keine Daten an.

Lösung

Prinzipiell ganz nett ist die Idee, verschiedene Stdout’s zu verwenden, so wie das andere Betriebssysteme auch machen. Leider ist das nur sehr schlecht dokumentiert, uneinheitlich umgesetzt und praktisch an der Kommandozeile nicht auffindbar. So sehen die „neuen“ Redirectoren aus:

BEIDES (Stdout+Stderr in eine Datei loggen)
commandA 1> DATEI.TXT 2>&1

Stdout und Stderr weiterleiten
command > standard output umleiten
command 1> standard output umleiten (wie oben)
command 2> standard error output umleiten
command > file 2>&1	beides (standard und error) output umleiten
command >> standard output umleiten und anhängen
commandA | commandB	standard output weiterreichen
commandA 2>&1 | commandB	beides (standard und error) output weiterreichen
command &1	standard error in standard output umleiten
command 1>&2	standard output in standard error umleiten