VMWare Oddysee


Wir haben hier eine hübsche VMWare GSX Server Kiste die einige unserer Testsysteme hostet. Eine Besonderheit dabei ist, dass die Maschine neben ihrem normalen eth0 noch ein eth1 hat das in mehreren VLAN's steht und mit Hilfe von VLAN Tagging und einem 802.1q Trunk Port auf der Switchseite nur ein Ethernet Interface benötigt.

Die unterliegende Hardware war bisher ein guter? alter Compaq DL760 mit 8 CPU's den es bei Last immer in einen Kernel-Lockup getrieben hat. Nach diversen Experimenten mit anderen VMWare Versionen, Kernel Updates, Distro Wechsel von Debian nach RHEL4 die alle das Problem nicht behoben haben wurde es nun mal Zeit die zugrunden liegende Hardware zu tauschen. Nachdem nun ein HP DL380G3 frei wurde habe ich die komplette Maschine per rsync -avPSHx auf die neue Hardware umgezogen. Nach 2 1/2 Stunden war alles auf der neuen Maschine eigentlich sollte diese ja nun recht problemlos wieder hochkommen.

Leider wird sich das noch als Trugschluss herausstellen, da ich einige Kleinigkeiten nicht bedacht habe und andere Effekte es sich in den Kopf gesetzt haben mir ins Knie zu schiessen.

rsync ist Klasse, hat aber Nebenwirkungen. Man bekommt zwar alle Daten 'rüber, einige Metadaten gehen allerdings verloren, wie z.B. die Context-Informationen von SELinux. Ausserdem sollte man sich ein wenig mit grub auskennen damit man die neue Maschine auch wieder bootbar bekommt. Und die dritte Hürde ist dann der Wechsel des RAID Controller Treiber von cpqarray zu cciss.

Nachdem ich grub und mkinitrd gebändigt habe und die neue Maschine gebootet hat habe ich die VM's wieder gestartet. Leider ist das vmware allerdings so "intelligent" dass es bei der automatischen Ermittlung eines Netzes für NAT eines unserer intern genutzten Netze verwendet so dass eine Kommunikation mit dem VMWare Host nach dem Start des VMWare nicht mehr möglich ist. Nun gut, ist ja nix was nicht ändern könnte. vmware-config.pl gestartet ein ungenutztes Netz für's NAT eingerichtet und dezent eine Warnung wegen differierender Compilerversionen ignoriert.

Dem Start der VM sollte nun ja eigenlich nicht mehr im Wege stehe, und so habe ich die 10 installierten VM's gestartet und micht auf einen frühen Feierabend gefreut (dummer Fehler!) Nachdem die VM's gestartet waren und ich noch ein defektes /var Filesystem auf einer der VM neu angelegt habe muss ich leider feststellen dass die VM's die über eth1 auf ein anderes VLan zugreifen wollen zwar untereinander reden können aber nichts ausserhab der VM in diesen LAN erreichten. Nun gut, tcpdump und ethereal sind ja meine Freunde und so machte ich mich auf die Suche nach den verlorenen Paketen.

tcpdump auf dem VMWare Host zeigt nichts gesonderes, ausser dass wohl keine Antworten auf die ARP Anfragen aus diesem LAN kommen. Nun gut dann muss ich mal schauen was aus dem Ethernet Interface wirklich 'rausfällt und nach einer kleinen Umkonfigurierungs-Arie von Switches und Sniffer Host konnte ich dann auch dass Ethernet Interface per ethereal sniffen und sah das keine Arp-Anfragen aus dem Interface 'rausfielen.

Nun gut, dass könnte ja die Netzwerkkarte im neuen Host sein, vielleicht hat ja der tg3 Chipsatz da irgend ein Problem… So baue ich die alte Ethernetkarte aus dem alten DL760 und baue sie in den neue Rechner ein. Leider ist das Problem damit nicht beseitigt, sondern besteht weiterhin, also noch mal tcpdump und ethereal anwerfen und schauen ob sich was verändert hat. Ausser der MAC Adresse wohl offensichtlich nichts :-(

Um zu prüfen ob es nun am Linux oder am VMWare konfiguriere ich eine IP Adresse auf VLAN Interface des VMWare Hosts, bisher hatte es keine, da es ja nur zum Bridging in den VMWare Software Switch benutzt wird. Aber auch von Host aus kann ich nichts anpingen oder in dem Netz erreichen, scheint wohl eher am Linux zu liegen ?!?

Erst ein Blick in /proc/net/vlan/eth1.23 macht mich stutzig, Warum steht "total frames transmitted" eigentlich auf 0? OK, dann einfach mal das debugging im e100 kernel modul aktivieren vieleicht gibt das einen Hinweis. /etc/modprobe.conf ist schnell ergänzt, aber ein rmmod e100 schlägt fehl weil irgendwer das eth1.23 nicht richtig freigegeben hat. Nun gut dann boote ich die die Kiste eben… Noch schnell den Autostart von vmware ausgeschaltet, Kiste rebootet (hat jemand mitgezählt? war bestimmt von das 5. mal heute) und dann mal geschaut ob nun das VLAN Tagging geht. Ob Wunder! ohne VMWare funktioniert es ja! War da nicht etwas mit einer Warnung bezüglich differierender Kompilerversionen?!? OK, Kernel wurde mit gcc 3.4.5 kompiliert aber installiert ist ein gcc 3.4.6. Grmml, das tut doch nicht Not!

Nun gut dann machen wir mal ein up2date, hoffentlich kommt dann eine mit einem gcc 3.4.6 gebaute kernel version. up2date liefert rd. 20 neue RPM's aber die Installation der RPM's schlägt im %pre und/oder %post mit "scriptlet failed, exit status 255" fehl… Grrr, inzwischen ist es 18:45 und ich hab eigentlich keinen Bock mehr aber aufgeben zählt nicht. Ein wenig googlen bringt mich dann auf den Trichter dass SELinux mir da möglicherweise in die Suppe spuckt. Also in /etc/sysconfig/selinux SELinux disabled, Kiste wieder booten und die RPM's nun endlich installiert. Nun noch ein weiterer Boot um den neuen Kernel zu starten und noch einmal durch vmware-config.pl durchgehühnert diesmal ohne Warnung wegen differierender Compilerversionen. Nun VMWare starten und die VM's hochziehen und siehe da: Sie sind alle wieder erreichbar.

Was lernen wir daraus liebe Kinder: Immer schön an die Meta-Informationen eines Filesystems denken und die eine oder andere Warnung erstnehmen, das kann einem 6 Stunden Sucherei ersparen.

Nu ist aber Zeit für Feierabend!

vmware