Migration nach AIX PCM kombiniert mit OS-Update

Bei den meisten AIX Systemen wird wahrscheinlich in regelmäßigen Abständen der SP- oder TL-Level aktualisiert. Es bietet sich an, bei einem solchen Update, die Migration von SDDPCM nach AIX PCM mit durchzuführen. Dies spart Zeit und einige Reboots, die ansonsten extra wegen der Multipathing Migration durchgeführt werden müssen.

In unserem Blog-Beitrag „Migration von SDDPCM nach AIX-PCM“ hatten wir die Migration für Standalone Systeme schon gezeigt.

Hier soll die Migration von SDDPCM nach AIX-PCM im Rahmen eines OS-Updates gezeigt werden, wobei das Alternate Disk Copy Verfahren zum Einsatz kommt. Der Ablauf ist im groben der folgende:

  1. Entspiegeln der rootvg um eine freie Platte für Alternate Disk Copy zu gewinnen.
  2. Ändern des Path Control Moduls (PCM) auf AIX PCM.
  3. Erzeugen der altinst_rootvg.
  4. Entfernen von Fixes in der altinst_rootvg.
  5. Durchführen des OS-Updates auf der altinst_rootvg.
  6. Installation von Fixes in der altinst_rootvg.
  7. Hinzufügen eines firstboot-Skripts um Platten-Attribute zu setzen.
  8. Ändern des Path Control Moduls (PCM) zurück auf SDDPCM.
  9. Booten von der altinst_rootvg.

Auf unserem Beispiel-System ist AIX 7.1 TL5 SP2 installiert, die Platten sind SVC-Platten, die über virtual FC Adapter angebunden sind. SDDPCM ist der aktuell aktive Multipathing-Treiber:

# oslevel -s
7100-05-02-1810
# lsdev -l hdisk0 -F uniquetype
disk/fcp/2145
aix01:/root> lsattr -El hdisk0 -a PCM -F value
PCM/friend/sddpcm
#

Wie schon im oben genannten Blog-Beitrag ausgeführt, ändern sich einige Platten-Attribute bei der Migration auf AIX PCM. Daher sollte man sich die aktuellen Attribute genau anschauen, um diese gegebenenfalls später zu übernehmen (zumindest teilweise). Exemplarisch schauen wir uns hier nur das Attribut queue_depth an, welches aktuell den Wert 120 hat:

# lsattr -El hdisk0 -a queue_depth -F value
120
#

Unser System besitzt eine gespiegelte rootvg:

# lsvg -p rootvg
rootvg:
PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
hdisk3            active            399         232         00..01..71..80..80
hdisk0            active            399         240         00..01..79..80..80
#

Das System wurde von der hdisk0 gebootet:

# bootinfo -b
hdisk0
#

Daher lassen wir die hdisk0 in der rootvg und entfernen die hdisk3 aus der rootvg, um eine freie Platte für Alternate Disk Copy zu gewinnen.

# unmirrorvg rootvg hdisk3
0516-1246 rmlvcopy: If hd5 is the boot logical volume, please run 'chpv -c <diskname>'
        as root user to clear the boot record and avoid a potential boot
        off an old boot image that may reside on the disk from which this
        logical volume is moved/removed.
0516-1804 chvg: The quorum change takes effect immediately.
0516-1144 unmirrorvg: rootvg successfully unmirrored, user should perform
        bosboot of system to reinitialize boot records.  Then, user must modify
        bootlist to just include:  hdisk0.
# reducevg rootvg hdisk3
# chpv -c hdisk3
# bootlist -m normal hdisk0
#

Bevor wir nun mittels Alternate Disk Copy eine Kopie der rootvg erzeugen, stellen wir das System temporär auf AIX PCM um, ohne allerdings zu rebooten. Wird dann anschließend die altinst_rootvg erzeugt, dann ist in dieser die Umstellung auf AIX PCM schon vorgenommen!

# manage_disk_drivers -d IBMSVC -o AIX_AAPCM
********************** ATTENTION *************************
  For the change to take effect the system must be rebooted
#

Am Ende des OS-Updates machen wir diese Umstellung dann auf der rootvg wieder rückgängig, um den Original-Zustand mit SDDPCM zu haben.

Nach diesen Vorbereitungen starten wir nun das alt_disk_copy Kommando:

# alt_disk_copy -d hdisk3 -B
Calling mkszfile to create new /image.data file.
Checking disk sizes.
Creating cloned rootvg volume group and associated logical volumes.
Creating logical volume alt_hd5.
Creating logical volume alt_hd6.
Creating logical volume alt_hd8.
…
#

Auf dem System sind einige EFixes installiert, die wir vor dem Update noch aus der altinst_rootvg entfernen:

# emgr -l
ID  STATE LABEL      INSTALL TIME      UPDATED BY ABSTRACT
=== ===== ========== ================= ========== ======================================
1    S    102m_ifix  10/14/18 10:48:18            IFIX for Openssl CVE on 1.0.2m       
2    S    IJ03121s0a 10/14/18 10:49:04            IJ03121 for AIX 7.1 TL5 SP00         
3    S    IJ05822s2a 10/14/18 10:49:18            a potential security issue exists    
…
#

Aktivieren der altinst_rootvg:

# alt_rootvg_op -W -d hdisk3
Waking up altinst_rootvg volume group ...
#

Und entfernen der EFixes:

# INUCLIENTS=1 /usr/sbin/chroot /alt_inst /usr/sbin/emgr –r -n 3
+-----------------------------------------------------------------------------+
Efix Manager Initialization
+-----------------------------------------------------------------------------+
Initializing log /var/adm/ras/emgr.log ...
Accessing efix metadata ...
Processing efix label "IJ05822s2a" ...
…
Operation Summary
+-----------------------------------------------------------------------------+
Log file is /var/adm/ras/emgr.log

EFIX NUMBER       LABEL               OPERATION              RESULT           
===========       ==============      =================      ==============   
1                 IJ05822s2a          REMOVE                 SUCCESS          

Return Status = SUCCESS
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -r -n 2
…
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -r -n 1
…

(Hinweis: Bitte nicht die Variable INUCLIENTS vergessen, diese signalisiert das die Operation in einem Alternate Boot Environment stattfindet!)

Wir mounten nun die LPP-Source für den OS-Update per NFS von unserem NIM-Server:

# mount aixnim:/export/nim/lpps/aix710503lpp /mnt
#

Nun kann der OS-Update in der altinst_rootvg durchgeführt werden:

# alt_rootvg_op -C -b update_all -l /mnt
Installing optional filesets or updates into altinst_rootvg...
install_all_updates: Initializing system parameters.
install_all_updates: Log file is /var/adm/ras/install_all_updates.log
install_all_updates: Checking for updated install utilities on media.
…
installp:  * * * A T T E N T I O N ! ! !
        Software changes processed during this session require
        any diskless/dataless clients to which this SPOT is
        currently allocated to be rebooted.
install_all_updates: Log file is /var/adm/ras/install_all_updates.log
install_all_updates: Result = SUCCESS
#

Abschließend installieren wir noch einige EFixes, dazu mounten wir zunächst das Verzeichnis /mnt mit den Fixes in die altinst_rootvg:

# mount -v namefs /mnt /alt_inst/mnt
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -e /mnt/emgr/ppc/102p_fix.181127.epkg.Z
+-----------------------------------------------------------------------------+
Efix Manager Initialization
+-----------------------------------------------------------------------------+
Initializing log /var/adm/ras/emgr.log ...
Efix package file is: /mnt/emgr/ppc/102p_fix.181127.epkg.Z
…
EPKG NUMBER       LABEL               OPERATION              RESULT           
===========       ==============      =================      ==============   
1                 102p_fix            INSTALL                SUCCESS          

Return Status = SUCCESS
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -e /mnt/emgr/ppc/IJ09621s3a.181001.epkg.Z
…
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -e /mnt/emgr/ppc/IJ11545s0a.181127.epkg.Z
…
# umount /alt_inst/mnt
#

Um die gewünschten Platten-Attribute zu setzen und um SDDPCM zu deinstallieren verwenden wir ein firstboot-Skript:

# cat /alt_inst/etc/firstboot
#! /bin/ksh

print "INFO: adjust hdisk attributes"
chdev -Pl hdisk0 -a queue_depth=120

print "INFO: uninstalling SDDPCM"
installp -u devices.sddpcm.$(uname -v)$(uname -r).rte devices.fcp.disk.ibm.mpio.rte

print "INFO: perform reboot"
reboot

# chmod a+x /alt_inst/etc/firstboot
#

Das Skript sollte, falls man es verwendet, auf die eigenen Bedürfnisse angepaßt werden und man sollte dort alle gewünschten Platten-Attribute anpassen (queue_depth, reserve_policy,…). Das Beispiel-Skript hier soll nur andeuten was man alles machen könnte!

Die altinst_rootvg ist nun aktualisiert und auf AIX PCM umgestellt. Wir deaktivieren die altinst_rootvg, damit von dieser gebootet werden kann.

# alt_rootvg_op –S -t
Putting volume group altinst_rootvg to sleep ...
forced unmount of /alt_inst/var/adm/ras/livedump
…
forced unmount of /alt_inst
Fixing LV control blocks...
Fixing file system superblocks...
#

(Hinweis: Bitte nicht die Option “-t” vergessen, diese erzeugt ein neues Boot-Image!)

Bevor wir jedoch nun von der altinst_rootvg booten, stellen wir auf der rootvg den Multipathing Treiber wieder zurück auf SDDPCM!

# manage_disk_drivers -d IBMSVC -o NO_OVERRIDE
********************** ATTENTION *************************
  For the change to take effect the system must be rebooted
#

Abschließend stellen wir noch die Bootliste auf die altinst_rootvg (hdisk3) um:

# bootlist -m normal hdisk3
#

Und als Letztes rebooten wir nun:

# shutdown –r now

SHUTDOWN PROGRAM
Tue Apr 16 19:49:08 CEST 2019

Broadcast message from root@aix01 (tty) at 19:49:08 ...

PLEASE LOG OFF NOW ! ! !
System maintenance in progress.
All processes will be killed now.
…

-------------------------------------------------------------------------------
                                Welcome to AIX.
                   boot image timestamp: 19:45:08 04/16/2019
                 The current time and date: 19:51:11 04/16/2019
        processor count: 2;  memory size: 4096MB;  kernel size: 36847630
       boot device: /vdevice/vfc-client@3000000a/disk@5005076XXXXXXXXX:2
-------------------------------------------------------------------------------
…
Multi-user initialization completed
INFO: adjust hdisk attributes
hdisk0 changed
INFO: uninstalling SDDPCM
…
Installation Summary
--------------------
Name                        Level           Part        Event       Result
-------------------------------------------------------------------------------
devices.sddpcm.71.rte       2.7.1.1         ROOT        DEINSTALL   SUCCESS   
devices.sddpcm.71.rte       2.7.1.1         USR         DEINSTALL   SUCCESS   
devices.fcp.disk.ibm.mpio.r 1.0.0.25        USR         DEINSTALL   SUCCESS   
INFO: perform reboot
Rebooting . . .
…

AIX Version 7
Copyright IBM Corporation, 1982, 2018.
Console login:

(In der Ausgabe kann man die Aktionen des firstboot-Skriptes sehen: Änderung Plattenattribute, Deinstallation SDDPCM und Reboot.)

Nach dem Einloggen überprüfen wir die OS-Version, den verwendeten Multipathing Treiber und ein paar Platten-Attributes:

# oslevel -s
7100-05-03-1846
# lsdev -l hdisk0 -F uniquetype
disk/fcp/mpioosdisk
# lsattr -El hdisk0 -a PCM -F value
PCM/friend/fcpother
# lsattr -El hdisk0 -a queue_depth -F value
120
# genkex|grep pcm
         5ae0000    60000 /usr/lib/drivers/aixdiskpcmke
# lslpp -l|grep sddpcm
#

Damit haben wir die Migration von SDDPCM nach AIX PCM zusammen mit einem OS-Update erfolgreich durchgeführt. Durch Verskripten lässt sich dies noch automatisieren.

Wir haben dies für AIX 7.1 und AIX 7.2 getestet. Ein Test für PowerHA konnten wir bisher aus zeitlichen Gründen noch nicht durchführen.

Interim Fixes und Alternate Disk Copy

Bei Verwendung des Alternate Disk Copy Verfahrens für AIX Updates kommt es gelegentlich vor das installierte Fixes einen erfolgreichen Update verhindern. Hier bietet es sich an, die installierten Fixes direkt in der altinst_rootvg zu deinstalieren. Dazu kann das emgr Kommando mittels chroot direkt in der altinst_rootvg aufgerufen werden.

Nach dem Erstellen der altinst_rootvg, z.B. mit dem Kommando alt_disk_copy, muß die altinst_rootvg zunächst ersteinmal aktiviert werden:

# alt_rootvg_op -W -d hdisk3
Waking up altinst_rootvg volume group ...
#

Die installierten Fixes kann man sich dann wie folgt auflisten lassen:

# /usr/sbin/chroot /alt_inst /usr/sbin/emgr –l

ID  STATE LABEL      INSTALL TIME      UPDATED BY ABSTRACT
=== ===== ========== ================= ========== ======================================
1    S    102m_ifix  10/14/18 10:48:18            IFIX for Openssl CVE on 1.0.2m       
2    S    IJ03121s0a 10/14/18 10:49:04            IJ03121 for AIX 7.1 TL5 SP00         
3    S    IJ05822s2a 10/14/18 10:49:18            a potential security issue exists    
…

Beim Entfernen von Fixes in der altinst_rootvg ist die Umgebungsvariable INUCLIENTS wichtig. Diese signalisiert dem emgr Kommando keine Dienste zu restarten und keine Geräte dynamisch zu ändern. Ohne das Setzen dieser Variablen schlägt die Deinstallation einiger Fixes in der altinst_rootvg fehl!

# INUCLIENTS=1 /usr/sbin/chroot /alt_inst /usr/sbin/emgr –r -n 3
+-----------------------------------------------------------------------------+
Efix Manager Initialization
+-----------------------------------------------------------------------------+
Initializing log /var/adm/ras/emgr.log ...
Accessing efix metadata ...
Processing efix label "IJ05822s2a" ...
...
Operation Summary
+-----------------------------------------------------------------------------+
Log file is /var/adm/ras/emgr.log

EFIX NUMBER       LABEL               OPERATION              RESULT           
===========       ==============      =================      ==============   
1                 IJ05822s2a          REMOVE                 SUCCESS          

Return Status = SUCCESS
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -r -n 2
…
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -r -n 1
…

Nun stehen einem OS-Update keine Fixes mehr im Weg!

Nach dem OS-Update können auf ähnliche Weise neue Fixes noch vor dem Reboot in der altinst_rootvg installiert werden. Wir mounten zunächst das Verzeichnis mit den Fixes unter /alt_inst/mnt:

# mount aixnim:/export/nim/lpps/aix710503lpp /alt_inst/mnt
#

Und installieren anschließend die Fixes wieder mit Hilfe von chroot und INUCLIENTS direkt in der altinst_rootvg:

# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -e /mnt/emgr/ppc/102p_fix.181127.epkg.Z
+-----------------------------------------------------------------------------+
Efix Manager Initialization
+-----------------------------------------------------------------------------+
Initializing log /var/adm/ras/emgr.log ...
Efix package file is: /mnt/emgr/ppc/102p_fix.181127.epkg.Z
…
EPKG NUMBER       LABEL               OPERATION              RESULT           
===========       ==============      =================      ==============   
1                 102p_fix            INSTALL                SUCCESS          

Return Status = SUCCESS
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -e /mnt/emgr/ppc/IJ09621s3a.181001.epkg.Z
…
# INUCLIENTS=1 chroot /alt_inst /usr/sbin/emgr -e /mnt/emgr/ppc/IJ11545s0a.181127.epkg.Z
…

Als letztes muß die altinst_rootvg dann noch deaktiviert werden, hierbei sollte man auf jeden Fall noch einmal ein neues Boot-Image in der altinst_rootvg erzeugen, ansonsten bleibt das System beim Booten der altinst_rootvg hängen!

# alt_rootvg_op –S -t
Putting volume group altinst_rootvg to sleep ...
forced unmount of /alt_inst/var/adm/ras/livedump
…
forced unmount of /alt_inst
Fixing LV control blocks...
Fixing file system superblocks...
#

(Hinweis: Die Option ‚-t‚ erzwingt das Erzeugen eines neuen Boot-Images!)

Nun kann wie gewohnt die Boot-Liste umgestellt werden und das System nach dem Update rebootet werden.

 

Wir wollen Feedback!

Wir wollen Feedback! Das neue PowerCampus „LPAR tool“ steht zum Download bereit! In weiten Teilen überarbeitet und in C++ geschrieben. Es unterstützt Output in verschiedenen Formaten: JSON + YAML!

Die ersten 100 Feedbacks erhalten beim Kauf zwei Lizenzen (2 LPARS) gratis! Für immer!

Also, downloaden installieren und Feedback geben, einfach per Mail an info@powercampus.de!

Die integrierte Test-Lizenz unterstützt ohne weitere Registrierung eine HMC und zwei komplette Managed Systems! Für eine erweiterte Trialversion für 4 HMC’s und unbegrenzte MS einfach eine Mail an info@powercampus.de senden.

Download „LPAR tool“: https://powercampus.de/en/download-2/

Fehlermeldungen von der Crypto Library beim Einloggen

Auf einigen Systemen fanden sich kürzlich im syslog Fehlermeldungen beim Einloggen mit ssh (oder auch bei /bin/su) der folgenden Art:

Mar 15 10:43:47 aix01 auth|security:err|error sshd[14024884]: Crypto library (CLiC) error: Wrong object type

Mar 15 11:08:42 aix01 auth|security:err|error su: Crypto library (CLiC) error: Wrong signature

Einloggen und auch das su-Kommando funktionierten aber ohne Probleme. Allerdings waren die vielen Fehlermeldungen, eine bei jedem Login, lästig.

Der Hinweis auf die Crypto Library (CLiC), die eigentlich nur bei Verwendung von EFS benötigt wird, war schon mal ein Hinweis bei der Untersuchung. Auf den Systemen ist kein EFS im Einsatz. Eine Überprüfung mit dem Kommando „efskeymgr –V“ ergab folgendes:

$ efskeymgr -V
There is no key loaded in the current process.
$

Hier hätte eigentlich eine Fehlermeldung kommen müssen, mit dem Hinweis das EFS nicht aktiviert ist. Ein Blick ins Verzeichnis /var zeigt das das Verzeichnis /var/efs (in dem die EFS-Keys gespeichert werden) existiert:

$ ls -l /var/efs
total 24
drwx------    2 root     system          256 Apr 25 2017  efs_admin/
-rw-r--r--    1 root     system            0 Apr 25 2017  efsenabled
drwx------   51 root     system         4096 Mar 17 10:40 groups/
drwx------  123 root     system         8192 Mar 17 05:15 users/
$

Es wurde also EFS aktiviert, obwohl es nicht verwendet wird. Zum Deaktivieren von EFS ist eigentlich ein Reboot notwendig. Da es in unserem Fall aber nicht wirklich benutzt wird und vermutlich nur aufgrund eines Versehens oder Fehlers eingeschaltet wurde, behelfen wir uns mit dem folgenden Workaround, wir benennen das Verzeichnis /var/efs um:

$ mv /var/efs /var/efs.orig
$

Ein kurzer Test mit dem Kommando “efskeymgr –V“ zeigt, das für AIX EFS nun nicht aktiv ist:

$ efskeymgr -V
Problem initializing EFS framework.
Please check EFS is installed and enabled (see efsenable) on you system.
Error was: (EFS was not configured)
$

Ein Test-Login mittels ssh bestätigt das beim Login keine Fehlermeldung mehr geloggt wird.

Hinweis: Bitte sicherstellen das EFS wirklich nicht benutzt wird!

 

Cron-Jobs werden nicht mehr gestartet

Kürzlich wurde auf einem unserer AIX Systeme kein Cron-Job mehr gestartet. Es gab keinen Eintrag im Error Report und auch per Syslog konnte kein Hinweis auf das Problem gefunden werden. Im Log des cron-Daemon fanden sich allerdings jede Menge Meldungen:

# cat /var/adm/cron/log
...
! c queue max run limit reached Sat Feb 23 08:49:00 2019
! rescheduling a cron job Sat Feb 23 08:49:00 2019
...

Unter AIX ist die Anzahl der aktiven Cron-Jobs standardmäßig auf maximal 100 gesetzt. Offensichtlich war diese Anzahl auf unserem System erreicht worden. Neue Einträge werden dann per Default 60 Sekunden später ausgeführt. Beides kann über die Datei /var/adm/cron/queuedefs konfiguriert werden. Der Wert 100 ist allerdings schon recht hoch und ein Erreichen des Wertes deutet auf ein Problem hin.

Die PID des cron-Daemon lässt sich schnell herausfinden:

$ ps -ef|grep cron
    root  6684924        1   0   Sep 26      -  8:03 /usr/sbin/cron
$

Die aktuell aktiven Cron-Jobs laufen als Sohn-Prozesse des cron. Mit der Option „-T“ des ps-Kommandos lassen wir uns diese auflisten:

$ ps -T 6684924
      PID    TTY  TIME CMD
  6684924      -  8:03 cron
  3276876      -  0:00    |\--perl
  9961588      -  0:00    |    \--mount
 12714002      -  0:07    |        \--nfsmnthelp
  3604516      -  0:00    |\--perl
 20185130      -  0:00    |    \--mount
 10158264      -  0:35    |        \--nfsmnthelp
  4587542      -  0:00    |\--perl
...

Es fällt sofort auf, das sich die Zeilen immer wieder wiederholen, d.h. ein Perl-Programm wurde per cron immer wieder gestartet, dieses hat versucht ein Filesystem per NFS zu mounten, was aber nicht funktioniert hat (keine Antwort vom NFS-Server) und das Perl-Skript hängt. Da das Skript immer wieder neu gestartet wurde, gab es dann ab irgendeinem Zeitpunkt 100 aktive Cron-Jobs und von diesem Moment an wurden dann keine weiteren Cron-Jobs mehr gestartet. Wir zählen kurz die aktiven Perl-Prozesse:

$ ps -T 6684924 |grep perl |wc -l
     100
$

Es sind genau 100 Perl-Prozesse, die von cron gestartet wurden. Wir beenden einige der hängenden Perl-Prozesse:

# kill 3276876 3604516  4587542
#

Ein Blick ans Ende der Logdatei von cron zeigt das Jobs beendet wurden, und nach kurzer Zeit taucht dann auch schon der erste neu gestartete Cron-Job auf:

# tail –f /var/adm/cron/log
…
Cron Job with pid: 3276876 Failed
Cron Job with pid: 3604516  Failed
Cron Job with pid: 4587542Failed
mqm       : CMD ( /appdata/mqm/admin/bin/checks/checkXmitMonitoring.sh >>/appdata/mqm/tracks/logs/scheduler/checkXmitMonitoring.fatal 2>&1 ) : PID ( 28442840 ) : Mon Feb 25 10:34:00 2019
…

Wir beenden auch die übrigen hängenden Prozesse und restarten den cron-Daemon sicherheitshalber, indem wir ihn einfach beenden:

# kill 6684924
#

Der cron-Daemon wird Dank eines /etc/inittab-Eintrags automatisch neu gestartet:

# lsitab cron
cron:23456789:respawn:/usr/sbin/cron
#

Nachdem cron wieder arbeitet, sollte das Perl-Skript untersucht werden, welches letztlich zum Hängen von cron geführt hat. Bei regelmäßig per cron gestarteten Skripten empfiehlt sich eine Überprüfung, ob der Job eventuell noch oder schon läuft.

Home-Verzeichnisse automatisch anlegen

Es gib verschiedene Möglichkeiten unter AIX fehlende Home-Verzeichnisse beim Login automatisch anlegen zu lassen. Dies ist insbesondere nützlich, wenn die Benutzer-Accounts über LDAP oder einen anderen Namensdienst verwaltet werden und nicht lokal angelegt werden. Wird ein Benutzer neu im LDAP angelegt, hat er zunächst kein Home-Verzeichnis auf dem AIX LDAP-Client:

$ ssh new_user@aix01
...
Could not chdir to home directory /home/new_user: No such file or directory
$ pwd
/
$ exit
$

Die wohl einfachste Möglichkeit das Home-Verzeichnis beim Login automatisch anzulegen, ist das Attribute mkhomeatlogin in der Datei /etc/security/login.cfg. Der Default für dieses Attribut ist „false“, falls es nicht gesetzt ist:

# lssec -f /etc/security/login.cfg -s usw -a mkhomeatlogin
usw mkhomeatlogin=
# 

Das Attribut lässt sich mit dem Kommando chsec auf den Wert true setzen:

# chsec -f /etc/security/login.cfg -s usw -a mkhomeatlogin=true
# lssec -f /etc/security/login.cfg -s usw -a mkhomeatlogin
usw mkhomeatlogin=true
#

Wir probieren den Login erneut aus:

$ ssh new_user@aix01
...
$ pwd
/home/new_user
$

Es wurde ein neues Home-Verzeichnis für den Benutzer angelegt.

Migration von SDDPCM nach AIX PCM

Auf vielen AIX Systemen wird aktuell noch SDDPCM als Multipathing Lösung eingesetzt. Allerdings wird SDDPCM auf POWER 9 Hardware von IBM nicht mehr unterstützt.

Im folgenden soll daher die Migration von SDDPCM nach AIX PCM gezeigt werden. Auf unserem Beispielsystem haben wir die folgenden Physical Volumes:

$ lspv
hdisk0          00abcdefabcde000                    datavg          active     
hdisk1          00abcdefabcde001                    datavg          active     
hdisk2          none                                None                       
hdisk3          00abcdefabcde003                    altinst_rootvg             
hdisk4          00abcdefabcde004                    rootvg          active     
$

Bei den Physical Volumes handelt es sich um Platten, die über einen SVC zur Verfügung gestellt werden:

$ lsdev -l hdisk0 -F uniquetype
disk/fcp/2145
$

Als Path Control Module (PCM) wird SDDPCM verwendet:

$ lsattr -El hdisk0 -a PCM -F value
PCM/friend/sddpcm
$

Dies sieht man auch, wenn man sich die Liste der Kernel Extensions anschaut:

$ genkex | grep pcm
f1000000c012a000    af000 /usr/lib/drivers/sddpcmke
$

Welcher PCM Treiber für welche Disk Typen verwendet wird, lässt sich leicht mit dem Kommando „manage_disk_drivers“ sehen:

$ manage_disk_drivers -l
Device              Present Driver        Driver Options    
2810XIV             AIX_AAPCM             AIX_AAPCM,AIX_non_MPIO
DS4100              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS4200              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS4300              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS4500              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS4700              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS4800              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS3950              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS5020              AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DCS3700             AIX_APPCM             AIX_APPCM
DCS3860             AIX_APPCM             AIX_APPCM
DS5100/DS5300       AIX_SDDAPPCM          AIX_APPCM,AIX_SDDAPPCM
DS3500              AIX_APPCM             AIX_APPCM
XIVCTRL             MPIO_XIVCTRL          MPIO_XIVCTRL,nonMPIO_XIVCTRL
2107DS8K            NO_OVERRIDE           AIX_AAPCM,AIX_non_MPIO,NO_OVERRIDE
IBMFlash            NO_OVERRIDE           AIX_AAPCM,AIX_non_MPIO,NO_OVERRIDE
IBMSVC              NO_OVERRIDE           AIX_AAPCM,AIX_non_MPIO,NO_OVERRIDE
$

In unserem Falle, SVC Platten, ist die letzte Zeile relevant (IBMSVC). Als aktueller PCM Treiber ist hier NO_OVERRIDE gelistet, mögliche andere Treiber sind AIX_AAPCM (AIX PCM für active/active und ALUA Systeme) und AIX_non_MPIO (Platten ohne Multi-Pathing betreiben). Der Wert NO_OVERRIDE bedeutet, das wenn kein Multipathing-Treiber explizit angegeben wird, nach Möglichkeit ein Multipathing-Treiber verwendet wird (falls vorhanden), ansonsten wird kein Multipathing-Treiber verwendet. Steht mehr als ein Multipathing-Treiber zur Verfügung (bei uns AIX PCM und SDDPCM, dann hat SDDPCM Priorität).

In einem nachfolgenden Blog-Eintrag werden wir die möglichen Werte noch einmal genauer anschauen, sowie die Stelle in AIX, an der die Auswahl festgehalten wird.

Bevor wir jetzt den Treiber für IBMSVC Platten ändern (hierzu ist ein Reboot notwendig), schauen wir uns noch die Attribute unsere Platten an, hier exemplarisch für die hdisk0:

$ lsattr -El hdisk0
PCM             PCM/friend/sddpcm                                   PCM                                     True
...
algorithm       load_balance                                        Algorithm                               True+
...
queue_depth     120                                                 Queue DEPTH                             True+
...
reserve_policy  no_reserve                                          Reserve Policy                          True+
...
$

Durch Ändern des Treibers gehen die Werte einiger gesetzter Attribute verloren, bzw. werden durch neue default Werte des neuen Treibers ersetzt. Dies gilt insbesondere für die queue_depth (hier: 120), die reserve_policy (hier: no_reserve) und die Load-Balancing-Policy (algorithm). Die aktuellen Werte sollte man notieren, um dann nach der Umstellung auf den AIX PCM Treiber diese dann entsprechend anzupassen.

Das Wechseln auf AIX PCM kann mit dem Kommando „manage_disk_drivers“ durchgeführt werden. Hierzu wird dem Kommando der Disk-Typ (hier IBMSVC) mit der Option „-d“ und der gewünschte Treiber (hier AIX_AAPCM für den AIX PCM Treiber) mit der Option „-o“ mitgegeben:

# manage_disk_drivers -d IBMSVC -o AIX_AAPCM
********************** ATTENTION *************************
  For the change to take effect the system must be rebooted
#

Die geänderte Konfiguration lässt sich unmittelbar mit „manage_disk_drivers -l“ auflisten:

$ manage_disk_drivers -l
Device              Present Driver        Driver Options    
...
IBMSVC              AIX_AAPCM             AIX_AAPCM,AIX_non_MPIO,NO_OVERRIDE
$

Für die Durchführung der Änderung muss das System nun rebootet werden:

# shutdown -r now

SHUTDOWN PROGRAM
Thu Feb  7 09:43:38 CET 2019
...

Wir führen die 3 Kommandos vom Anfang noch einmal aus (lspv, lsdev und lsattr):

$ lspv
hdisk0          00abcdefabcde000                    datavg          active     
hdisk1          00abcdefabcde001                    datavg          active     
hdisk2          none                                None                       
hdisk3          00abcdefabcde003                    altinst_rootvg             
hdisk4          00abcdefabcde004                    rootvg          active     
$

Die Physical Volumes sind unverändert.

$ lsdev -l hdisk0 -F uniquetype
disk/fcp/mpioosdisk
$

Der Typ der Platten hat sich geändert von disk/fcp/2145 auf disk/fcp/mpioosdisk. Dies deutet schon an, das sich der Multipathing-Treiber geändert hat.

$ lsattr -El hdisk0 -a PCM -F value
PCM/friend/fcpother
$

Das Path Control Module (PCM) hat sich ebenfalls geändert. Der Typ ist nicht mehr sddpcm sondern fcpother. Das schaut erst einmal nicht direkt nach AIX PCM aus. Ein Blick auf den zugehörigen Treiber zeigt aber sofort das hier AIX PCM in Verwendung ist:

$ lsdev -P -c PCM -s friend -t fcpother -F DvDr
aixdiskpcmke
$

Die zugehörige Kernel Extension aixdiskpcmke ist auch aktuell geladen und in Verwendung:

$ genkex | grep pcm
         73e2000    57000 /usr/lib/drivers/aixdiskpcmke
$

Schauen wir uns nun, wieder exemplarisch für hdisk0, die Attribute an. Wir erwarten ja hier geänderte Werte für einige Attribute:

$ lsattr -El hdisk0
PCM             PCM/friend/fcpother                                 Path Control Module              False
...
algorithm       fail_over                                           Algorithm                        True+
...
queue_depth     20                                                  Queue DEPTH                      True+
...
reserve_policy  single_path                                         Reserve Policy                   True+
...
$

Der Wert 120 für die queue_depth ist verloren gegangen und wurde durch den default Wert 20 ersetzt. Die reserve_policy hat sich auf single_path geändert und der Load-Balancing Algorithmus ist nun fail_over, d.h. es wird immer nur ein Pfad verwendet.

Wir ändern die Einstellungen auf eine Konfiguration die der Ausgangssituation entspricht:

# chdev -P -l hdisk0 -a algorithm=shortest_queue -a queue_depth=120 -a reserve_policy=no_reserve
hdisk0 changed
#

Da das Physical Volume in Benutzung ist, kann die Einstellung nur in der ODM geändert werden und es ist ein weiterer Reboot notwendig.

Nachdem alle Platten über die ODM umkonfiguriert worden sind, muss das System ein zweites Mal rebootet werden:

# shutdown -r now

SHUTDOWN PROGRAM
Thu Feb  6 20:07:12 CET 2019
...

Nach dem Reboot kann SDDPCM dann deinstalliert werden:

# installp -u devices.fcp.disk.ibm.mpio.rte devices.sddpcm.72.rte
+-----------------------------------------------------------------------------+
                    Pre-deinstall Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
Results...

SUCCESSES
...
0503-292 This update will not fully take effect until after a
        system reboot.

    * * *  A T T E N T I O N  * * *
    System boot image has been updated. You should reboot the
    system as soon as possible to properly integrate the changes
    and to avoid disruption of current functionality.

installp:  bosboot process completed.
+-----------------------------------------------------------------------------+
                                Summaries:
+-----------------------------------------------------------------------------+

Installation Summary
--------------------
Name                        Level           Part        Event       Result
-------------------------------------------------------------------------------
devices.sddpcm.72.rte       2.7.1.1         ROOT        DEINSTALL   SUCCESS   
devices.sddpcm.72.rte       2.7.1.1         USR         DEINSTALL   SUCCESS   
devices.fcp.disk.ibm.mpio.r 1.0.0.25        USR         DEINSTALL   SUCCESS   
#

Das SDDPCM Fileset, sowie das zugehörige Host-Attachment Fileset, konnten erfolgreich deinstalliert werden.

Da der SDDPCM-Treiber nicht geladen war, und sich damit auch keine Änderungen am Kernel ergeben haben, sollte eigentlich ein weiterer Reboot nicht notwendig sein. Da allerdings ausdrücklich auf einen schnellen Reboot hingewiesen wird, und es auch eine gute Idee ist mit der finalen Konfiguration einen Reboot-Test zu machen, rebooten wir das System ein drittes und letztes Mal:

# shutdown -r now

SHUTDOWN PROGRAM
Thu Feb  6 20:17:21 CET 2019
...

Nach dem Reboot kontrollieren wir noch einmal die Platten-Attribute:

$ lsattr -El hdisk0
PCM             PCM/friend/fcpother                                 Path Control Module              False
...
algorithm       shortest_queue                                      Algorithm                        True+
...
queue_depth     120                                                 Queue DEPTH                      True+
...
reserve_policy  no_reserve                                          Reserve Policy                   True+
...
$

Das System verwendet nun den AIX PCM Treiber für Multipathing:

$ manage_disk_drivers -l
Device              Present Driver        Driver Options    
...
IBMSVC              AIX_AAPCM             AIX_AAPCM,AIX_non_MPIO,NO_OVERRIDE
$

Die Migration von SDDPCM zu AIX PCM ist also in der Durchführung ziemlich einfach.

Das Kommando ‚who -r‘ liefert keinen Run-Level zurück

Auf einem unserer Systeme lieferte das Kommando „who -r“ keine Ausgabe und auch keinen Fehler:

$ who -r
$ echo $?
0
$

In Folge dessen kam es zu einem Fehler bei einem Installationsskript, welches den Run-Level nicht ermitteln konnte.

Das Kommando „who -r“ bekommt die Information über den Run-Level aus der binären Log-Datei /etc/utmp. Der Run-Level eines Systems wird im zweiten Record der Datei festgehalten. Die Vermutung war, das die /etc/utmp korrupte Einträge enthält.

Mit dem Kommando /usr/sbin/acct/fwtmp (bos.acct) können binäre utmp-Records nach ASCII konvertiert werden (und umgekehrt). Das Kommando erwartet die zu konvertierenden Einträge über die Standard-Eingabe. In unserem Fall ergab sich folgendes:

$ cat /etc/utmp | /usr/sbin/acct/fwtmp
                        system boot   2     0 0000 0000 1484666008                                  Tue Jan 17 16:13:28 CET 2017
root                                  0 804397248 0000 0000          0 \ufffd{\ufffd\ufffd                             Thu Jan  1 01:00:00 CET 1970
         naudio                       8 3473526 0000 0000 1484666008                                  Tue Jan 17 16:13:28 CET 2017
         naudio2                      8 3539068 0000 0000 1484666008                                  Tue Jan 17 16:13:28 CET 2017
...

Die Ausgabe bestätigt das der zweite Record korrupt ist, er sollte eigentlich den Run-Level enthalten. Ein Vergleich mit den Einträgen eines anderen Systems zeigt wie der korrekte Eintrag aussehen sollte:

                        system boot   2     0 0000 0000 1545044734                                  Mon Dec 17 12:05:34 2018
                        run-level 2   1     0 0062 0123 1545044734                                  Mon Dec 17 12:05:34 2018

Wir haben dann zunächst eine Kopie der korrupten /etc/utmp gemacht und anschließend eine ASCII-Version in einer Datei abgespeichert um dann den korrupten Eintrag mit einem Editor zu korrigieren:

# cp /etc/utmp /etc/utmp.orig
# cat /etc/utmp | /usr/sbin/acct/fwtmp -X -L >/etc/utmp.ascii
#

Die Optionen -X und -L sorgen dafür das User- und Host-Namen nicht verkürzt werden.

Nun wird die zweite Zeile korrigiert, indem wir diese durch den Eintrag oben von einem funktionierenden System ersetzen und dann noch die Zeit-Stempel vom ersten Datensatz übernehmen. Insgesamt ergibt sich dann der folgende Inhalt:

                        system boot   2     0 0000 0000 1484666008                                  Tue Jan 17 16:13:28 CET 2017
                        run-level 2   1     0 0062 0123 1484666008                                  Tue Jan 17 16:13:28 CET 2017
         naudio                       8 3473526 0000 0000 1484666008                                  Tue Jan 17 16:13:28 CET 2017
...

Abschließend konvertieren wir die korrigierte ASCII-Version wieder in das binäre Format und Speichern die korrigierte Version unter /etc/utmp ab:

# cat /etc/utmp.ascii | /usr/sbin/acct/fwtmp -ic > /etc/utmp
#

Das Kommando „who -r“ liefert nun wieder den Run-Level zurück:

$ who -r
   .        run-level 2 Jan 17 16:13       2    0    S
$

Das Problem ist damit behoben.

/usr/sbin/rpm_share[440]: 36044986 Illegal instruction

Obige Fehlermeldung ist bei der Installation eines RPM-Pakets aufgetreten:

# rpm -U db4-4.7.25-2.aix5.1.ppc.rpm 
/usr/sbin/rpm_share[440]: 36044986 Illegal instruction
rpm_share: 0645-007 ATTENTION: get_rpm_inst_root_list() returned an unexpected result.
rpm_share: 0645-007 ATTENTION: update_inst_root() returned an unexpected result.

Das rpm-Kommando funktioniert nicht mehr, ein Rebuild der RPM-Datenbank ist damit auch nicht mehr möglich:

# rpm --rebuilddb
/usr/sbin/rpm_share[470]: 22478966 Illegal instruction

Abhilfe schafft hier das Fileset rpm.rte noch einmal zu installieren:

# installp -acFXYd . rpm.rte
+-----------------------------------------------------------------------------+
                    Pre-installation Verification...
+-----------------------------------------------------------------------------+

...

Installation Summary
--------------------
Name                        Level           Part        Event       Result
-------------------------------------------------------------------------------
rpm.rte                     4.13.0.3        USR         APPLY       SUCCESS    
rpm.rte                     4.13.0.3        ROOT        APPLY       SUCCESS

Im Anschluß funktioniert auch das rpm-Kommando wieder:

# rpm -qa
...
db4-4.7.25-2.ppc
...
AIX-rpm-7.1.5.15-7.ppc

 

 

PVID / erster Block sichern

Manchmal kommt es vor, dass durch div. hdisk Operationen die PVID gelöscht wird und die Platte mit ihren Daten nicht mehr erkennbar ist für AIX. Da ist es gut wenn man eine Sicherung der PVID hat 😉
Das geht so:

dd if=/dev/hdiskXX of=hdiskXX.block1 bs=512 count=1

zurückschreiben:

dd if=hdsikXX.block1 of=/dev/hdiskXXbs=512 count=1