Wenn Server nach einem Neustart die Netzwerkkarten vertauscht haben

Ich hatte letztlich das Problem, dass sich Netzwerkkarten bei Linux und Windows nach einem Neustart immer wieder vertauschten. Da die Server dadurch über Netzwerk nicht mehr erreichbar sind und ausfallen, ist das natürlich sehr ärgerlich. Da ich jetzt gerade eine neuen Firewall auf Basis von Ubuntu Linux mit 9 Netzwerkkarten und 100 VPN-Tunneln eingerichtet habe, wollte ich das Problem auf jeden Fall verhindern. Deshalb habe ich das Problem noch mal genauer untersuch und viel Doku dazu gelesen. Jetzt ist mir klar warum das Problem auftritt und ich kann es zukünftig verhindern.

Ursache: Da die Betriebssysteme zum schnellen Booten alles parallel starten, kommt es beim Booten regelmäßig dazu, dass die Hardwaretreiber in anderer Reihenfolge geladen werden. Wenn man im Server zwei Netzwerkkarten mit unterschiedlichen Treibern hat, kann dabei die Reihenfolge vertauscht werden, in der die Treiber geladen werden. Da bei älteren Windows- und Linuxservern die Netzwerkkarten einfach nur anhand der Startreihenfolge durchnummeriert werden, kann es somit vorkommen, dass die IP-Konfiguratiuonen der Karten durcheinander gewürfelt werden.

Lösung bei neueren Betriebssystemen: Bei neueren Betriebssystemen wird das Vertauschen der Karten verhindert. Windows merkt sich inzwischen für welche Karte eine Konfiguration war und zählt bei neuen Karten einfach immer weiter hoch. Es bindet (vermutlich anhand der Mac-Adresse oder Seriennummer) die Konfiguration fest an eine Netzwerkkarte und vergibt eine bereits vergebene Nummer kein zweites mal. Deshalb hat man bei Windows auch machmal einen Netzwerkadapter 5 oder 6, obwohl aktuell nur eine Karte im Betriebssystem steckt. Bei Linux wird der Steckplatz der Karte mit in den Namen der Netzwerkkarte aufgenommen. Eine Netzwerkkarte auf PCI-Slot 2 heißt dann z.B. p2p1, wobei das p2 dann für den PCI-Slot 2 und das p1 für den ersten Port der Karte steht. Theoretisch kann man bei Linux also eine neue Karte in den gleichen Slot stecken und die Konfiguration sollte noch funktionieren.

Probleme bei der Virtualisierung mit Ubuntu 14.04 LTS und KVM

Nachdem Ubuntu 14.04 LTS jetzt schon über zwei Monate alt ist, habe ich die ersten Server migriert. Ich hatte gehofft, dass die meisten schlimmen Fehler inzwischen behoben sind und man das System ohne größere Probleme betreiben kann.

Als ich den ersten Server für Virtualisierung migrierte, erwies sich meine Annahme aber leider als falsch. Zunächst liefen die Gast-Betriebsysteme ohne Probleme und dank der Technik Hyper V von Microsoft auch viel schneller als vorher. Je nach Auslastung wurden sie aber zunehmend langsamer und stürzten nach 3 bis 12 Stunden ganz ab. Die Windows-Gäste standen dann im Bluescreen und die Linux-Gäste hatten eine Kernelpanik.

Wie sich zeigte gibt es im Linux-Kernel 3.13 von Ubuntu 14.04 wohl noch einige Bugs, die früher oder später für einen Absturz der Gast-Betriebssysteme sorgen:

Nach diversen erfolglosen Versuchen das Problem in den Griff zu bekommen, stieß ich auf einen Blog-Post von Peter Kieser. Dieser machte den Vorschlag, den erprobten Linux-Kenel 3.10 mit Langzeitsupport für Ubuntu 14.04 zu kompilieren. Dieser Kernel wird auch bei RedHat Enterprise Linux verwendet, ist für Virtualisierung erprobt und er löste alle meine Probleme! Und dies geht wie folgt (ggf. kann man natürlich auch einen neueren Patchlevel des 3.10er Kerbels verwenden):

apt-get -y install build-essential
cd /usr/local/src
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.46.tar.xz
tar -Jxf linux-3.10.46.tar.xz
cd linux-3.10.46
cp /boot/config-`uname -r` .config
make olddefconfig
make -j`nproc` INSTALL_MOD_STRIP=1 deb-pkg
dpkg -i ../*.deb
apt-mark hold linux-libc-dev

Außerdem machte Peter Kieser noch einige Tuning Vorschläge, die er auch durch den Vergleich mit RedHat Enterprise Linux gefunden hatte. Ich habe mir davon die Verwendung des e1000 Netzwerkkartentreibers bei den Windows-Gästen, die Einträge für Hyper V in der Konfig der Windows-Gäste, die Anpassung von Grub und die Einträge in der /etc/sysctl.conf abgeschaut.

Einträge für Hyper V in der Konfig der Windows-Gäste

In die Konfig der Windows-Gäste müssen – sofern noch nicht vorhanden – die folgenden Zeilen in den Abschnitt „features“ eingetragen werden:

  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='4096'/>
  </hyperv>

In die Konfig der Windows-Gäste gelangt man am einfachsten, wenn man in der virsh

edit <Name der virtuellen Maschine>

eingibt. Man landet dann mit einem vi in der Konfig und wenn man den vi beendet, wird die Konfig auch gleich richtig gespeichert.

Die Datei sollte nach den Änderungen etwa wie folgt aussehen:

<domain type='kvm'>
  <name>WKSNUE01</name>
  <uuid>cce892d2-8fee-3add-f25d-6a46b1f14268</uuid>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
    </hyperv>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/daten/images/WKSNUE01.img'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <interface type='network'>
      <mac address='52:54:00:14:8c:a5'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Anpassung von Grub

In der Datei „/etc/default/grub“ sollten für den Linux-Kernel „Headline scheduler“, and „transparent hugepages“ eingeschaltet werden. Dies macht macht man in der Variable „GRUB_CMDLINE_LINUX_DEFAULT“. Die Zeile mit der Variable sollte dazu wie folgt aussehen.

GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline transparent_hugepage=always"

Damit die Anpassung aktiv wird muss man noch den folgenden Befehl eingeben.

update-grub

Einträge für die Datei /etc/sysctl.conf

kernel.sched_min_granularity_ns=10000000
kernel.sched_wakeup_granularity_ns=15000000
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.swappiness=10

Excel 2011 kann 500.000 Zeilen

Excel 500tWie ich gerade feststelle, kann man in Excel 2011 von Microsoft selbst bei fast einer halben Million Zeilen noch mit Pivot-Tabellen arbeiten. Ich habe so etwas in Excel schon länger nicht mehr probiert und hatte auch keine große Hoffnung das es klappt. Bei den älteren Excel-Versionen war schon bei 32.000 Zeilen bzw. bei 64.000 Zeilen Schluss. Da hätte ich jetzt erwartet das es bis vielleicht bis 128.000 oder 254.000 geht.

Alleine die Datei ist schon 100 MB groß und das öffnen der selben dauert auf meinem super schnelle Computer (core 7i mit SSD und 8 GB RAM) fast eine Minute. Aber wenn die Datei geladen ist kann man halbwegs damit arbeiten.

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.

Exchange 2010: Ereignis-ID 6006 / SeSecurityPrivilege privilege is removed

Nach der Installation des Servicepack 2 für Mircosoft Exchange 2010 meldete die Ereignisanzeige andauernd eine Warnung „SeSecurityPrivilege privilege is removed …“ mit einer wilden nummerischen SID und der Ereignis-ID 6006.

Nach einer Internetrecherche habe ich die Bedeutung dieser mal wieder herrlich verklausulierten Meldung herausgefunden. Microsoft will uns damit sagen, dass in der lokalen Sicherheitsrichtlinie

Verwalten von Überwachungs- und Sicherheitsprotokollen

die Exchangeserver nicht eingetragen sind. Diese Richtlinie ist in der Registry unter dem Pfad

Computerkonfiguration\Windows-Einstellungen\Sicherheitseinstellungen\Lokale Richtlinien\Zuweisen von Benutzerrechten\

zu finden. Normaler Weise sollten hier die beiden Standardgruppen „Exchange Servers“ und „Exchange Enterprise Servers“ stehen. Wenn man diese beiden Gruppen dort einträgt, gibt es zukünftig keine Warnungen in der Ereignisanzeige mehr.

Anzeigen der Postfachgröße bei Exchange 2010

Wer einen Server mit Microsoft Exchange betreibt ist oft auf der Suche nach den Benutzern, die zu viel Speicherplatz belegen. Leider gibt es in der grafischen Konsole von Exchange 2010 keine Möglichkeit in einer Liste alle Mailboxen mit ihrer Größe anzuzeigen. Um eine solche List zu erhalten benötigt man also die Power Shell. Die brauchbaren Kommandos für die Power Shell haben jedoch leider den Nachteil, dass Sie sich durch ihre Länge und komplexität nicht sonderlich gut merken lassen. Deshalb habe ich mir im folgenden mal drei nützliche Varianten zum ermitteln der Mailboxgröße aufgeschrieben.

Alle Mailboxen nach Größe anzeigen

get-mailboxdatabase | get-mailboxstatistics | Sort -Property TotalItemSize -descending| select-object DisplayName,@{expression={$_.TotalItemSize.value.ToMB()}}, Itemcount,ServerName

Alle Mailboxen nach Größe und mit Datenbank anzeigen

get-mailboxdatabase | get-mailboxstatistics | Sort -Property TotalItemSize -descending| select-object DisplayName,@{expression={$_.TotalItemSize.value.ToMB()}}, Itemcount,ServerName,Database |ft

Alle Mailboxen einer Datenbank auflisten
(anstelle von Test muss hier der DB-Name eingesetzt werden)

get-Mailboxdatabase -Identity "Test" | get-mailboxstatistics | Sort -Property TotalItemSize -descending| select-object DisplayName,@{expression={$_.TotalItemSize.value.ToMB()}},Itemcount,ServerName

Autodiscover bei Outlook abschalten

Die Autodiscover Funktion von Outlook ist eine nützliche Sache, die einen bei gemischten Umgebungen mit mehre Firewalls, DNS- und Exchangeservern in die Verzweiflung treiben kann. Vielleicht hat Microsoft deshalb ja sogar einen Song über Autodicover auf der Technet-Webseite veröffentlicht 😉


http://gallery.technet.microsoft.com/The-Autodiscover-Song-a68b9f7c

Leider läuft ab Outlook 2007 ohne autodiscover einiges nicht mehr (z.B. Free and Busy Informationen, der Abwesenheitsassist, das Offline Address Book usw). Dies lässt sich allerdings umgehen, indem man für den Client das Autodiscover abzuschalten. Im folgenden ein paar Registry-Einträge einem dies ermöglichen:

HKCU\Software\Microsoft\Office\12.0\Outlook\AutoDiscover
DWORD: DisableAutoStartup
Set to 1
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\12.0\Outlook\AutoDiscover
DWORD: ZeroConfigExchange
Set to 1
2. Free Busy:
Outlook 2007 zwingen den Public Folder Free/Busy zu nutzen:
Key: HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\Options\Calendar
DWORD: UseLegacyFB
Wert:
0 (oder nicht vorhanden) = default Einstellung - Autodiscover nutzen
1 = public folder free/busy nutzen

Berechtigungen bei einem Exchange Server 2010 neu setzen

Unter bestimmten Umständen kann es dazu kommen, dass die Berechtigungen bei einem Exchange Server 2010 Server falsch gesetzt sind. Ich hatte neulich z.B. den Fall, dass interne E-Mails trotzt korrekter Konfiguration nicht von einem zum anderen Server übermittelt wurden.

Für solche Fälle gibt es den Schalter /preparelegacyexchangepermissions für die setup.exe. Wenn man die setup.exe mit diesem Parameter auf dem Server erneut startet, werden die Berechtigungen erneut gesetzt.

Outlook 2003 für Exchange 2010 verwenden

Wenn man mit Microsoft Office Outlook 2003 auf ein Microsoft Exchange Server 2010-Postfach zugreift, werden E-Mail die gelöscht oder verschoben wurden noch längere Zeit im Ordner angezeigt. Dies liegt daran, dass Microsoft bei Exchange 2010 keine UDP-Benachrichtigungen mehr an Outlook versendet.

Da sehr viele Kunden noch Outlook 2003 einsetzen, hat Microsoft diese Funktion aber mit „Update Rollup 3 für Exchange Server 2010 Service Pack 1“ wieder ermöglicht. Damit die UDP-Benachrichtigungen wieder gesendet werden, muss allerdings zusätzlich der folgende Registrierungsschlüssel inklusive Subschlüssel erstellt werden:

SubkEy-Speicherort: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeRPC\ParametersSystem
SubkEy-Name: EnablePushNotifications
Typ: REG_DWORD
Wert: 1

Nähere Informationen findet man in dem Microsoft Knowledge Base Artikel 2009942.