GästebuchIhr Eintrag in unser Gästebuch KontaktNehmen Sie Kontakt mit den Autoren auf ArchivAlle Unixwerk- Artikel seit 2003
5. Januar 2011

AIX-Migration von 5.3 nach 6.1 mit minimaler Downtime

»Die NIM-Methode »Alternate Disk Migration«

Inhalt

  1. Einleitung
  2. Voraussetzungen auf dem NIM-Server
  3. Die LPP-Source
  4. Der Spot
  5. Definition des Clients
  6. Vorbereitung des Clients
  7. Die Migration
  8. Starten des migrierten Systems
  9. Wiederherstellung des Spiegels
  10. Weiterführende Literatur

 

1. Einleitung

"Never touch a running system" - dieser Leitsatz gilt ganz besonders sicherlich bei unternehmenskritischen Servern. Doch von Zeit zu Zeit müssen auch diese mal eine Auffrischung des Betriebssystems erfahren. Nun dauert so eine Migrations-Installation durchaus schon mal ein paar Stunden. Diese Stunden multipliziert mit der Anzahl zu migrierender Server darf der arme Admin dann auch noch im eisgekühlten Rechenzentrum verbringen - nur um von Zeit zu Zeit mal eine CD zu tauschen. Grund genug sich nach Alternativen umzuschauen.

Um eine solche Alternative geht es in diesem Artikel: Die Migration der vorhandenen AIX Installation auf den neuesten Stand, während das alte System aktiv bleibt. Angestoßen wird diese Migration von einem NIM Server durch die »Alternate Disk Migration«-Methode. Bei diesem Verfahren reduziert sich die Downtime auf die Zeit, die ein LPAR-Neustart in Anspruch nimmt.

 

2. Voraussetzungen auf dem NIM-Server

Ganz ohne Aufenthalt im Rechenzentrum geht es allerdings doch nicht. Der Grund ist der NIM-Server selbst. Dieser muss nämlich zunächst einmal händisch auf den neuesten Stand gebracht werden. Wie das elegant gemacht wird, steht z.B. in einem unixwerk-Artikel aus dem Jahre 2004 (->Alternate Disk Migration ohne NIM-Server). Dies ist nötig, da ein NIM-Server keinen niedrigeren Softwarestand aufweisen darf als er bedienen soll.

Desweiteren müssen eine Reihe von NIM-Objekten definiert werden. Die folgenden Abschnitte 3 bis 5 beschreiben dies im Detail.

 

3. Die LPP-Source

Im Folgenden wollen wir eine LPP-Source kreieren, die bereits unseren gewünschten Technology-Level und das gewünschte Service-Pack enthält. Unsere LPP-Source soll im Verzeichnis /export/nim/lpp_source/aix61 liegen

Die Base-Level-Filesets gibt's nur auf CD oder DVD - diese lesen wir vom Medium ein:

nimserver# smitty bffcreate
                                                        [Entry Fields]
* INPUT device / directory for software          [/dev/cd0]           +
* SOFTWARE package to copy                       [all]                +
* DIRECTORY for storing software package         [/export/nim/lpp_source/aix61]
  DIRECTORY for temporary storage during copying [/tmp]
  EXTEND file systems if space needed?            yes                 +
  Process multiple volumes?                       yes                 +

Nachdem die Base-Level-Filesets kopiert sind, fahren wir mit den Technology-Level fort. Diesen haben wir von der IBM-Seite z.B. in das Verzeichnis /tmp/6100-06 heruntergeladen. Sie werden in das gleiche Verzeichnis kopiert, in dem sich bereits die Base-Level-Filesets befinden:

nimserver# smitty bffcreate
                                                        [Entry Fields]
* INPUT device / directory for software          [/tmp/6100-06]       +
* SOFTWARE package to copy                       [all]                +
* DIRECTORY for storing software package         [/export/nim/lpp_source/aix61] 
  DIRECTORY for temporary storage during copying [/tmp]
  EXTEND file systems if space needed?            yes                 +
  Process multiple volumes?                       yes                 +

Zu guter Letzt wird dann das Service-Pack kopiert. Angenommen dieses haben wir von der IBM-Seite in das Verzeichnis /tmp/6100-06-03 heruntergeladen:

nimserver# smitty bffcreate
                                                        [Entry Fields]
* INPUT device / directory for software          [/tmp/6100-06-03]    +
* SOFTWARE package to copy                       [all]                +
* DIRECTORY for storing software package         [/export/nim/lpp_source/aix61] 
  DIRECTORY for temporary storage during copying [/tmp]
  EXTEND file systems if space needed?            yes                 +
  Process multiple volumes?                       yes                 +

Nachdem alles an seinem Platz ist, bleibt uns nur noch das entsprechende NIM-Objekt zu definieren:

nimserver# nim -o define -t lpp_source \
                -a server=master \
                -a location=/export/nim/lpp_source/aix61 \
                -a comments='Full AIX 6.1.0 source including TL6 SP3' \
            lpp_aix61

Mit dem obigen Befehl haben wir ein NIM-Objekt des Typs lpp_source mit dem Namen lpp_aix61 definiert. Mit lsnim können wir uns noch einmal das Objekt anzeigen lassen:

nimserver# lsnim -l lpp_aix61
lpp_aix61:
   class       = resources
   type        = lpp_source
   comments    = Full AIX 6.1.0 source including TL6 SP3
   arch        = power
   Rstate      = ready for use
   prev_state  = unavailable for use
   location    = /export/nim/lpp_source/aix61
   simages     = yes
   alloc_count = 1
   server      = master

Durch das Kopieren von Filesets aus drei verschiedenen Quellen gibt es eine Reihe überflüssiger Filesets, die nichts weiter als Platz wegnehmen - in unserem konkreten Fall ca. 400 MB. Diese überflüssigen Filesets können aus der LPP-Source entfernt werden:

nimserver# smitty nim_lppmgr

Dann geben wir die LPP-Source an und bekommen folgende Maske:

                                              [Entry Fields]
  TARGET lpp_source                         lpp_aix61
  PREVIEW only?                             no               +
  REMOVE DUPLICATE software                 yes              +
  REMOVE SUPERSEDED updates                 yes              +
  REMOVE LANGUAGE software                  yes              +
      PRESERVE language                    [en_US]
  REMOVE NON-SIMAGES software               no               +
  SAVE removed files                        no               +
      DIRECTORY for storing saved files    []
  EXTEND filesystems if space needed?       yes              +

 

4. Der Spot

Als nächstes müssen wir einen Spot erstellen, der aus der im vorigen Abschnitt erzeugten LPP-Source gespeist wird:

nimserver# nim -o define -t spot \
               -a server=master \
               -a source=lpp_aix61 \
               -a location=/export/nim/spot \
               -a comments='Spot created from AIX 6.1-TL6-SP1' \
            spot_aix61

Bis der Spot zur Verfügung steht, dauert es eine ganze Weile, da alle Basis-Filesets und Gerätetreiber in den Spot installiert werden - diese entspricht dem Vorgang einer gewöhnlichen AIX-Installation.

An dieser Stelle sei angemerkt, dass für location - anders als dies bei der LPP-Source der Fall ist - kein weiterer Pfadanteil für den Spot angegeben werden sollte, da automatisch der Objektname (also spot_aix61) angehängt wird. Dies sehen wir, wenn wir uns das NIM-Objekt mit lsnim anschauen:

nimserver# lsnim -l spot_aix61
spot_aix61:
   class         = resources
   type          = spot
   comments      = Spot created from AIX 6.1-TL6-SP1
   plat_defined  = chrp
   arch          = power
   bos_license   = yes
   Rstate        = ready for use
   prev_state    = verification is being performed
   location      = /export/nim/spot/spot_aix61/usr
   version       = 6
   release       = 1
   mod           = 0
   oslevel_r     = 6100-05
   alloc_count   = 0
   server        = master
   if_supported  = chrp.mp ent
   Rstate_result = success

Damit wir eine »Alternate Disk Migration« durchführen können, muss das Fileset bos.alt_disk_install im Spot enthalten sein - ist es aber nicht. Wir müssen dieses manuell nachinstallieren. Dies tun wir am besten mit SMIT:

nimserver# smitty nim_inst_latest

Dann geben wir Spot und LPP-Source an und bekommen folgende Maske, in deren drittes Feld wir das nachzuinstallierende Fileset eintragen:

Type or select values in entry fields.
Press Enter AFTER making all desired changes.
                                                      [Entry Fields]
* Installation Target                              spot_aix61
* LPP_SOURCE                                       lpp_aix61
* Software to Install                             [bos.alt_disk_install.rte]                                           
  Customization SCRIPT to run after installation  []              + 
    (not applicable to SPOTs)
  Force                                            no             +
  installp Flags
    PREVIEW only?                                 [no]            +
    COMMIT software updates?                      [yes]           +
    SAVE replaced files?                          [no]            +
    AUTOMATICALLY install requisite software?     [yes]           +
    EXTEND filesystems if space needed?           [yes]           +
    OVERWRITE same or newer versions?             [no]            +
    VERIFY install and check file sizes?          [no]            +
    ACCEPT new license agreements?                [no]            +
      (AIX V5 and higher machines and resources)
    Preview new LICENSE agreements?               [no]            +

  Group controls (only valid for group targets):
    Number of concurrent operations               []               #
    Time limit (hours)                            []               #

  Schedule a Job                                  [no]            +
  YEAR                                            []               #
  MONTH                                           []              +#
  DAY (1-31)                                      []              +#
  HOUR (0-23)                                     []              +#
  MINUTES (0-59)                                  []              +#

 

5. Definition des Clients

Die Clients sollten eigentlich schon definiert sein, da dies normalerweise bei der ersten Installation getan wird. Der Einfachheit halber soll unser Client auf den Namen client hören. Wir überprüfen, ob eine Definition verhanden ist, mit lsnim:

nimserver# lsnim -l client
client     machines       standalone

Sollten Sie stattdessen allerdings folgende Antwort erhalten -

nimserver# lsnim -l client
0042-053 lsnim: there is no NIM object named "client"

muss der Client neu oder wieder definiert werden. Dies geschieht mit:

nimserver# nim -o define -t standalone \
               -a platform=chrp \
               -a netboot_kernel=mp \
               -a if1="network client mac-address ent" \
               -a cable_type1=tp \
            client

Für network muss das entsprechende NIM-Objekt gesetzt werden. Wir finden alle Objekte dieses Typs mit:

nimserver# lsnim -t ent -l
masternet:
   class      = networks
   type       = ent
   Nstate     = ready for use
   prev_state = information is missing from this object's definition
   net_addr   = 198.162.1.0
   snm        = 255.255.255.0
   routing1   = default 198.162.1.1

Für mac-address müssen wir die MAC-Adresse des Bootadapters setzen - diese findet sich z.B. mit

nimserver# netstat -i
Name  Mtu   Network     Address           Ipkts Ierrs   Opkts Oerrs  Coll
en3   1500  link#2      0.2.55.52.67.a9   352475085     0 178951250   3    0
en3   1500  198.162.1   client            352475085     0 178951250   3    0

Mit diesen Informationen wird der Client dann definiert:

nimserver# nim -o define -t standalone \
               -a platform=chrp \
               -a netboot_kernel=mp \
               -a if1="masternet client 0002555387a9 ent" \
               -a cable_type1=tp \
            client

 

6. Vorbereitung des Clients

Im Folgenden gehen wir davon aus, dass der zu migrierende Client über eine gespiegelte rootvg verfügt. Für die Migration wird dieser Spiegel temporär aufgebrochen

client# unmirrorvg rootvg hdisk1

Trotz Entfernen aller gespiegelten LVs von der zweiten Platte, können sich dort noch einzelne ungespiegelte LVs befinden, z.B. ein zweites Dump-Device. Wir überprüfen dies mit

client# lspv -l hdisk1
hdisk1:
LV NAME               LPs   PPs   DISTRIBUTION          MOUNT POINT
dump2                 8     8     00..08..00..00..00    N/A

Alles, was dort noch liegt, sollte dann auf hdisk0 migriert werden - freie PPs natürlich vorausgesetzt:

client# migratepv hdisk1 hdisk0

und wir können endlich die zweite Platte aus der rootvg lösen:

client# reducevg rootvg hdisk1

Möchten Sie Ihre alte Message Of The Day behalten, sichern Sie diese jetzt - die wird nämlich bei der Migration überschrieben:

client# cp /etc/motd /etc/motd.alt

 

7. Die Migration

Zunächst müssen wir den Remote-Zugang des NIM-Servers ermöglichen, dafür legen wir die Datei /.rhosts mit folgendem Inhalt an:

nimserver root

In der Datei /etc/inetd.conf akivieren wir den rshd, indem wir gegebenfalls den Hash (#) vor dem entsprechenden Eintrag entfernen:

shell  stream  tcp6    nowait  root    /usr/sbin/rshd  rshd

und den Internet-Superserver neu starten:

client# refresh -s inetd
0513-095 The request for subsystem refresh was completed successfully.

Damit sind die Arbeiten auf dem Client abgeschlossen und wir können vom NIM-Server aus die Migration starten:

nimserver# nimadm -c client -l lpp_aix61 -s spot_aix61 -d hdisk1 -Y

Dieser Befehl stößt zunächst den Prozess des Klonens der rootvg an und danach die Migrations-Installation auf AIX 6.1. Dabei werden 12 Phasen durchschritten, auf die ich hier nicht weiter eingehen will. Insgesamt dauert das Ganze gut und gerne einige Stunden, in denen eine Reihe von Bildschirmausgaben erscheinen.

Auf dem Client sehen wir während der Migration neue Dateisysteme:

client# df
Filesystem    512-blocks      Free %Used    Iused %Iused Mounted on
nimserver:/export/nim/lpp_source/aix61     66846720  39144896   42%   20261   1% /ALT_MIG_IMAGES
nimserver:/export/nim/spot/spot_aix61/usr  66846720  39144896   42%   20261   1% /ALT_MIG_SPOT
/dev/alt_hd4      262144    109808   59%     3874     6% /alt_inst
/dev/alt_hd1      524288    264336   50%      897     2% /alt_inst/home
/dev/alt_ibmlv    262144    203488   23%      181     1% /alt_inst/ibm
/dev/alt_hd10opt  262144    203144   23%      715     3% /alt_inst/opt
/dev/alt_hd3     1310720   1241488    6%      124     1% /alt_inst/tmp
/dev/alt_hd2     3014656    413976   87%    29867     8% /alt_inst/usr
/dev/alt_hd9var   655360    158992   76%     1324     2% /alt_inst/var

Nach Abschluss der Phase 12 ist die Migration dann abgeschlossen und wir müssen uns noch einmal dem Client zuwenden: Die Änderungen für den rsh-Zugang (/.rhosts, /etc/inetd.conf) machen wir noch schnell rückgängig und dann rebooten wir die LPAR. Da die Bootliste durch den NIM-Prozess bereits auf die migrierte Installation zeigt, brauchen wir nichts weiter als ein beherztes

client# shutdown -Fr

abzusetzen.

 

8. Starten des migrierten Systems

Nachdem das System wieder gestartet ist, sollte es AIX 6.1 TL6 SP3. Wir überprüfen dies mit

client# oslevel -s
6100-06-03

Auch auf dem migrierten System müssen wir gegebenfalls die Änderungen in den Dateien /.rhosts und /etc/inetd.conf zurücknehmen und den Internet-Superserver neu starten:

client# refresh -s inetd
0513-095 The request for subsystem refresh was completed successfully.

 

9. Wiederherstellung des Spiegels

Für eine Weile wird man die Möglichkeit aufrecht erhalten wollen, auf die alte AIX-Version zurückschalten zu können, doch irgendwann kommt der Tag, an dem das Vertrauen in die neue Version hoch genug ist, um die alte Installation zu löschen und die rootvg wieder zu spiegeln.

Zunächst löschen wir die alte Installation:

client# alt_disk_install -X old_rootvg

Die alte Installation kann auch anders heißen - dies passiert z.B. wenn man die old_rootvg einmal aufweckt und dann wieder schlafen legt - dabei wird sie dann in altinst_rootvg umgetauft.

Nun steht hdisk0 wieder zur Verfügung und wir können die rootvg spiegeln:

client# extendvg -f rootvg hdisk0
client# mirrorvg -s rootvg hdisk0

Die beiden Befehle synchronisieren die VG noch nicht. Da das Synchronisieren eine sehr hohe I/O-Belastung erzeugt, ist es ratsam zu warten, bis das System weniger belastet ist, also z.B.:

client# echo varyonvg rootvg | at 23:00

Falls Sie unter 6 (Vorbereitung des Clients) ein oder mehrere LVs auf die andere Platte migrieren mussten, migrieren Sie diese(s) jetzt wieder zurück:

client# migratepv -l mylv hdisk0 hdisk1

Um sicher zu gehen, dass auch beim nächsten Reboot alles gut geht, schreiben wir die beiden BLVs neu:

client# bosboot -ad hdisk0

bosboot: Boot image is 30112 512 byte blocks.
client# bosboot -ad hdisk1

bosboot: Boot image is 30112 512 byte blocks.

Zu guter Letzt setzen wir die Bootliste so, dass von beiden Platten gebootet werden kann:

client# bootlist -m normal hdisk0 hdisk1

 

A. Weiterführende Literatur