2014. február 9., vasárnap

Gondosan Levezényelhető Vontatott Migráció (GLVM)

Nem tudom ti hogy vagytok vele, de én személy szerint szeretem ha kollégák néha érdekes elméleti kérdésekkel lepnek meg. *

* Bár néha én lepem meg őket olyan furcsa kérdésekkel, mint "Hogy lehet ütemezni egy jobot cronban úgy, hogy az adott hónap 6. hetének szombatján fusson le 02:00-kor szerver idő szerint". Eddig még kevesen jöttek rá a megoldásra :)

Ezen bejegyzést egyik kolléga kérdése ihlette, aki annak szeretett volna utána járni, hogy egy támogatott rendszert hogy lehetne a leghatékonyabban migrálni (mozgatni) 2 GEO lokáció között (legyen az ország, vagy akár kontinens).
A feltételek természetesen a szokásosak (mint minden migrációnál):
- Lehetőség szerint a szolgáltatások elérhetőségét maximalizáljuk (avagy fordítva: a kiesés legyen minimális)
- A migráció emberi időn belül legyen kész (tegnapra, mert a customernek mindig minden tegnapra kell - az is amire ma még nem is gondolt)
- A migráció a meglévő eszközökkel elvégezhető legyen ("Nem veszünk semmit!")
- Elsőre sikerülnie kell mindennek (mert azt nem köszönöd meg amit kapsz ha esetleg mégsem... )

Arra viszonylag gyorsan rájöttünk, hogy lehetőség egy csomó van, de ezeket az igényeket nem elégíti egyik se teljes mértékben:
- Szerviz leállít, majd az adatot hálózaton keresztül áttolni a cél gépre valamilyen mentés formájában (filerendszer, vagy blokk (FS/LV/VG) szinten - utóbbi kötelező ha van RAW kötet is a forrás gépen) -> A szolgáltatásban nagy a kiesés, az adat mozgatása időigényes (mennyi idő áttolni 2 TB-ot 2 kontinens között? :)), illetve hálózati hiba esetén az egészet lehet elölről kezdeni
- Szerviz leállít, majd a gépet fizikailag átköltöztetni a cél helyre és ott beüzemelni -> körülményes és a fene se akar fuvarozni/megreptetni egy szervert, főleg hogy lehet nem is szükségszerűen kivitelezhető (törpék próbálkozhatnak a sokból 1 virtuális gépet kibányászni csákánnyal a gépből, de félek hogy nem fog menni) - bár tény és való, hogy egy csomó merevlemezzel megrakott teherautó/repülőgép sávszélességét nem szabad lebecsülni.
- Csinálni egy konzisztens mentést a meglévő adatokról, azt valahogy eljuttatni a célgépre, majd a különbségeket szinkronizálni hálózaton keresztül egy szerviz leállítás után -> Elméletileg még kivitelezhető is lenne, de sok a buktató (ha file szinten akarja az ember csinálni, akkor minden megváltozott file-t át kell teljesen tölteni ismét (mondjuk rsync-el) - ez esetben a szinkronizálás a megváltozott adatmennyiség és a hálózat sebességének a függvénye ; blokk szintű szinkronizálásnál meg semmit nem nyerünk, tekintve, hogy az összehasonlításhoz a teljes adatmennyiséget ismét át kell küldeni (csak hogy össze tudjuk hasonlítani, hogy hol a különbség) - különben is.. csináljon ilyet az akinek 2 anyja van!)

Anno a beszélgetésünk itt kb abban is maradt (főként mert volt más tenni való), de ez a probléma úgy szöget ütött a fejemben, és mint ahogy az lenni szokott munka után (szabadidőben) jött a felismerés, miszerint az egész problémát teljesen rossz oldalról közelítettük meg: Teljesen felesleges a célgépen lévő adatot egybe kezelni, amikor azt külön lehet bontani rendszerre, illetve minden másra.
Persze a kérdés jogos: És ez miért olyan nagy különbség? A válasz pedig az, hogy míg a rendszer a rootvg-n helyezkedik el, addig a futtatott szerviz azon kívül (általában valami appvg-ben) és hogy-hogy nem az utóbbi foglalja a hely többségét (a rootvg általában megáll 30 GB alatt, feltételezve hogy valaki barom nem telepítette a rootvg-be az middleware-t meg az applikációt is (aki ilyet tesz az ne csodálkozzon, ha egy bizonyos hozzátartozója gyakran csuklik)).
Ha ez még mindig nem elégséges indok, akkor felhívom a figyelmet arra, hogy míg a rootvg bootolható kell legyen, addig az appvg véletlenül se, ami viszont nyomban lehetővé teszi egy viszonylag ritkán használt technika alkalmazását amit úgy hívnak hogy GLVM.

Aki esetleg még nem találkozott ezzel a technológiával annak az alábbi leírások átfutását javaslom: 1 2 3 4

Amit kiemelnék:
- Kliens <-> szerver alapú megvalósítás
- A technológiára a PowerHA_XD meglehetősen komolyan épít, viszont a technológia része az alap AIX-nek is(bár gyárilag nem települ, viszont megtalálható a telepítő lemezen)
- A technológia lehetővé teszi 1 PV (lényegében diszk) megosztását hálózaton keresztül (kb mint egy iSCSI)
- A GLVM a távoli diszk elérését vezérli, ezen felül minden mást az AIX-os LVM managel le, mint egy normál PV esetében (Kiegészítésként azért meg kell jegyezni, hogy a GLVM-nek is van egy pár megkötése az LVM-en belüli VG-k/LV-k beállításait illetően (mint például a superstrict allocation policy))

Na akkor innen indul a buli. A migráció innentől fogva a következő fázisokra osztható fel:
1) A cél szerverhez előre ki kell allokálni a megfelelő mennyiségű (és méretű) PV-ket, amit aztán a forrás gép számára RPV-n keresztül elérhetővé kell tenni
2) A forrás oldalon ezeket a diszkeket fel kell konfigurálni, majd betolni a non-rootvg(k) alá.
3) Amint a szükséges mennyiségű extra tárhely elérhető a VG-ken belül (2x annyi, mint amekkora eredetileg volt) gond nélkül el is kezdhetjük tükrözni a VG(ke)t bármiféle kiess nélkül (az adatmennyiség mértékétől függően ez eltarthat egy darabig)
4) Miután a tükrök felépültek (és szépen szinkronban is vannak) lényegében szabad az út a migrálás elkezdéséhez, csupán a pontos időt kell leegyeztetni a customerrel
5) Amikor is eljön a nagy nap, akkor a forrás oldalon annyi a dolgunk, hogy rootvg-ről készítünk egy mksysb backupot (ezt mondjuk még mindig kénytelenek leszünk áttolni a hálózaton keresztül aznap), majd leállítunk mindent, megtörjük az elkészített tükröt, és lekapcsoljuk a gépet
6) A cél oldalon pedig vissza kell állítsuk az mksysb-nket (preferáltan egy NIM szerver bevonásával), majd a tükör lokális példányából visszaépíteni a non-rootvg adatait
7) Amennyiben szükséges, úgy még 1-2 utó konfigurációs munkát el lehet végezni (igényeknek megfelelően), aztán mindent lehet is szépen visszaindítani

Nézzük meg akkor ezeket a lépéseket közelebbről is:

1) RPV szerver allokáció
A diszk allokálást nem fogom részletezni, a diszkek kiajánlásába viszont érdemes kicsit belemenni. Tekintve, hogy alapértelmezetten a szükséges csomagok nincsenek telepítve, így mindenki kapja elő a 6.1/7.1es alap telepítő DVD/CD-ket és telepítse fel a 'glvm.rpv' bff csomagot (ebben megtalálhatóak a glvm.rpv.server, glvm.rpv.client, glvm.rpv.util LPP csomagok).
Amint ez megvan, meg kell adjuk az RPV szerverünk nevét. Ezt a smitty rpvservername_edit_dialog (fastpath), avagy a smitty rpvserver / Remote Physical Volume Server Site Name Configuration / Define/Change/Show Remote Physical Volume Server Site Name menüpontja alatt tehetjük meg Ha ez megvan, akkor el is kezdhetjük kiallokálni a diszkjeinket a smitty rpvserveradd_select (fastpath), avagy a smitty rpvserver / Add Remote Physical Volume Servers menüpont alatt
Physical Volume Identifiers 000dd32daa568b07 * Remote Physical Volume Client Internet Address [1.2.3.4] Configure Automatically at System Restart? [yes] Start New Devices Immediately? [yes]
# A 'Remote Physical Volume Client Internet Address'-nél a távoli gép IP-je kell, viszont azért én azt is hozzátenném, hogy az IP DNS neve legyen feloldható is (vagy DNS szerver, vagy /etc/hosts alapján)

Parancssori alternatíva (ha tudunk minden adatot (rpvs_pvid, client_addr)):
/usr/sbin/mkdev -c rpvserver -s rpvserver -t rpvstype -a rpvs_pvid=000dd32daa568b07 -a client_addr=1.2.3.4 -a auto_online=y

Ezt mint mondtam el kell játsszuk az összes migrálásra szánt PV-re, viszont itt azért felhívnám a figyelmet arra, hogy hiába rendelünk 1-1 rpvserver-t minden egyes diszkhez, az AIX attól még nem foglalja le az original diszket, így simán előfordulhat, hogy véletlenül (oda nem figyelés), vagy csak más kollégák "segítsége" miatt a diszket más kezdi el időközben használni, így én azt is javasolnám, hogy valahogy ezeket a diszkeket jelöljük meg (vagy rendev-vel nevezzük át őket, vagy simán csak hozzunk létre rajtuk egy VG-t (pl. migrationvg1 - ezzel is feltüntetve, hogy a diszkek a migrációhoz lesznek felhasználva)

2) RPV kliens konfiguráció és VG extension
Felkonfigurálni a kiosztott diszkeket se lesz nehezebb, mint kiosztani őket, bár a 6192es portot lehet át kell engedni a szerver és a kliens között a tűzfalon. Ha a glvm.rpv.client csomagot még nem telepítettük, akkor itt az ideje, ellenkező esetben smitty rpvclientadd_select_ip (fastpath) avagy a smitty rpvclient / Add Remote Physical Volume Clients menü alatt fel is vehetjük az első pontban kiosztott diszkeket.
Remote Physical Volume Server Internet Address 2.3.4.5 Remote Physical Volume Local Internet Address 1.2.3.4 Physical Volume Identifiers 000dd32daa568b07 I/O Timeout Interval (Seconds) [180] Start New Devices Immediately? [yes]
Parancssori alternatíva (ha tudunk minden adatot (pvid, server_addr, local_addr)):
/usr/sbin/mkdev -c disk -s remote_disk -t rpvclient -a pvid=000dd32daa568b070000000000000000 -a server_addr=2.3.4.5 -a local_addr=1.2.3.4 -a io_timeout=180

Ahogy az rpvserver-eket is külön-külön kellett kiosztani, így az rpvclient-eket is egyesével kell felkonfiguráljuk.
Ha sikerült mindegyiket szépen berángatni, akkor még vissza van az, hogy az új diszkeket betoljuk a VG alá.
Alapjáraton ugye erre egy sima 'extendvg $VG $HDISK' elég lenne, viszont mivel hogy itt egy teljes tükröt akarunk csinálni, így mielőtt még ebbe bárki belefogna melegen ajánlanám, hogy nézze meg, hogy minden diszk bele fog e férni a VG alá (Ha a MAX PVs /2 kissebb, mint a "TOTAL PVs" akkor garantáltan nem fog beleférni ; Ez mellett még figyeljük arra is, hogy a MAX PPs per PV * PP SIZE se érje el a diszkünk aktuális méretét (különben nem fog bele férni a VG-be)). Amennyiben itt problémába ütközünk, úgy simán előfordulhat, hogy a VG-nél factor-t kell állítani, vagy a VG-t át kell konvertálni (BigVG-be avagy ScalableVG-be attól függően hogy épp milyen VG-nk van, viszont azt tessék észben tartani, hogy Normal - BigVG konverziót lehet online csinálni (már ha nem Concurrent VG-nk van), míg Scalable-be csak offline (varyoffvg után) tudnánk, így itt még némi extra outage befigyelhet).
Amennyiben ilyen problémába nem ütközünk bele, úgy simán mehet az extendvg.

# Megjegyzés: Ha előzőleg a diszkekre létrehoztunk egy külön VG-t (hogy megjelöljük a diszkeket), úgy az extendvg-nél szükség lesz a -f kapcsolóra, de ez esetben figyelmesen járjunk el és bizonyosodjunk meg róla, hogy tényleg jó diszket piszkálunk, mielőtt egy rossz diszk VGDA-ját vágnánk felül.

3) VG tükör létrehozás
Itt jön most az, hogy tükrözni kéne, ugye :) Ha ezt eszetlenül meg is kíséreljük ebben a fázisban, akkor a legtöbb esetben szembe is jön ez a hiba:
# mirrorvg appvg 0516-404 allocp: This system cannot fulfill the allocation request. There are not enough free partitions or not enough physical volumes to keep strictness and satisfy allocation requests. The command should be retried with different allocation characteristics. 0516-1517 mklvcopy: Failed to create a valid partition allocation. 0516-842 mklvcopy: Unable to make logical partition copies for logical volume. 0516-1199 mirrorvg: Failed to create logical partition copies for logical volume applv. 0516-1200 mirrorvg: Failed to mirror the volume group.
Noh kérem, ez azért van mert mint fentebb említettem a GLVM azért megkövetel 1-2 LV beállítást, mielőtt az RPV-t ténylegesen a VG részeként kezelné. A szükséges beállítások a következők:
- A szerver IP címe itt se árt ha feloldható (reverse DNS lookup), így -ahogy azt már fentebb is kiemeltem- érdemes az IP-t a /etc/hosts alá felvenni.
- A VG alatt lévő összes LV allocation policy-je Superstrict kell legyen. Ezt a 'chlv -s s -u 32 $LV' paranccsal tudjuk online állítani
# Megjegyzés: a -u 32 az upperbound limitet jelöli, ami több PV-n szétterülő LV-k esetén lehet nagyobb is mint 32; viszont nincs értelme magasabbra állítani, mint a VG-ben lévő PVk száma.
- Az VG alatt lévő összes LV inter-policy-je legyen minimumon. Ezt a 'chlv -e m $LV' paranccsal online tudjuk állítani

Ha ezek megvannak, akkor kezdhetjük is a tükrözést, bár itt felhívnám a figyelmet arra, hogy mivel meglehetősen sok adatot készülünk áttolni a hálózaton, így érdemes elgondolkodni azon, hogy pontosan hogy is akarjuk a mirrort összehozni:
- Minden LV-t külön-külön (esetleg csoportokban) tükrözünk meg az 'mklvcopy -s s $LV 2 $HDISK' paranccsal (ez esetben a hálózati terhelést megpróbálhatjuk korlátozni a szerviz időn kívülre némileg, bár ha egy LV mirror-t elindítottunk, akkor azt onnan ne akarja senki se leállítani :) Továbbá érdemes szem előtt tartani, hogy az mklvcopy az előtérben fut, így a console-unk egy ideig valószínű használhatatlan lesz (már amíg a türközés be nem fejeződik)
- A teljes VG-t egyben a mirrorvg paranccsal (ez esetben javasolnám a -S kapcsoló használatát azon oknál fogva, mert így a mirror a háttérben fog folyni, és nem fogja megakasztani az lsvg, lslv parancsokat (mivel nem lesz konstans lock a VGDA-n). Ez a módszer akkor jó, ha az rpvserver, rpvclientek által használt hálózat szeparált a customer networktől, így a hálózati kommunikáció nagyon nem fog bezavarni az ügyfél ügyes-bajos dolgaiba.

Bármelyik módszer mellett is döntünk, arra azért legyünk felkészülve, hogy egy jó ideig el fog tartani a folyamat. Kb az alábbi dolgok befolyásolják a szükséges időt:
- Hálózati sávszélesség (ha van valami izmosabb gigabites kapcsolat, vagy esetleg valami link-aggregation akkor a jumbo-frame-ekkel itt garantáltan jól járunk). Ha viszont Virtualizált a network, akkor készüljünk fel, hogy a PVID-ra ráakaszkodott más LPAR-ok is beleszólhatnak a játékba (illetve vice-versa: a mi kliens LPAR-unk is beleszólhat az ő játékaikba :))
- Kliens oldali I/O terheltség (attól függően hogy az alkalmazások mennyire pörgetik a diszkeket)
- Kliens/szerver oldali I/O adatátviteli sebesség

Érdemes a tényleges mirror előtt egy tesztet csinálni, ha ki is akarjuk deríteni hogy pontosan milyen sebességet is tudunk elérni a 2 gép között, hogy legalább hozzávetőlegesen meg tudjuk becsülni a szükséges időt a tükör felépítéséhez.

4) Checkpoint, VG tükör fenntartása
A tükör felépültét, illetve épségét az 'lsvg -l $VG ' paranccsal tudjuk a legkönnyebben monitorozni -> ha az összes LV open/syncd-be van (és az PPs száma dupla az LPs-nek) akkor örülhetünk, mert az adat mozgatás nagyja már meg is volt, ráadásul úgy hogy eddig (elméletben) 1 perc kiesés nem volt. Itt az ideje lebeszélni a customerrel, hogy pontosan mikor is lehet a szervert költöztetni.
Amennyiben a megállapodott időpont a nem túl közeli jövőben lenne, úgy figyeljünk arra, hogy a tükör ép is maradjon (ne nagyon indítgassunk újra dolgokat, illetve imádkozzunk, hogy ne nagyon legyen hálózati probléma). Amennyiben a kapcsolat ideiglenesen bármilyen oknál fogva time out-ra futna, akkor a hálózati hiba elhárítása után az rpvclient-eket manuálisan kell ismét felhúzzuk, majd a tükröt helyre állítsuk (immár kevesebb időbe fog telni, mint egy full remirror, de azért ez is eltarthat egy darabig).
Azt viszont tessék észben tartani, hogy ettől a ponttól kezdve minden diszkre történő írás mind a 2 oldalon kell érvényesüljön, így a hálózat képes lehet az I/O loadot némileg visszafogni (szóval nagyon I/O write intenzív alkalmazás lehet hogy nem fogja magát túl jól érezni egy ilyen környezetben)

5) Létrehozott tükör felhasználása/megtörése
Ha eljött az idő a migrálásra, akkor először is győződjünk meg róla, hogy a tükör/tükrök még mindig jó állapotban vannak, ez után készítsünk a rootvg-ről egy mksysb-t (ha 6.1 TL9, vagy 7.1 TL3 SP1-en avagy afölött vagyunk, akkor a -T kapcsolóval egy meglehetősen probléma mentes backup készíthető, hála a snapshotingnak :)), amit aztán másoljunk át a hálózaton keresztül a távoli NIM szerverre.
Ha ez megvan, akkor választás előtt állunk: Mit is akarunk kezdeni a felépített tükrünkkel? 2 féle lehetőség adódik ugyan is:
- Megtörhetjük a tükröt a splitvg paranccsal
- Felhasználhatjuk a tükör felét a recreatevg paranccsal

A 2 módszer célja kb azonos, viszont a kivitelezés merőben eltér egymástól, így érdemes belemenni, hogy melyiknél mire is kell számoljunk:

a) A splitvg esetén (ajánlom a -i kapcsolót) az RPV diszkekre készített mirror copy-t le tudjuk választani az eredeti VG-ről, ezzel egy új (és szép konstans) VG-t hozva létre. Az új VG nevét mi állítjuk be, viszont az esetleges LV név és FS mount ütközést elkerülendő az AIX automatikusan hozzá fog csapni minden LV-hez egy fs prefixet (tehát lv01-ből lesz egy fslv01), illetve az eredeti mount point helyett a /fs/$ORIGINAL_MOUNT lesz az alapértelmezett mount (/app/log helyett /fs/app/log). Ez kapásból azt is jelenti, hogy:
- Ezeket a változásokat a cél helyen majd vissza kell kézzel csináljuk
- Az LV név változtatás bizonyos helyzetekben lehet macerás lesz, főleg ha van olyan LV a VG alatt ami alapjáraton 15 karakter hosszú (default maximum) ami a splitvg eredménytelen lefutását eredményezi (tekintve, hogy a splitvg nem lesz képes a prefixel megtoldani az LV nevet). Ezeket az LV-ket még a splitvg előtt át kell így nevezni, ám ha az érintett LV pont egy RAW kötet/container, akkor ott komoly problémáink lehetnek (tekintve, hogy az adatbázisok hajlamosak a /dev/$LV_NAME-re ráakaszkodni, ergo amíg az adatbázis az LV-t használja, addig nem is lehet azt átnevezni)

b) A recreatevg esetén a tükröt nem a forrás oldalon törjük meg, hanem a cél szerver oldalon -> a recreatevg képes a tükör feléből visszaépíteni a VG-t (immáron mirroring nélkül), ami annyiból jó, hogy (ha jól van felparaméterezve) nem kell szöszölni az LV nevek és FS mount pointok utólagos állítgatásával a cél oldalon, viszont cserébe ha valamilyen oknál fogva vissza szeretnénk állni az eredeti szerverre, akkor abban a problémában fogjuk magunkat találni, hogy mivel a recreatevg belenyúlt a VGDA-ba (és új vg_id-t generált), így a source oldalon felépített tükrünk nem hogy törött lesz, hanem egyenesen használhatatlan (amit egy újabb recreatevg-vel tudunk csak helyrepofozni, immár ismét tükör nélkül, ergo az egész játékot lehet kezdeni elölről).
Továbbá érdemes megjegyezni, hogy ha ezt a módszert szeretnénk használni, akkor érdemes a Quorum-ot is kikapcsolni a 'chvg -Qn $VG' parancsal :)

Én személy szerint eléggé megbarátkoztam már a recreatevg-vel ahhoz, hogy különösebb szív problémák nélkül merjem használni, de az aki inkább a biztosabb konzisztencia irányába szeretne elmenni, az inkább ne ezt a módszert használja.

Miután sikerült eldöntenünk, hogy melyik módszer mellett tesszük le a voksunkat (én maradok a recreatevg-nél :)) szépen mountoljuk le a filerendszereinket, tegyük a VG-t varyoffba, és biztos ami biztos még engedjünk el egy 'sync;sync;sync'-et hogy minden konzisztens is legyen. Ezután a forrás gépet lényegében le lehet állítani.

6) Migráció véglegesítése a cél gépen.
Miután a NIM szerverről visszatöltöttük az előzőleg elkészült mksysb-t, már csak annyi a dolgunk, hogy visszarángassuk az appvg-(in)ket az ODM-be. Ehhez első körben el kell távolítsuk az rpvserver device-okat, majd attól függően hogy az 5. pontban melyik módszer mellett döntöttünk használhatjuk ..
.. az importvg-t: ez esetben elég ha az importvg-nek egy diszket megadunk (importvg -y $VGNAME $HDISK) , a parancs automatikusan kiolvassa a VG-t alkotó diszkek PVID-ját, és végigellenőrzi, hogy mind megtalálható e a rendszer alatt, majd beimportálja a VG-t a rendszer alá. Ne felejtsük el visszaállítani az eredeti mount pointokat, illetve LV neveket (plusz az FS-ek loglv nevét) ez után
.. a recreatevg-t: ez esetben nekünk kell kézzel megadni, hogy a VG mely diszkekből épül fel pontosan (recreatevg -y $VGNAME -Y NA -L / -f $HDISK1 $HDISK2 $HDISKN). A sikeres futtatás után a rendszer egy új VG-t épít fel a VGDA-ban elérhető adatok alapján, amit aztán további módosítások után szabadon is használhatunk

***********************
Ezzel a módszerrel (optimális esetben) pár óra kieséssel megoldható egy szerver költöztetés, úgy hogy az előkészületeket már jóval a költöztetés kezdete előtt megkezdi az ember. A módszernek persze ára van, cserébe a customer dédelgetett szolgáltatása (némi kis performance veszteség árán) képes folyamatosan üzemelni és ellátni a "kritikus" (!!!) feladatait.

2014. január 29., szerda

Solaris - Emulex HBA WWPN check

Régen blogoltam ide, de úgy gondoltam hogy ez még jól jöhet az utókornak, szóval ...

.. Adott egy ősrégi Solaris szerver (az a fajta ami a múzeumba se való már, olyan régi), aminél azt a feladatot kaptam, hogy a Storage szerverek zónázásakor használt WWPN numbert kinézzem. Tekintve hogy ez számomra alap feladatnak hangzott (AIX adminként), így gondoltam gyorsan végzek is a feladattal.. Hát a francokat..

Na nézzük miért is.
1) Mint mondtam a gép meglehetősen régi:
root@server[] # uname -a SunOS server 5.6 Generic_105181-39 sun4u sparc SUNW,Ultra-Enterprise
/* Csak a miheztartás végett - az 5.6ot (aka Solaris 2.6) 1997ben adták ki (bár 2006ig támogatott maradt) */

2) A google jelen esetben nem a barátod
Hiába akad google-n 1-2 használhatónak tűnő tipp*, attól még sajna ez kevés a boldogsághoz ha a tippek közül egyik se működik, mert vagy nem elérhető a parancs amire hivatkozik, vagy nem kapok kimenetet, vagy amit kapok az láthatóan hülyeség.
-> scli, fcinfo, prtpicl, lputil64 nem létezik
-> 'prtconf -vp | grep -i wwn' hülyeséget dob vissza
-> /var/adm/messages* alatt egy bejegyzes sincs amiben a wwn vagy wwpn benne lenne
-> 'luxadm -e port' szerint az összes adapter not-connected state-ben van ami abszolút hülyeség, viszont ez miatt a 'luxadm -e dump_map' se működik.
-> 'iostat -XMzxn' közli, hogy a -X, -z kapcsoló nem értelmezhető

* A leghasználhatóbb talán ez: http://www.sunsolarisadmin.com/hardware/how-to-find-the-wwn-world-wide-name-in-sun-solaris/

3) Nem mindegy hogy milyen adapter van a gépben és hogy milyen driver hajtja
Az egy dolog, hogy csak 1-2 hivatalosan támogatott kártya elérhető, de mocskos módon még az se mindegy, hogy azt a kártyát milyen Storage megvalósításhoz szeretnéd használni, mert mindegyik megvalósításnak más-más driver kell, azok meg hajlamosak meglehetősen válogatósak lenni a támogatott kártyák között. Ehhez jön még hozzá, hogy nincs egységes tool a HBA-k kezelésére, hanem minden driverhez külön-külön utility set van ami így vagy úgy valósítja meg kb ugyan azokat a feladatokat (lscfg, de hiányoltalak én téged..)

4) Az se mindegy, hogy melyik verziójú drivered van fent
Mint utólag kiderült a 2. pontban leírt problémámba ay is erősen közrejátszott, hogz az idők során kiadott különböző driverek/toolok telepítési útvonala hajlamos volt időről időre változni, így ha nincs bent a $PATH-ban az adott tool akkor vagy tudod mi és hol van, vagy keresgélhetsz amíg meg nem találod (már ha tudod mit is kéne pontosan keresni)

Na szóval.. Ha tudni akarod, hogy hogy is kell megtekinteni egy HBA WWPN-jét, akkor:
- Tudnod kell, hogy pontosan milyen kártyáról van szó
- Tudnod kell, hogy az adott kártyát milyen driver hajtja
- Tudnod kell, hogy az adott driver tooljai hol találhatóak
- Tudnod kell, hogz a toolok közül melyik is alkalmazható a te általad megálmodott feladatra, és azt is hogyan.

Hát gyerekek. Aki a Linux alatt sír hogy mennyire össze van gányolva, és hogy mennyire de nem egységes, azt isten bizony odaültetném egy ilyen elé.

Na de vissza térve az én esetemre.
- Milyen HBA van a gépben?
root@server[] # prtdiag -v |grep SBus |grep sd 1 SBus 25 0 lpfs/sd (block) LP9002S 1 SBus 25 3 SUNW,fas/sd (block) 3 SBus 25 1 QLGC,isp/sd (block) QLGC,ISP1000U 3 SBus 25 2 lpfs/sd (block) LP9002S 3 SBus 25 3 SUNW,fas/sd (block) 5 SBus 25 1 QLGC,isp/sd (block) QLGC,ISP1000U 5 SBus 25 2 QLGC,isp/sd (block) QLGC,ISP1000U 5 SBus 25 3 SUNW,fas/sd (block)
- Lehet is nyomban válogatni, tekintve, hogy 2 is van. Az 1ik ránézésre valami QLogic cucc (sd driver-rel), a másik meg csak annyit mond magáról, hogy LP9002S. Kis google után utóbbiról kiderül, hogy 2Gbps Emulex Fibre channel adapter, míg az első egy sima SCSI vezérlő (így azzal most nem foglalkozok). Annyi segítséget a gép adott, hogy az Emulex kártyát az lpfs driver hajtja, így már csak azt kell kitalálni, a driverhez tartozó segédprogramok hol is találhatóak
- Első körben tudni kell a csomag nevét:
root@server[] # pkginfo |grep lpfs system lpfs Emulex LightPulse FC SCSI/IP Host Bus Adapter driver
- Ebből kiindulva aztán érdemes megnézni, hogy mi is van a csomagban:
root@server[] # pkgchk -l lpfs|grep Pathname |egrep "bin|sbin" Pathname: /usr/sbin Pathname: /usr/sbin/lpfs Pathname: /usr/sbin/lpfs/QS_fmw Pathname: /usr/sbin/lpfs/REV_fmw Pathname: /usr/sbin/lpfs/dfc Pathname: /usr/sbin/lpfs/dfc32 Pathname: /usr/sbin/lpfs/dfc64 Pathname: /usr/sbin/lpfs/download_fmw_lpfs Pathname: /usr/sbin/lpfs/lpsutil Pathname: /usr/sbin/lpfs/lpsutil32 Pathname: /usr/sbin/lpfs/lpsutil64 Pathname: /usr/sbin/lpfs/resetqdepth
- Oksi. Akkor a /usr/sbin/lpfs mappában kéne körbenézni. Kérdés, hogy mi is használható ezek közül.

Az mondjuk kb tiszta, hogy a QS_fmw és a REV_fmw valami firmware féleség lehet, így azokhoz inkább nem nyúlok. A download_fmw_lpfs hasonló okok miatt esik ki (lekérdezni akarok, nem módosítani). A dfc-ből, illetve az lpsutil-ból a jelek szerint 3-3 file is elérhető: 1 központi, illetve 1-1 32/64 bit specifikus (Ránézésre a fő bináris feladata, hogy megítélje, hogy a rendszer 32 vagy 64 bites rendszeren fut e, és az alapján meghívja a szükséges binárist). Ezen felül van még a resetqdepth, ami a nevéből illetően piszkálni akar valamit, viszont mint kiderül lényegében csak egy script:
root@server[] # cat /usr/sbin/lpfs/resetqdepth #!/bin/sh # $Id: resetqdepth.sh 1.6 2001/03/07 00:12:00 mks Exp $ case $1 in [0123456789]*) ;; *) echo Usage: resetqdepth adapter_number exit 1 ;; esac /usr/sbin/lpfs/dfc > /dev/null <<! set board $1 rqdepth exit ! exit 0
Természetesen ezt lefuttatni nem akarom, viszont a tény hogy a fentebb említett dfc parancsra támaszkodik egy EOF here tag-el ad némi reményt arra hogy esetleg valami belső parancs készletre támaszkodó programmal van dolgunk.

Így hát elindítva a dfc programot az alábbi kimenetben gyönyörködhetünk:
root@server[] # /usr/sbin/lpfs/dfc LightPulse Engineering Debug Utility Copyright (c) 1999, 2000 Emulex Network Systems, Inc. Do not run this utility unless instructed by Emulex Technical Support Found 0 PCI 2 SBUS adapters: onmask 3f58f offmask 1e7 Driver:4.21x1 Adapter 0: lpfs1 SBUS id df1095f0 Firmware:3.90A7 (R2F3.90A7) Adapter 1: lpfs0 SBUS id df1095f0 Firmware:3.90A7 (R2F3.90A7) cmd>

Szupi.. Szóval kapunk egy belső command line-t.. Nézzük mit lehet benne mókólni (és lehetőleg nem elszúrni :))
cmd> help rdallpci wrpci wrhc wrhs wrha wrca rdpci rdhc rdhs rdha rdca rdmb exit set rring rslim riocb rrpi rbp rmemseg mbox reset rbinfo nddstat fcstat wslim wffreg rffreg sdiag dbg rnode rdevp instance lip linkinfo ioinfo nodeinfo getcfg setcfg failio outfcpio rqdepth ct hbaattr portattr portstat dportattr wportattr iportattr fcpmap fcpbind setmgmt getmgmt rnid getevent resetstat sendscsi refresh els getmpulse setmpulse listn trace help p
Sajna a fejlesztők arra már nem szánták rá magukat, hogy a help parancsot kibővítsék az alparancsok leírásával is, így némi kis próbálkozás után sikerül eljutnom csak az alábbi kimenethez:
cmd> linkinfo Event 0x0 Up 0x1 Down 0x0 Multi 0x0 PortID 0x0 alpa 0x0 topology 0x4 state 0x1 ALPAmap 0: Portname 10:00:00:00:ab:cd:ef:01 Nodename 20:00:00:00:ab:cd:ef:01
Na ez már végre az amit akartam.. Az egyedüli bajom csak az, hogy a parancs ismételt kiadásával ugyan ezt az eredményt kapom vissza, viszont ebben a gépben (ahogy fentebb is látható volt) 2 HBA kártya van.. Valahogy rá kéne venni a programot, hogy a másik kártya adatait is le lehessen kérdezni.

Ekkor ugrott be a fenti script, ami képes volt tetszőleges adapterre lefuttatni az rqdepth parancsot. Mindezt a set board $1 parancsal, úgy hogy nyomban mentem is vissza az újonnan megismert subshellem alá további tesztelésre:
root@server[lpfs] # ./dfc LightPulse Engineering Debug Utility Copyright (c) 1999, 2000 Emulex Network Systems, Inc. Do not run this utility unless instructed by Emulex Technical Support Found 0 PCI 2 SBUS adapters: onmask 3f58f offmask 1e7 Driver:4.21x1 Adapter 0: lpfs1 SBUS id df1095f0 Firmware:3.90A7 (R2F3.90A7) Adapter 1: lpfs0 SBUS id df1095f0 Firmware:3.90A7 (R2F3.90A7) cmd> set board 0 cmd> linkinfo Event 0x1 Up 0x1 Down 0x0 Multi 0x0 PortID 0x633613 alpa 0x13 topology 0x3 state 0x6 ALPAmap 0: Portname 10:00:00:00:ab:fd:08:04 Nodename 20:00:00:00:ab:fd:08:04 cmd> set board 1 cmd> linkinfo Event 0x0 Up 0x1 Down 0x0 Multi 0x0 PortID 0x0 alpa 0x0 topology 0x4 state 0x1 ALPAmap 0: Portname 10:00:00:00:ab:cd:ef:01 Nodename 20:00:00:00:ab:cd:ef:01 cmd> exit
Buli.. Igy mar szepen megy is minden, mint a karika csapás. Akkor már csak az maradt, hogy le is scriptljük a dolgot:
root@server[] # cat /tmp/emulex_wwpn_query.sh #!/usr/bin/ksh PACKAGE_NAME=`pkginfo |grep SCSI |egrep "lpfc|lpfs" |cut -d ' ' -f2` DFC_PATH=`pkgchk -l $PACKAGE_NAME |grep Pathname |grep dfc$ |cut -d ' ' -f2` while true do $DFC_PATH 2>&1 << ! exit ! break done |grep Adapter |cut -d ' ' -f 2 |sed "s/://g" |while read ID do $DFC_PATH 2>&1 << ! set board $ID linkinfo exit ! done |grep Portname |cut -d ' ' -f 2 |sed "s/://g" |tr 'a-z' 'A-Z' root@server[] # sh /tmp/emulex_wwpn_query.sh 10000000ABCDEF01 10000000ABFD0804
Trolloknak előre megjegyzem: ezen az ősrégi vackon a pipe feldolgozási sorrendje nem tudom miért de valahogy eltér a megszokottól; a $() nem működik, helyette van backtick (`), az viszont valamiért nem szeret több parancsot 1 soron belül látni; Talán pont a pipe-olás miatt az awk se működik úgy ahogy azt elvárnám, így fallbackeltem az ódivatú parancsokra, mint cut, grep, sed, tr (amit amúgy egy awk simán ki tudna váltani, viszont ha nincs ló, jó lesz a szamár is.. ). Amúgy ha valakinek van ötlete, hogy while; do ... done módszeren kívül hogy lehet még greppelni egy here tag (jelen esetben !) után az ne fogja vissza magát :)

2013. augusztus 21., szerda

HMC upgrade - Generációs problémák

Előző blogbejegyzésemben megemlítettem, hogy "szerintem" a HMC upgrade-ről nem lehet tartalmasan írni, mire egyik ismerősöm rámutatott arra, hogy hiába nem olyan hajmeresztő a téma, attól még neten nem hogy magyarul, de angolul sincs normális dokumentáció ilyen jellegű HMC upgrade-ről távoli upgrade-et tekintve. Így hát vettem a bátorságot és azt gondoltam, hogy ha másért nem, hát azért is leírom, hogy mivel is jár egy ilyen szintű upgrade előkészítése, kivitelezése, illetve mily buktatók vannak amire nem árt figyelni. Hosszú post következik, mindenki készítsen elő 1 hétre való hideg élelmiszert, meg konzervet :)))

Na szóval.. A feladat a következő: Adott egy csomó, pár generációval régebbi HMC, amik mind-mind valami über-fontos rendszert támogatnak (hogy ez mennyire fedi a valóságot az más kérdés - a customernek mindig minden über fontos). További információ, hogy a HW típusok, illetve a telepített HMC verziók is meglehetősen eltérőek, illetve minimalizálni kéne az onsite support nyújtotta lehetőségeket (a lehetőség adott, csak épp fizetni kell érte, amit meg valahogy az ügyfelek sose akarnak, mondván hogy "Hát azért fizetünk téged, hogy megcsináld.." )

Ezzel a felemelő tudattal lássuk hát mis is lehet tenni és hogyan.
1x is, nézzük, hogy a neten milyen információk érhetőek el jelenleg, avagy miből élünk:
Upgrading the HMC from Version 4.3, 4.4, or 4.5 to Version 6.1.3
Upgrading the HMC from Version 6.1.2 (or Later) to Version 7.3.2

Ezek a leírások szépen le is írják, hogy hogyan kéne a HMC-ket upgrade-elni, de hogy-hogy nem csak a local DVD-RAM-ra támaszkodnak, ami meg nekünk most nem sokat segít (hacsak nem tudunk valakit rábírni, hogy fizesse az utazási költséget, meg biztosítsa a fizikai hozzáférést az érintett HMC-khez). Egy dologra viszont azért még is használhatóak: Kb kideríthető, hogy az upgrade útvonal valami ilyesmi kéne legyen:
4.x-> 6.1.3 (plusz a szükséges fixek) -> 7.3.2 -> 7.7.x (jelenlegi latest)

Na persze ez önmagában még nem elég: Van egy olyan sajnálatos része is a dolognak, hogy a HMC által managelt box(ok) alatt futó firmware-nek is kompatibilisnek kell lennie a HMC-vel, különben az képtelen lesz kommunikálni az FSP-vel, minek következtében a HMC nem fogja tudni managelni a boxot (ergo pont azt a funkcionalitást veszítjük el, amiért a HMC-t tartjuk). Így sajna figyelembe kell vegyük azt is, hogy HMC upgrade előtt a boxok FW-je is megfelelő szinten legyen.

Ebben segítenek az alábbi doksik:
- Supported combinations for HMC and Power 5 Server code: http://www14.software.ibm.com/webapp/set2/sas/f/power5cm3/sftablep5.html
- Minimum FW levels: http://www-912.ibm.com/s_dir/slkbase.NSF/1444e529a72ba96486256a6400681992/c69799b70a28578c8625712c004fe06b?OpenDocument
- HMC 7.3.x es afölött: http://www-933.ibm.com/support/fixcentral/firmware/supportedCombinations
- Power5,P590, p505: http://www14.software.ibm.com/webapp/set2/sas/f/power5cm3/supportedtable2.html
- Power5, exlcuding p590, p595: http://www14.software.ibm.com/webapp/set2/sas/f/power5cm3/supportedtable1.html

További hasznos infó az, hogy jelenleg mely HMC verziók támogatottak is:
https://www-304.ibm.com/webapp/set2/sas/f/power5cm/eoss.html

.. illetve hogy mely HMC-k pontosan meddig is húzhatók fel:
AIX, VIOS and HMC Facts and Features (17. oldal)

Na most mindez után egy pillanatra álljunk meg.. Ugye azt mondtam, hogy azért itt akad 1-2 elég régi generációs masina is, ami azért magával von 1-2 meglehetősen fontos dolgot:
- Ha a HMC nem 1 mai darab, akkor valószínű, hogy a managelt box se.
- Ha a managelt box nem 1 mai darab, és még mindig alacsony HMC mellett üzemel, akkor a firmware se lehet épp a legfrissebb
- Ha upgrade-elni kell egy régebbi HMC-t, hogy supported szinten legyen, akkor az az alábbi dolgokat jelentheti:
- Vagy egy Power4es vasunk van aminél a legmagasabb elérhető szint a 3.3.7 (még ez év végéig támogatott)
- Vagy Power5ös, ami azt jelenti, hogy a HMC-nk 4.5.x-től bármelyik azóta kiadott HMC szóba jöhet
# Kis megjegyzés - Power6-Power7 nagyon nem jöhet szóba, tekintve, hogy azok annyira nem régiek, meg azokhoz min HMC v7.3.x dukál ..
- Ahhoz hogy egy p5-ös gépet (jelenleg; 2012.08.21) támogatott szintre felhúzzunk az alábbi HMC-k valamelyikével kell rendelkezzünk:
    - 7310-C05,7310-CR3 -> 7.7.x
    - 7310-C04,7310-C03, 7310-C02 -> 7.3.x
- Power5 alatt jelenleg egyik supported HMC se támogatja a régi FW-ket (Release 240 elöttiek), ergó az FW upgrade-et tuti nem ússzuk meg (Distruptive upgrade ==> Teljes box leállást igényel, így minden LPAR-t le kell kapcsolni mielőtt ennek nekiállunk)

Ha Power4ünk van, akkor könnyű dolgunk lesz (feltéve, hogy min 3.3-as szinten van a HMC). Ha viszont Power5-ről beszélünk (és a fent említett 5 modell valamelyikével áldott meg minket a sors), akkor már macerásabb helyzetben találhatjuk magunkat, tekintve, hogy abban az esetben a 4.5.x HMC se elképzelhetetlen.

Na jó.. Akkor ez után nézzük mit is lehet távolról egy nyomorult internet hozzáféréssel csinálni.
Alap járaton ugye adott a fix/service pack telepítésének lehetősége, ami viszont nem jelent verzió ugrást (mondjuk egy 3.3.x-> 3.3.7 telepítéséhez ez még bőven elég). Ahhoz, hogy verziók között tudjunk ugorni (6.x->7.x) szükségünk van az úgy nevezett "alternate disk installation" nevű módszerre (vagy akik AIX-földről jöttek annak az alt_disk_boot lehet ismerősebb). A probléma ezzel csupán annyi, hogy ez a parancs csak az 5.2.1-es verzió óta érhető el, következés képen ha version 5.x, vagy afölött vagyunk akkor még van remény (verzión belül tudunk ugrálni mint mondtam, ergo 5.x-ről fel tudjuk húzni remote 5.2.1ig a HMC-t), ha viszont egy v4.x HMC-vel hozott össze a sors, akkor kötelezően szükségünk lesz valakire aki helyben felhúzza a HMC-t egy számunkra kellemes szintre (Ennyit a customer elvárásairól ez esetben :D Mázlira 4.x-ről direkt lehet ugrani 6.1.2-re local DVD-RAM-al, tovább viszont a firmware függőségek viszont nem.)

További "kellemes" problémaforrás, hogy amennyiben a 7310-C03 HMC-vel hozott össze a sors minket, úgy nem csak a box(ok) FW upgrade-je miatt kell fájjon a fejünk, hanem a HMC BIOS upgrade-je (!) miatt is, mielőtt fel akarnánk az vinni v6.1.x vagy afölé (amihez szintén helyi technikus kell :))
https://www-304.ibm.com/support/customercare/sas/f/hmcl/bios/home.html
# Kis segítség: az 'lshmc -b' paranccsal meg lehet nézni milyen verziójú BIOS fut a HMC-nk alatt

Na akkor összegezzük hogy mit is kéne csinálni:
- Ha a sors egy 7310-C03 HMC-vel hozott össze, akkor onsite technikus segítségével a BIOS-t fel kell upgrade-elni, mielőtt bármit is csinálnánk
- Ha egy v4.x HMC-vel hozott össze a sors, akkor szintén onsite technikus segítségét kell kérjük, hogy a HMC-t 6.1.2 felhúzza
- Ha a HMC-nk meg a 3.3.x idők elötti verzión fut, akkor local technikus fog ismételten csak kelleni:
http://www-304.ibm.com/webapp/set2/sas/f/hmc/p4lpp/related/tip001_upgrade2to3.html
http://www-304.ibm.com/webapp/set2/sas/f/hmc/p4lpp/related/hmc31tohmc337.html
- Ha a HMC-nk v3.3.x verzión fut, akkor nincs mitől félnünk, a standard update process-t alkalmazva
http://www.www-304.ibm.com/webapp/set2/sas/f/hmc/power4/download/v33.Update.html
http://www-01.ibm.com/support/docview.wss?uid=isg3T1012428
- Abban az esetben ha a HMC-nk minimum v5.x-en fut, akkor az upgrade path a következő lesz:
- 5.1.0 -> 5.2.0 /* update */
- 5.2.0 -> 5.2.1 /* update */
- 5.2.1 -> 6.1.2 /* altdiskboot */
- 6.1.2 -> 6.1.3 (+ javítások) /* update */
- Firmware upgrade Release 240-re az összes HMC által managelt boxon
/* ajánlott upgrade a 240_382. Innen konkurensen lehet ugrani a latest 240_418-as verzióra */
- 6.1.3 -> 7.3.4 /* altdiskboot */
- 7.3.4 -> 7.7.7 (amennyiben lehetséges) /* altdiskboot */
- 7.7.7 -> 7.7.7.2 (amennyiben lehetséges) /* update */
Szükséges file-ok:
3.3.5 -> 3.3.7 (update) / HMC_Update_V3R3.7.zip
3.3.7 Corrective Service Fixes / U808917.zip, U810401.zip, U814685.zip, U860526.zip
4.x -> 6.1.2 (onsite only) / HMC_Recovery_V6R1.2_1.iso, HMC_Recovery_V6R1.2_2.iso
5.1.0 -> 5.2.0 update / HMC_Update_V5R2.0_1.zip, HMC_Update_V5R2.0_2.zip
5.2.0 -> 5.2.1 update / HMC_Update_V5R2.1_1.zip, HMC_Update_V5R2.1_2.zip
5.2.1 -> 6.1.2 - netinstall / bzImage, disk1.img, disk2.img, disk3.img, initrd.gz
6.1.2 -> 6.1.3 update / HMC_Update_V6R1.3_1.zip, HMC_Update_V6R1.3_2.zip, HMC_Update_V6R1.3_3.zip, HMC_Update_V6R1.3_4.zip
6.1.3 Corrective Service Fixes / MH01082.zip, MH01110.zip, MH01127.zip, MH01128.zip, MH01168.zip
6.1.3 -> 7.3.4 - netinstall / bzImage, disk1.img, disk2.img, disk3.img, hmcnetworkfiles.sum, initrd.gz
7.3.4 -> 7.7.7 - netinstall / bzImage, disk1.img, disk2.img, disk3.img, hmcnetworkfiles.sum, initrd.gz
7.7.7.0 -> 7.7.7.2 update / HMC_Update_V7R770_SP2.iso
7.7.7.2 Corrective Service Fix / MH01367.iso

Ha eddig tudtál követni (és a tervezésnek minden kellemes percét kiélted már), akkor most jön arra a kérdésre a válasz, hogy akkor mit és hogyan.
Kezdjük talán a hivatalos dokumentációval:
Remote upgrade from HMC 5.2.1 using network images
Upgrading or installing HMC V7 over a network

Feltételezve, hogy eljutottunk arra a szintre, hogy a HMC-nk valóban távolról upgrade-elhető, nézzük hogy hogyan is kéne ennek elvileg lezajlania:
- Nulladik körben kell egy szervert találni, ami a HMC-vel viszonylag jó hálózati kapcsolattal bír, lehetőleg a tűzfal nem blokkolja az FTP/NFS kapcsolatokat, és fel tudjuk rá tölteni az összes szükséges Firmware és HMC update/upgrade file is.
# Jó tanács: Érdemes egy kb 50 MB-os file-t SCP-vel feltolni a HMC-re tesztelni, hogy a hálózat milyen sebességet képes nyújtani.
- Első körben csinálunk valami nyamvadék backupot ha tudunk:
- HMC v3.x sajna csak local DVD-RAM-ra tud bármilyen backupot küldeni, így ott ha lehet, akkor kérjünk meg valakit, hogy rakja be a szükséges optikai lemezt a helyére. Ha ez nem megoldható akkor egyik jó kollégám mondásával élve "Don't be afraid to be a cowboy", persze azért a "Kockázatokról, és lehetséges mellékhatásokról kérjük értesítse ügyfelét, vagy jogász ismerősét", csupán a kényelmetlen kérdések elkerülése végett.
- HMC v4.x óta van lehetőség a "Critical Console Data"-t egy NFS szerverre feltolni, amit meglehetősen tudok is ajánlani (hogy pontosan miért azt kicsit később)
- Második körben én komolyan azt tanácsolom, hogy ha lehet akkor az alábbiak közül minél többet tartsunk készenlétben:
- PESH jelszó (vagy épp kedvenc rbash escape modszer, ha ismersz ilyet) a HMC-nkhez (mind a 7.3 előtti, mind az utáni PESH jelszó)
- Onsite technikus (aka local support) ha valami tényleg balul ütne ki
- 3. körben szintén egy jó tanács: Mielőtt elkezdünk upgrade-elgetni, indítsuk újra a HMC-t. Hogy miért?
- Nem szeretem amikor X napja/hónapja beragadt processek szívatnak meg
- Jobb leellenőrizni, hogy a HMC egyáltalán képes e magától talpra állni (a restartot meg amúgy se ússzuk meg, szóval inkább még az elején derüljön ki ha valami gáz van, mintsem arra gyanakodjunk, hogy az update/upgrade szúrt el valamit)
- Induláskor 1-2 diagnosztikai rutin azért lefut, szóval ha van valami gáz, akkor ha mákunk van még elcsíphetjük a /var/log/messages-ben.
- Érdemes lehet még kicsit kipucolni a HMC-n 1-2 dolgot is mielőtt elkezdjük felforgatni a mindenséget :)
- Event-ek lezárása: chsvcevent –o closeall
- Logok ürítése: chhmcfs –o f –d 0
/* Ezzel a lépéssel amúgy nem teljesen értek egyet auditálhatósági szempontból, de ki ki ítélje ezt meg maga. */
- Mindezek után jön az, hogy akkor update/upgrade-eljünk. Attól függően, hogy verzión belül maradunk e, vagy épp ugrunk más-más módszert kell alkalmazni:
- alternate disk install:
saveupgdata -r disk
getupgfiles -h $SERVER -u $USER -d $SOURCE_DIRECTORY
chhmc -c altdiskboot -s enable --mode upgrade
hmcshutdown -r -t now
- Update: (ISO vagy zip file-okból)
Távoli szerverről: updhmc -f /$FILE_FULL_PATH -h $SERVER -r -t s -u $USER -i
Előzőleg feltöltött file-ból: updhmc -f /$FILE_FULL_PATH -h $SERVER -r -t l -c

# Megjegyzések:
- Megoszlanak a vélemények, hogy az update-et console-ról, vagy az elérhető GUI-s (WebSM, Web-es) felületről érdemesebb e csinálni. Számomra a console gyorsabb (próbált már valaki WebSM-et futtatni 2 proxy mögül? :)), cserébe a GUI-s felület informatívabb (bár sikerült belefutnom olyan hibába, ahol viszont nem az elvárt módon működött, míg a parancssori megfelelője meg igen - erről később)
- Lehetőség van előzőleg a HMC-re feltöltött file-ból update-elni, de amennyiben alternate disk install-t is kell csinálnunk, úgy sajna csak az FTP szerver jön szóba hivatalosan. /* Nem hivatalosan root hozzáféréssel ezt meg tudjuk kerülni - erről is majd kicsit később)
- Ha jól rémlik 7.3.5-ös verzió óta van lehetőség a getupgfile parancsnál SFTP használatára a "-s" kapcsolóval
- Alternate disk install esetén, ha a saveupgdata parancsot elfelejtettük lefuttatni, vagy a parancs nem tudott mindent lementeni, akkor számoljunk vele, hogy a HMC nem fogja visszaállítani se az előzőleg létrehozott usereket, se a hálózati beállításokat, se az FSP-k kapcsolódási adatait => Lesz egy csupasz upgrade-elt HMC-nk, ami nemhogy nem managel egy boxot se, de még hálózatról se lesz elérhető. Ilyen esetben helyi technikus kell a hálózat beállításához és/vagy az előzőleg kreált "Critical Console Data" visszaállításához.

És akkor ami ezen felül még szerintem jó ha van:
- Egy alternativ session-ünk ahol monitorozni tudjuk, hogy épp hol tart a HMC (mondjuk az adat feltöltésben)
# getupgfiles parancs esetén a már letöltött file-ok a /hmcdump alá kerülnek
# updhmc parancs esetén a letöltött adat a /usr/local/hsc_install.images/ alá kerül
- Még jobb ha az a session root hozzáféréssel bír (na miért írtam a PESH-t?), ugyan is nem 1 olyan eset jött szembe, ahol igen is root hozzáférés kellett ahhoz, hogy a problémával tudjak valamit kezdeni.

Íme 1-2 példa:
- 3.3.7 alatt előjött hiba: az updhmc parancs elszáll az alábbi hibaüzenettel: "An error occurred while trying to run corrective services. Please check your entry and retry command."
- Megoldás: Nézzük meg a dátum beállításokat :) (Na jó, ezt root hozzáférés nélkül is lehet javítani (chhmc -c date -s modify), viszont a debughoz itt is kelett a root hozzáférés)
- 6.1.3 HMC alatt a saveupgdata parancs elhasal "Exception in thread "main" java.lang.NoClassDefFoundError: com/ibm/jcb/JCApplicationListener" hibával
- Megoldás: pakoljuk fel újra az alábbi javításokat ebben a sorrendben: MH01082, MH01110, MH01128, MH01127,MH01168 (Ne felejtsük el újraindítani a HMC-t mind1ik után). Ez még megy root hozzáférés nélkül.
- Majd töröljük a /tmp/saveupgrade.list file-t, és indítsuk újra a rendszert (a file törléséhez sajna már root hozzáférés kell)
# Kis kiegészítő információ: Ez a hiba több HMC-n is előjött, viszont a hibát ténylegesen csak a parancssorból hívott saveupgdata jelentette, a GUI alatt elérhető hasonló funkció vígan közölte, hogy minden rendben. Ez a "hiba" sajna egy meglehetősen kellemetlen restore-al javult csak meg, miután a site-on lévő technikus konstatálta, hogy a HMC semmiféle információt nem töltött vissza az upgrade process során.
- 7.3.4 alatt a getupgfiles az alábbi hibával elszáll: "The file bzImage appeared to be missing, or the transfer did not complete successfully, resulting in an incorrect file size or checksum. Please retry the operation." A parancs ismételt kiadása nem segít semmit.
- Megoldás: Valószínű betelt a /hmcdump FS. Kénytelenek leszünk manuálisan törölni a file-okat, majd megismételni a getupgfiles parancsot.
- Szintén 7.3.4 alatt sikerült egy olyan furcsaságba belefussak, hogy a hmcshutdown -r -t now kiadása után az SSH már leállt, illetve a HMC parancsok se működtek már, de a HMC valahogy mégse bírt ujraindulni magától: root console alól shutdown -r -t now segített csak.
- Verzió független issue: Volt szerencsém olyan HMC-hez is, ami ugyan látta a repository szervert, viszont a kapcsolat a 2 szerver között csodás 30 kb/sec-el tántorgott. Mit csinál ilyenkor az ember? Megpróbálja megszakítani a parancsot egy CTRL+C-vel, majd egy másik (immár gyorsabb szervert használva) helyről áttölteni az adatot. Na most a CTRL+C lenyomásával nincs is gond, az ember szépen vissza is kapja a terminálját.. Na de viszont amikor egy immár remélhetőleg gyorsabb helyről ismét elindítjuk a programot (illetve monitorozzuk is a folyamatot), akkor észre vehetjük hogy egyszerre több file is változik egyszerre. A dolog mögött pedig az áll, hogy a CTRL+C lenyomásakor a parancs ugyan vissza adja a parancssort, viszont a parancsot nem állítja le.
# Amennyiben ilyen helyzetbe kerülünk lehet simán jobban járunk ha root jogokkal kill-eljük a programot, és manuálisan scp-vel feltoljuk a csomagot a szükséges helyére (getupgfiles esetén ne feledkezzünk el a /hmcdump felmountolásáról se, ha esetleg le lenne csatolva)
# Pro tipp: Az alábbi paranccsal követhetjük, hogy milyen (avagy mennyi) process fut a HMC-nken root hozzáférés nélkül is: (számolni a 'grep -c'-vel tudunk :))
# for i in $(ls -d /proc/[0-9]* |sed 's/\/proc\///g'|sort -n);do echo -e "$i\t $(cat /proc/$i/status |grep Name |sed 's/Name://g') $(cat /proc/$i/cmdline)";done

Utolsó jó tanács:
- Ha valaki nagyon ragaszkodik a GUI-hoz, és van SSH hozzáférése a HMC-hez, úgy lehet megéri ha SSH tunnelezi a GUI eléréséhez szükséges portokat, majd a localhost megfelelő portjára csatlakozva manageli a HMC-t (főleg ha a HMC proxy vagy tűzfal mögött van):
- WebSM esetén:
# export TARGET=${HMC_SERVER_ADDRESS}
# ssh -L 9090:${TARGET}:9090 -L 9940:${TARGET}:9940 -L 9443:${TARGET}:9443 -L 30000:${TARGET}:30000 -L 30001:${TARGET}:30001 -L 30002:${TARGET}:30002 -L 30003:${TARGET}:30003 -L 30004:${TARGET}:30004 -L 30005:${TARGET}:30005 -L 30006:${TARGET}:30006 -L 30007:${TARGET}:30007 -L 30008:${TARGET}:30008 -L 30009:${TARGET}:30009 hscroot@${TARGET}
# /opt/websm/bin/wsm /* Majd a kapcsolódási adatoknál a szervernév localhost */
- Web-based GUI esetén:
# ssh -L 8443:${HMC_SERVER_ADDRESS}:443 hscroot@${HMC_SERVER_ADDRESS}
# firefox https://localhost:8443
# Figyelem - ez a módszer (sajna) nem használható az ASMI felület eléréséhez
Ezek után még csodálkozik valaki, hogy ennyi macera mellett a hivatalos doksik az onsite upgrade-et részesítik előnyben? :)