Bár a téma kicsit kapcsolódik a Solaris Zónák-hoz, és a Live Upgrade-hez is, mégis szerintem megérdemel egy külön írást. Az alap gondolat a konszolidáció és a patchelés, tehát több szeparált helyről egy közös helyre “migrálunk” zónákat, illetve patchelünk egy Global Zónát ami alatt Local Zónák futnak. A kérdés persze mindig adott, mi fog történni?

Migrácó utáni hiba

Vegyük először azt az esetet, amikor kapunk egy ZFS exportot és egy zóna configot, amit be tudunk importálni (ezek a Solaris Zóna cikkben le vannak írva ezért nem részletezném). A zóna elindítása után bár elkezd bootolni, de a következő hibával szépen el is szál:

[root@ril-con19:/]# svcs -x
svc:/system/filesystem/local:default (local file system mounts)
State: maintenance since Thu Jun 10 16:49:35 2010
Reason: Start method exited with $SMF_EXIT_ERR_FATAL.
See: http://sun.com/msg/SMF-8000-KS
See: /var/svc/log/system-filesystem-local:default.log
Impact: 22 dependent services are not running. (Use -v for list.)

Amennyiben megnézzük a service log file-ját a következőt fogjuk tapasztalni:

[root@ril-con19:/]# [root@ril-con19:/]# cat /var/svc/log/system-filesystem-local:default.log
[ May 5 15:24:32 Method “start” exited with status 0 ]
[ Jun 10 16:43:44 Enabled. ]
[ Jun 10 16:43:47 Executing start method (“/lib/svc/method/fs-local”) ]
Killed
WARNING: /usr/sbin/zfs mount -a failed: exit status 137
[ Jun 10 16:43:47 Method “start” exited with status 95 ]
[ Jun 10 16:49:34 Leaving maintenance because clear requested. ]

Ez jól szmbolizálja azt, hogy egy zóna, hogyha a nem megfelelő patch szinten van, illetve a system library ennyire elüt a global zónától, és még vannak közös (read only területek, amiket a global zónától örököl) akkor szinte biztos hibába fog futni.

Global zóna patchelése lokális (vagy cluster) zónákkal hiba

Azon gépek patchelése ahol zónák futnak, vagy ne adj Isten cluster kezeli a zónákat sokszor problémába futnak. Ekkor az szokott lenni a biztos megoldás, hogy a zónákat detach-eljük, sőt még a zónák tárterületéért felelős mountpointot is eltávolítjuk. Majd első körben a Global Zónát patcheljük meg. Ez általában megy is gond nélkül.

A probléma ilyenkor ugyan úgy fent fog állni mint a fenti migráció esetén, a lokális (vagy cluster) zónák patch szintje el fog ütni a Global Zónáétól.

Megoldás: Zones Update on Attach Feature and Patching

Ez a funkció a Solaris 10 5/08-től érhető el. A hivatalos túlspecifikált leírás itt. olvasható erről az új feature-ről. Én megpróbálom röviden és praktikusan összefoglalni azt, hogy a fenti két problémát hogyan tudjuk megoldani.

A kulcs a zonadm -z ZONENAME attach parancs lesz. Ez természetesen azt jelenti, hogy bár a zónának elérhetőnek kell lennie, de detach állapotba kell kerülnie. Ha attacholtuk már, nem kell megijedni, nem vesztettünk semmit, bármikor attacholhatjuk később is.

A mágia az attach-ben van, ahogy mondtam. Amennyiben így attacholjuk vissza a zónát, abban az esetben a Global Zóna megnézi az eltéréseket, és az attacholás előtt eltávolítja a nem kívánatos állományokat, és minden szükségeset installál, hogy újra szinkronba álljanak a patch szintek a global és a local zóna esetében.

# zonadm -z ril.con19 detach
# zonadm -z ril.con19 attach -u

Jól látszik, hogy a parancs után elindult a removing majd az install rész, végül pedig kaptunk egy uptodate zónát, amit kedvünkre indíthattunk is el.

Amennyiben van olyan patch, amit mi blokkolni szeretnénk azt explicit mód pluszban megadhatunk a következő módon:

# zoneadm -z my-zone attach -u -b 123456-08

Illetve, hogy ha azt akarjuk, hogy minden ajánlás ellenére se történjen semmilyen változtatás, akkor a következő parancsot kell használni.

# zoneadm -z my-zone attach -F