Minden informatikai rendszer esetében különösen fontos a patch management. Tehát milyen sűrűn, hogyan, mekkora leállással frissítjük a rendszereket, teszünk fel javításokat. A Solaris a Linuxtól eltérően külön patch “packageket” használ, és nem a meglévő csomagokból rak fel egy újabb verziót. A biztonságos, jól irányított és legkisebb leállással járó patchelés érdekében a SUN kifejlesztette a Live Upgrade funkciót.

Tradicionális modell

Amennyiben valamilyen software raid1 megoldással rendelkezünk, akkor patchelés előtt szétbontjuk a tükröt, ellenőrizzük, hogy a második lábról is hiba esetén is fel tudunk el bootolni, majd az eredeti rendszerünket (első fele a tükörnek) megpatcheljük. Ha minden rendben örülünk és visszaszinkronizáljuk a root diskünket, hiba esetén pedig a másik lábról felállunk és oda szinkronizáljuk vissza az első tükör részt.

Szinte csak hátránya van, sok aprólékos állítgatás, hosszú szinkronizációs idők. Senki se szereti.

Live Upgrade

A tradicionális modellt figyelembe véve próbált erre a kérdésre megoldást találni illetve eszközt készíteni a SUN. Ennek a lehetőségnek lett Live Upgrade a neve.

Boot Environment

Először is fontos megismerkednünk pár új kifejezéssel. Az első ezek közül a boot environment (indulási környezet). Egy boot environment egy olyan “környezetet” fog reprezentálni, ahonnan a rendszerünk szeparát módon képes elindulni. Alap helyzetben nincs egy boot environment sem. Amikor egy újat akarunk létrehozni, akkor a rendszerünk elnevezi az aktuálisat egy névvel, majd egy új helyre átmásolja azt, ezzel létre hozva egy második, teljesen elszeparált részt. Természetesen akár hány boot environmentet létrehozhatunk.

Természetesen az új boot environment helyet is fog foglalni, ezért tudnunk kell, hogy azt eltárolni. Alapvetően három megoldás létezik:

1, Csak egyetlen root diskünik van.

Ebben az esetben találnunk kell egy üres slice-t, fel nem használt tárhellyel amit felhasználhatunk az új boot environment számára.

# lucreate -c solenv1 -m /:/dev/dsk/c0t0d0s3:ufs -n solenv2

2, Egy root diskünk van, de legalább az upgrade idejére tudunk betenni egy új üres disket.

Ebben az esetben az új disk valamelyik (vagy több) slice-jét tudjuk felhasználni az új boot environmentek tárolására.

# lucreate -c solenv1 -m /:/dev/dsk/c0t1d0s5:ufs -n solenv2

3, A root diskünk SVM tükörben van, a tükröt bontjuk és a megbontott tükör második lábát használjuk fel mint új boot environment.

Ebben az esetben azt az időt is meg tudjuk spórolni, amíg egyik helyről átmásolódna az adat a másik helyre. Ugyanis a tükör bontásával biztosra vehetjük, hogy teljesen konzisztens adatokat fogunk kapni. Így ez a leggyorsabb módja az előállításának.

# lucreate -n second_disk -m /:/dev/md/dsk/d20:ufs,mirror -m /:/dev/dsk/c0t1d0s0:detach,attach,preserve

Boot environment létrehozása filesystem bontással vagy egyesítéssel

Természetesen van lehetőségünk az új boot environment létrehozásakor a meglévő struktúrán változtatni. Ha teszem azt az /usr és /opt könyvtárak nincsenek külön filesystemeken, akkor ezt szétválaszthatjuk az új boot environmentek esetében, vagy ha külön vannka, akkor egyesíthetjük azokat.

Egy lemezes esetben:

# lucreate -c solenv1 -m /:/dev/dsk/c0t0d0s3:ufs -m /usr:/dev/dsk/c0t0d0s4:ufs -m /opt:/dev/dsk/c0t0d0s5:ufs -n solenv2

Több lemezes esetben:

# lucreate -c solenv1 -m /:/dev/dsk/c0t1d0s5:ufs -m /usr:/dev/dsk/c0t1d0s6:ufs -m /opt:/dev/dsk/c0t1d0s8:ufs -n solenv2

Egy lemezes esetben:

# lucreate -c solenv1 -m /:/dev/dsk/c0t0d0s5:ufs -n solenv2

Több lemezes esetben:

# lucreate -c solenv1 -m /:/dev/dsk/c0t1d0s0:ufs -n solenv2

Upgrade/Patching

Van tehát már két Boot Environment-ünk, Most már csak meg kellene patchelni/upgradelni az egyiket.

A live upgrade funkció Solaris8, Solaris9 és Solaris 10 alatt is támogatott. A következő csomagok szükségesek:

Ezek után egy viszonylag egyszerű paranccsal tudunk patchelni, upgradelni.

Telepítő CD/DVD-ről vagy imageről upgrade:

# luupgrade -u -n second_disk -s /cdrom/cdrom0
# luupgrade -u -n second_disk -s /net/installmachine/export/Solaris_10/OS_image

(Ha extra CD/DVD-ket akarunk megadni akkor ezt a szintaxist használjuk:

# luupgrade -i -n second_disk -s /cdrom/cdrom0 -O ’-nodisplay-noconsole’
)

Package-ket akarunk installálni a Boot Environment-be:

# luupgrade -P -n second_disk SUNWabc SUNWdef SUNWghi
# luupgrade -p -n second_disk -s /net/installmachine/export/packages SUNWijk SUNWlmn SUNWpkr

Patch-eket akarunk installálni a Boot Environment-be:

# luupgrade -T -n second_disk 222222-01
# luupgrade -t -n second_disk -s /net/installmachine/export/packages 333333-01 4444444-01

Boot Environment aktiválása

Amennyiben van már egynél több Boot Envinment-ünk, akkor érdemes lehet minden féle információt kinyerni belőlük, és persze igény szerint váltogatni a kettő között.

Aktuálisan felbootolt rendszer Boot Environment nevének lekérése:

# /usr/sbin/lucurr

Boot Environment átnevezése:

# lurename -e second_disk -n third_disk

Description hozzáadása egy Boot Environmenthez:

# /usr/sbin/ludesc -n second_disk ’Solaris 10 10/08 test build’

Boot Environment filerendszereinek részletes információi:

# lufslist -n BE_name

Boot Environmentek listázása:

# lustatus

Ha aktiválni akarunk egy másik Boot Environmentet, akkor pedig a kövekező egyszerű parancsot kell használnunk:

# /sbin/luactivate -s second_disk
# init 6

Ahogy látszik nem kell csodát várni, a luactivate se csinál mást mint a következő bootolást előkészíti, hogy a másik környezetről történjen. Tehát a Boot Environmentek közötti váltáshoz elengedhetetlen az újraindítás.

Persze, ha csak egy file-hoz szeretnénk hozzáférni a nem aktív környezetben, akkor lehetőségünk van mountolni azt az aktív rendszerünkben.

# lumount -n newbe /mnt

Sőt mi több, lehetőségünk van összehasonlítani a Boot Environmenteket.

# /usr/sbin/lucompare -i /etc/lu/compare/ -o /var/tmp/compare.out second_disk

Amennyiben pedig azt fedeztük fel, hogy egy ott kallódó boot environment túl régi, akkor törölhetjük is persze:

# ludelete second_disk

Összefoglalás

Így most sok-sok parancs és kitérést ejtettem, de hogy látszódjon mennyire egyszerű ezzel a lehetőséggel élni íme egy ábra a teljes folyamatról:

Live Upgrade ZFS alapú root zpool-al

Amibe én jobban szeretnék belemenni most, az a ZFS root pool alapú rendszerek Live Upgrade procedúrája. Ugyanis erre fele megy a világ, és a SUN/Oracle is ezt a vonalat nyomja ezerrel.

Íme az erdeti állapot, egy x86 Solaris 10 zfs rpoolal:

# zfs list

Akkor csináljunk egy új Boot Environmentet, és nézzük meg ZFS alatt mi fog történni.

# lucreate -c old -n new

Elemezzük egy kicsit ki mi is történt, méghozzá pillanatok alatt. - A régi környezett old nevet kapott - Az új new nevet kapott - Egy snapshot jött létre az eredeti zfs filerendszerünkről - Ez a snapshotból klónozódott egy új filerendszer new néven. - Ez a klónozódott new filerendszer kapott egy noautomount flag-et, tehát nem fog csak úgy megjelenni automatikusan. - A grub-ba is felvevődött az új környezet, tehát indulásnál most már választható lesz, hogy a new vagy az old Boot Environmentet akarjuk elindítani. Most nézzük meg ez, hogy néz ki filesystem szempontból:
# zfs list

Melyik Boot Environment is aktív:

# lucurr

Nézzünk most egy státusz információt a Boot Environmentekről:

# lustatus

Jól látszik, hogy sorokba vannak gyűjtve a létező Boot Environmentek, oszlopokban pedig a sátusz információk. Láthatjuk, hogy teljes, befejezett Boot Environmentről beszélünk-e, azt hogy aktív-e most, hogy egy újraindítást követően aktív lesz-e, törölhető-e (csak nem aktív törölhető), és ha van neki akkor a másolási státuszát.

Ahogy már írtam most lehetőségünk van összehasonlítani a két Boot Environmentet:

# /usr/sbin/lucompare -i /etc/lu/compare/ -o /var/tmp/compare.out new

Lekérhetjük a filesystem információkat egy Boot Environment-ről:

# lufslist -n new
# lufslist -n old

Aktivájuk most a new nevű Boot Environmentet:

# luactivate -s new

# init 6

Bootolásnál a new névvel ellátott Boot Environment lesz az aktív:

# lucurr
# lustatus

Most lehetőségünk van a nem aktív (old) Boot Environment-et felmountolni:

# lumount -n old /mnt/
# df -h /mnt

Lemountolni értelemszerűen:

# luumount -n old

Ezek után törölhetjuk is akár a régit, amennyiben úgy érezzük, hogy nincs rá tovább szükség:

# ludelete -n old

Végszó

Remélem a fenti példákból jól látható milyen egyszerű módon kezelhetővé tette a SUN a Solaris rendszerek esetében a több környezet kezelését, és módosítását, és mennyi időt, erőt, és energiát lehet vele megspórolni.

A teljes hivatalos dokumentáció a Live Upgraderől elérhető itt.