Solaris 10 Zónák

Ha egyszerűen definiálni akarnám hogy mik is azok a Solaris Zónák, azt mondanám a Solaris saját virtualizációs megoldása. Persze szerintem ez nem helyes egy érdeklődő fül számára, mert manapság virtualizáció alatt mindenki a VMWare-s virtualizációra gondol, ahol szabadon futtathatunk bármilyen operációs rendszert egy meglévő mellett, ugyan azon a vason. Na a Solaris zónák ezt nem tudják. Ha pontosan akarnám definiálni, jobb lenne ha azt mondanám egy Solaris Zóna nem más, mint egy vason (fizikai hardware-n) futó Solaris operációs rendszer egy duplikációja (tehát kötelezően egy másik Solaris), ami nem a fizikai hardware erőforrásait használja, hanem a számára emulált, virtualizált, ezáltal szabályozható erőforrásokat (CPU, Memória, Disk terület).

Tehát a zóna nem más mint egy másik Solaris. Ezt ugye Linux, BSD alatt egy chroot környezet vagy egy jail is tudja. Akkor hát mivel több vagy jobb? Linux és BSD alatt is a duplikált és szeparát környezet futtatása természetesen lehetséges, viszont annak létrehozása nem olyan triviális. Először megcsinálni a chroot környezetet, majd manuálisan vagy kézzel írt nem hivatalos módon átmásolgatjuk a meglévő rendszer elemeit a szerint, ügyelve a device, és egyéb speciális filerendszerekre. Erőforrások pedig elég körülményesen és nem túl limitálható módon definiálhatóak ezeknek a megoldásoknak.

Mi forradalmi a Solaris Zónákban?

Először is az elkülönített, duplikált solarisok hivatalos definiált, a futtató rendszer számára kezelhető módon léteznek. Mitöbb struktúra szerint két változatot is ismer és kezel a Solaris 10 a zónáiból.

Global Zóna:

A global zóna alapból minden Solaris 10-en létezik. Ez testesíti meg a fizikai gépen futó, host rendszert. Ez a zóna korlátlanul tudja a hardver eszközöket elérni, illetve ebbõl a zónából kezelhetõ az összes lokális zóna. Ezt nem kell piszkálni, módosítgatni, kitörölni. Van és kész.

Kis zóna:

Ahogy a képen is látszik a kis zóna a global zónájával (tehát a futtató környezetével) közös rendszer file-kat használ. Ez ugye a disk-en helytakarékos, és a memóriában is csak egy példányban kell léteznie a shared lib-eknek, és egy azon kernel szolgálja ki az összes rendszert. Ez pedig már nem kis dolog, hisz nagy zónaszámnál rengeteg helyet, és memóriát tudunk spórolni.

Nézzük milyen lépések szükségeltetnek egy kis zóna létrehozásához:

# zonecfg -z smallzone
smallzone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:smallzone> create
zonecfg:smallzone> set autoboot=true
zonecfg:smallzone> set zonepath=/export/smallzone  
zonecfg:smallzone> add net
zonecfg:smallzone:net> set address=192.168.2.101
zonecfg:smallzone:net> set physical=ce0
zonecfg:smallzone:net> end
zonecfg:smallzone> info
zonepath: /export/smallzone
autoboot: true
pool:
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
net:
        address: 10.0.0.112
        physical: ce0
zonecfg:smallzone> verify
zonecfg:smallzone> commit
zonecfg:smallzone> exit
#
# zoneadm list -cv
  ID NAME             STATUS         PATH                         
   0 global           running        /                            
   - smallzone       configured     /export/smallzone
#
# mkdir /export/smallzone
# chmod 700 /export/smallzone
#
# zoneadm -z smallzone verify
#
# zoneadm -z smallzone install
Preparing to install zone smallzone.
Creating list of files to copy from the global zone.
Copying <2574> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <987> packages on the zone.
Initialized <987> packages on zone.                               
Zone smallzone is initialized.
Installation of these packages generated warnings: sunwcsr SUNWdtdte
The file  contains a log of the zone installation.
#
# zoneadm list -cv
  ID NAME             STATUS         PATH                         
   0 global           running        /                            
   - smallzone       installed      /export/smallzone
#
# zoneadm -z smallzone boot
#
# zoneadm list -cv
  ID NAME             STATUS         PATH                         
   0 global           running        /                            
   1 smallzone       running        /export/smallzone
# zlogin -C smallzone
[Connected to zone 'smallzone' console]   
100/100
What type of terminal are you using?
 1) ANSI Standard CRT
 2) DEC VT52
 3) DEC VT100
 4) Heathkit 19
 5) Lear Siegler ADM31
 6) PC Console
 7) Sun Command Tool
 8) Sun Workstation
 9) Televideo 910
 10) Televideo 925
 11) Wyse Model 50
 12) X Terminal Emulator (xterms)
 13) CDE Terminal Emulator (dtterm)
 14) Other
Type the number of your choice and press Return:
........

Akkor nézzünk egy kis magyarázatot is ehhez, hogy mi is történt:
1. Le akarnánk kérni a zonecfg -z ZÓNANEVE parancsal a zónánk konfigurációját, de mivel az nem létezik még figyelmeztet minket a rendszer és felajánlja hogy csináljuk meg.
2. Innentől a zonecfg menüjében vagyunk. Először is a create paranccsal létrehozzuk a kis zónát.
3. Az autobootváltozóval tudjuk beállítani, hogy szeretnénk-e ha a global (host) rendszer indulásakor ez a zónai is autómatikusan elinduljon.
4. A zonepathváltózóban a zónánk folder struktúrájának a helyét kell hogy megadjuk. Ebbe a folderbe fogja átmásolni, illetve létrehozni a szükséges file-okat, amik természetesen a globalzónából is bármikor elérhetőek.
5. Az add net-el egy virtuális hálózati interface-t kezdünk definiálni. (többször is használhatjuk az add netet majd, tetszőleges számú virtuális hálózati interface-t adhatunk hozzá)
6. A virtuális interface létrehozásához további paramétereket kell megadnunk. Először azt, hogy milyen IP címet fog használni (address).
7. Majd azt, physical, hogy a virtuális hálózati interface milyen fizikális (a global zóna egy interface-t kell megadni) eszközt fog használni.
8. Az end szócskával abból az egységből lépünk ki, amiben épp benne vagyunk. Most jelen pillanatban a smallzone:net ben voltunk, tehát a smallzone nevű zónánk hálózati eszközeiben. Ez egyfajta folder struktúrának is tekinthető, ahol nyomtunk egy cd .. -t.
9. Az info parancs bármikor kiadható. Ez kilistázza nekünk a zónánk összes definiált paraméterét.
Biztos mindenkinek feltűnt, hogy van 4 könyvtár, amit inherit-pkg-dir kulcsszavak kíséretében látunk. Nos ezek azok a bizonyos közös, vagy inkább örökölt file rendszerek (folderek).
10. A verifyparancs leellenőrzi, hogy mindent megfelelőképp adtunk meg, mindenhol a megfelelő mennyiségű információt kitöltöttük, gyakorlatilag egy szemantikai ellenörzést hajt végre.
11. A commitparancs kiírja file-ba a mi általunk meghatározott adatokat, ezzel lesz ténylegesen használható, egyenértékű gyakorlatilag egy save gombbal.
12. Az exit-el pedig kilépünk a teljes zonecfg menüből vissza a rendszer prompthoz.
13. A zoneadm list -cv parancsal tudjuk részletesen lekérni a zónák részletes információit és állapotát. Most configured állapotba került. A következő ábra jól bemutatja, hogy milyen parancsok hatására milyen állapotba kerülhet a zóna.

14. mkdir-el létrehozzuk azt a könyvtárat ahova fel szeretnénk építeni a zónánkat, és amit már előzetesen megadtunk a zonánk konfigurációja során.
15. Az előbb létrehozott zone foldernek chmod 700 megfelelő jogot kell adnunk.
16. A zoneadm -z ZONANEVE verify parancs végső ellenőrzést végez a zónán, mielőtt elkezdődne a telepítés.
17. A zoneadm -z smallzone install parancs, ahogy a nevéből is érthető felinstallálja a zónát. Ez akár 10-15 percig is eltarthat. A rendszer megnézi, hogy milyen csomagok vannak telepítve a global zónába, majd azokat a lokálisba egyenként telepíti. Amennyiben egy csomag az örökölt könyvtárba van telepítve, úgy azokat ténylegesen nem másolja. Ezek az örökölt könyvtárak az új zónában egy loopback eszközön keresztül, egy file rendszerként read-only módban lesznek felmountolva. Ekkor installed státuszba kerül a zóna.
18. A zoneadm -z ZONENEVE boot parancsal ténylegesen elindítjuk a zónát.
19. Egy zóna elsõ indításakor még végig kell mennünk az inicializálási procedúrján. Ez pont ugyanaz, mint amin egy normális Solaris telepítés elején is végig kell menni, illetve mint amikor sys-unconfig parancsot futtatunk.
Lépjünk be tehát a zóna konzoljára (zlogin -C) és kezdjük meg a zóna – mint új operációs rendszer – beállítását.

Nagy zóna:

Ahogy a képen is látszik a nagy zóna a global zónájától (tehát a futtató környezetétől) teljesen különálló rendszert jelent. Ez mint méretben mint felhasznált memória méretében több igényt jelent, és a zónák számával ez csak dinamikusabban nő és nő. Nagy zóna esetén minden rendszerfile-ból több példány van, ami lehetővé teszi, hogy kedvünkre testre szabhassuk. Eltávolíthassunk, illetve a global zónától függetlenül hozzáadhassunk valamit.

Nézzük milyen lépések szükségeltetnek egy nagy zóna létrehozásához:

# zonecfg -z bigzone
bigzone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:bigzone> create -b
zonecfg:bigzone> set autoboot=true
zonecfg:bigzone> set zonepath=/export/bigzone  
zonecfg:bigzone> add net
zonecfg:bigzone:net> set address=192.168.2.102
zonecfg:bigzone:net> set physical=ce0
zonecfg:bigzone:net> end
zonecfg:bigzone> info
zonepath: /export/bigzone
autoboot: true
pool:
net:
        address: 10.0.0.112
        physical: ce0
zonecfg:bigzone> verify
zonecfg:bigzone> commit
zonecfg:bigzone> exit
#
# zoneadm list -cv
  ID NAME             STATUS         PATH                         
   0 global           running        /                            
   - bigzone       configured     /export/bigzone
#
# mkdir /export/bigzone
# chmod 700 /export/bigzone
#
# zoneadm -z big verify
#
# zoneadm -z bigzone install
Preparing to install zone bigzone.
Creating list of files to copy from the global zone.
Copying <118457> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <987> packages on the zone.
Initialized <118457> packages on zone.                               
Zone bigzone is initialized.
Installation of these packages generated warnings: sunwcsr SUNWdtdte
The file  contains a log of the zone installation.
#
# zoneadm list -cv
  ID NAME             STATUS         PATH                         
   0 global           running        /                            
   - bigzone       installed      /export/bigzone
#
# zoneadm -z bigzone boot
#
# zoneadm list -cv
  ID NAME             STATUS         PATH                         
   0 global           running        /                            
   1 bigzone       running        /export/bigzone
# zlogin -C bigzone
[Connected to zone 'bigzone' console]   
100/100
What type of terminal are you using?
 1) ANSI Standard CRT
 2) DEC VT52
 3) DEC VT100
 4) Heathkit 19
 5) Lear Siegler ADM31
 6) PC Console
 7) Sun Command Tool
 8) Sun Workstation
 9) Televideo 910
 10) Televideo 925
 11) Wyse Model 50
 12) X Terminal Emulator (xterms)
 13) CDE Terminal Emulator (dtterm)
 14) Other
Type the number of your choice and press Return:
........

Akkor nézzünk egy kis magyarázatot is ehhez, hogy mi is történt:
1. Le akarnánk kérni a zonecfg -z ZÓNANEVE parancsal a zónánk konfigurációját, de mivel az nem létezik még figyelmeztet minket a rendszer és felajánlja hogy csináljuk meg.
2. Innentől a zonecfg menüjében vagyunk. Először is a create .bparanccsal létrehozzuk a nagy zónát. Bár nem tudom pontosan, de gondolom a -b kapcsoló a BIG szóra utalhat. Ennek hatására a zonecfg nem csinál örökölt könyvtárakat.
3. Az autobootváltozóval tudjuk beállítani, hogy szeretnénk-e ha a global (host) rendszer indulásakor ez a zónai is autómatikusan elinduljon.
4. A zonepathváltózóban a zónánk folder struktúrájának a helyét kell hogy megadjuk. Ebbe a folderbe fogja átmásolni, illetve létrehozni a szükséges file-okat, amik természetesen a globalzónából is bármikor elérhetőek.
5. Az add net-el egy virtuális hálózati interface-t kezdünk definiálni. (többször is használhatjuk az add netet majd, tetszőleges számú virtuális hálózati interface-t adhatunk hozzá)
6. A virtuális interface létrehozásához további paramétereket kell megadnunk. Először azt, hogy milyen IP címet fog használni (address).
7. Majd azt, physical, hogy a virtuális hálózati interface milyen fizikális (a global zóna egy interface-t kell megadni) eszközt fog használni.
8. Az end szócskával abból az egységből lépünk ki, amiben épp benne vagyunk. Most jelen pillanatban a bigzone:net ben voltunk, tehát a smallzone nevű zónánk hálózati eszközeiben. Ez egyfajta folder struktúrának is tekinthető, ahol nyomtunk egy cd .. -t.
9. Az info parancs bármikor kiadható. Ez kilistázza nekünk a zónánk összes definiált paraméterét.
Biztos mindenkinek feltűnt, hogy a kis zónánál tárgyalt 4 könyvtár, amit inherit-pkg-dir kulcsszavak kíséretében láthattunk az ez esetben nincs. Tehát nincsenek örökölt filerendszerek, minden másolódik.
10. A verifyparancs leellenőrzi, hogy mindent megfelelőképp adtunk meg, mindenhol a megfelelő mennyiségű információt kitöltöttük, gyakorlatilag egy szemantikai ellenörzést hajt végre.
11. A commitparancs kiírja file-ba a mi általunk meghatározott adatokat, ezzel lesz ténylegesen használható, egyenértékű gyakorlatilag egy save gombbal.
12. Az exit-el pedig kilépünk a teljes zonecfg menüből vissza a rendszer prompthoz.
13. A zoneadm list -cv parancsal tudjuk részletesen lekérni a zónák részletes információit és állapotát. Most configured állapotba került. A következő ábra jól bemutatja, hogy milyen parancsok hatására milyen állapotba kerülhet a zóna.

14. mkdir-el létrehozzuk azt a könyvtárat ahova fel szeretnénk építeni a zónánkat, és amit már előzetesen megadtunk a zonánk konfigurációja során.
15. Az előbb létrehozott zone foldernek chmod 700 megfelelő jogot kell adnunk.
16. A zoneadm -z ZONANEVE verify parancs végső ellenőrzést végez a zónán, mielőtt elkezdődne a telepítés.
17. A zoneadm -z bigzone install parancs, ahogy a nevéből is érthető felinstallálja a zónát. Ez akár 10-15 percig is eltarthat. A rendszer megnézi, hogy milyen csomagok vannak telepítve a global zónába, majd azokat a lokálisba egyenként telepíti. Ekkor installed státuszba kerül a zóna.
18. A zoneadm -z ZONENEVE boot parancsal ténylegesen elindítjuk a zónát.
19. Egy zóna elsõ indításakor még végig kell mennünk az inicializálási procedúrján. Ez pont ugyanaz, mint amin egy normális Solaris telepítés elején is végig kell menni, illetve mint amikor sys-unconfig parancsot futtatunk.
Lépjünk be tehát a zóna konzoljára (zlogin -C) és kezdjük meg a zóna – mint új operációs rendszer – beállítását.

Zóna Backup

Mivel alap helyzetben a zónák közös és csak olvasható filerendszereket is használnak ezért ezen részeket nem kívánjuk menteni. Egyrészt felesleges, hisz ugyan az mindig, másrészről okozhat problémákat. Ezért a következő megoldások létezhetnek:

  • Zóna leállítása és úgy a zóna file-jainak másolása
  • UFS snapshot
  • find and cpio
  • Symantec (Veritas) NetBackup
  • Legato NetWorker

!!! Fontos !!! Backup esetén fontos a /etc/zones folder-ben lévő ZONANEVE.xml file-t is learchiválni.

Zóna leállítása és úgy a zóna file-jainak másolása:

Amennyiben leállítjuk a zonát, nem fognak megjelenni a read-only lofs közös filerendszerek, tehát akármilyen tool segítségével nyugottan lemásolhatóak a zóna foldere, teljes egészében. A következő példában az ufsdumpal tesszük ezt meg.

# zlogin -S smallzone init 5
# zoneadm list -cv
  ID NAME             STATUS         PATH                          
   0 global           running        /                             
   - smallzone        installed      /export/smallzone             
# ufsdump 0f /backup/smallzone.ufsdump /export/smallzone
  DUMP: Date of this level 0 dump: Thu Apr 14 08:55:56 2005
  DUMP: Date of last level 0 dump: the epoch
  DUMP: Dumping /dev/rdsk/c0t0d0s0 (lambda:/) to /backup/smallzone.ufsdump. 
  DUMP: Mapping (Pass I) [regular files]
  DUMP: Mapping (Pass II) [directories]
  DUMP: Writing 32 Kilobyte records
  DUMP: Estimated 235508 blocks (114.99MB).
  DUMP: Dumping (Pass III) [directories]
  DUMP: Dumping (Pass IV) [regular files]
  DUMP: 234494 blocks (114.50MB) on 1 volume at 2394 KB/sec
  DUMP: DUMP IS DONE
# zoneadm -z smallzone boot

UFS Snapshot

A Solaris 8 2/02-es verziójától megjelent a fssnap, snapshot készítő alkalmazás, amivel egyszerűen készíthető működő rendszerről konzisztens backup. Tehát készítünk egy snapshotot, amit felmountolunk, és a felmountolt „statikus” állapotot megint tetszés szerint backupolhatjuk:

# fssnap -o bs=/var/tmp /
/dev/fssnap/0
# mount -o ro /dev/fssnap/0 /mnt
# ufsdump 0f /backup/smallzone.ufsdump /mnt/export/smallzone
  DUMP: Date of this level 0 dump: Wed Apr 13 09:08:14 2005
  DUMP: Date of last level 0 dump: the epoch
  DUMP: Dumping /dev/rfssnap/0 (lambda:/mnt) to /backup/smallzone.ufsdump.  
  DUMP: Mapping (Pass I) [regular files]
  DUMP: Mapping (Pass II) [directories]
  DUMP: Writing 32 Kilobyte records
  DUMP: Estimated 231034 blocks (112.81MB).
  DUMP: Dumping (Pass III) [directories]
  DUMP: Dumping (Pass IV) [regular files]
  DUMP: 230014 blocks (112.31MB) on 1 volume at 2227 KB/sec
  DUMP: DUMP IS DONE
# umount /mnt
# fssnap -d /
Deleted snapshot 0.

find and cpio

A következő módszerrel működő zónáról archiválhatunk a find és cpio segítségével. Feltesszük, hogy a zóna filerendszere UFS, és használjuk a find parancs kapcsolóit, hogy szűrt keresés hajtson végre – és ezzel kihagyjuk LOFS (a global zónával közös) mountpointokat.

Symantec (Veritas) NetBackup

A NetBackup tud futó zónát is menteni, természetesen be kell állítani hogy a közös LOFS filerendszereket hagyja ki, ami a zóna konfigurációja során is be lett állítva.

Legato NetWorker

A NetWorker tud futó zónát is menteni, természetesen be kell állítani hogy a közös LOFS filerendszereket hagyja ki, ami a zóna konfigurációja során is be lett állítva.

Zónák Patchelése

Nagy Zóna Patchelése

Egy nagy zóna esetében A global zóna és a local (nagy) zóna teljesen különálló rendszerfile-okból áll, és mindkét helyen minden file és filerendszer írható és olvasható. Tehát:

  • A nagy zónába lépve, bármilyen patch telepíthető a patchadd(természetesen kivételek a kernel patch-ek).
  • A global zónába lépve, bármilyen patch telephíthető csak a global zónába a patchadd -G paranccsal.
  • A global zónába lépve, bármilyen patch telepíthető egyszerre a global zónára és az összes local zónára a patchaddparancs segítségével.

!!!Figyelem!!! A harmadik, a teljes rendszer patchelése és összes local zóna esetében figyelni kell arra, hogy amikor kiadjuk a patchadd parancsot, az el fogja indítani az olyan zónákat is, amik aktuálisan nem futnak. Ezek single user módban el fognak indulni, majd végrehajtódik rajtuk automatikusan a patch, végül visszatér a zóna az eredeti állapotba.

Ezzel persze nem megvalósítható, hogy külön zónáknak különböző patch szintjei legyenek, mert a global zóna szinkronba fogja tartani ezeket. Nem is ajánlja senkinek a SUN hogy különböző patch szinteket akarjon használni zónák alatt.

Kis Zóna Patchelése:

Egy kis zóna esetén ugye vannak read-only LOFS filrendszerek amik közösek a global zónával. Ezek természetesen a local zóna esetében nem módosíthatóak, így különleges helyzetek állnak elő.

  • A kis zónába lépve, egy olyan patch se telepíthető, ami az /usr alatt akarna bármit módosítani
  • A global zónába lépve, minden patch ami patchadd -G paranccsal telepítünk a kis zóna közös read-only LOFS filerendszereit is frissíteni fogja, ha akarjuk ha nem.
  • A global zónába lépve, minden patch ami patchadd paranccsal telepítünk az települni fog a global illetve az összes local zónába megfelelőképp.

!!! FONTOS !!! A második esetben ugyan csak a global zónát patcheljük meg, viszont mivel a kis zóna a főbb rendszer könyvtár struktúráját csak read-only LOFS filerendszerként kapja ezért érinti a kis zónákat is. Sajnos a /var nem fog ezáltal frissülni, így számolni kell esetleges problémákkal. Ezért ebben az esetben ezt a módszert nem ajánlja a SUN. A harmadik módszer az alapvetően elfogadott a kis zónák esetében.

Solaris Zona Parancsok

A Solaris 10 zónákhoz kapcsolódóan megjelent pár zónakezeléshez használatos parancs, illetve pár meglévő parancsok is meghívhatóak zóna specifikusan.
Erről jöjjön egy rövid összefoglalás a teljesség igénye nélkül.

Zónakezelõ parancsok:

zonecfg – Ezzel a paranccsal hozhatunk létre új zónát, illetve módosíthatjuk a már elkészült zónák konfigurációját. Három féle módon tudjuk használni:

  • 1. zonecfg -z
    A zóna konfigurálást végezhetjük el egy CLI segítségével.
  • 2. zonecfg -z
    Parancssoros üzemmód. Pl: zonecfg -z info
  • 3. zonecfg -z -f
    Ha egy file-ban felsoroljuk azokat a parancsokat ugyanabban a sorrendben, ahogy azt a CLI-ben futtatnánk, akkor a -f kapcsolóval villámgyorsan tudunk zónákat gyártani, vagy éppen újrakonfigurálni.

zoneadm
Konfigurált zónáinkat tudjuk vele telepíteni (install)bootolni (boot), listázni (list ), megállítani (halt), és megszüntetni (uninstall)

zlogin
A globális zónából tudunk vele a lokális zónákba belépni. A -C kapcsoló hatására konzol módban csatlakozik a zónához, amibõl a ~. karakterkombinációval tudunk kilépni. Lehetõség van másik escape-szekvenciát is megadni a -e kapcsolóval. A -l USERNAME kapcsolóval adott user nevében lép be.

zonename
Az aktuális zóna nevét írja ki.

Régi parancsok zónás extrákkal

ps
Régi jó barátunk a processzeket kilistázó ps parancs két új kapcsolót kapott: a -z ZONANEVE kapcsolóval az adott zónához tartozó processzekre szűkíthetjük a listát. A -Z kapcsoló hatására pedig a processz listában egy új oszlop jelenik meg, amiben a processzt futtató zóna neve lesz. Természetesen mindkét kapcsoló csak a globális zónában használható. (Illetve lokálisban is, de ott értelemszerûen csak az az egy zóna látszik.)
Ezeken kívül a -o kapcsoló után a zone kulcsszó is megadható kulcsszó lett.

prstat
Itt is a -z ZONANEVE illetve -Z kapcsolókkal bõvült a kínálat. A -z ZONANEVE hatására csak az adott zónához tartozó processzeket listázza a prstat. A -Z már kicsit másképp viselkedik, mint amit a ps-beli mûködésébõl sejtenénk. :) Hatására a processz lista alján egy összegzést ad, hogy zónánként hány processz fut, mekkora az egyes zónák memória, illetve cpu használata.

ptree
Szintén kapott egy -z ZONANEVE kapcsolót, aminek hatására csak az adott zónához tartozó processzekkel foglalkozik.

ifconfig
A zone ZONANEVE kulcsszó hatására az IP címet az adott lokális zónához rendeli hozzá. Természetesen csak a globális zónábol lehet használni.

df
Új kapcsoló: -Z. Csak a globális zónában van értelme. Hatására az összes futó zóna mountolt file rendszereit kilistázza.

pkgadd
A -G kapcsoló hatására csak a globális zónába telepíti az adott csomagot. Alapesetben ugyanis az összes lokális zónába telepít. Ahogy az a fenti patchelés kapcsán már elhangzott.

Zónák Erőforrás kezelése

Ami nagyon nagy újdonság a Solaris Zónák esetében az az operációs rendszer által kontrollált módon végrehajtható erőforrás kezelés, resource control. Nem scripteket kell hack-elni hanem egy meglévő, Solaris által megszokott stílusban tudunk limitációkat adni a zónáknak, vagy épp resrouce-t rendelni hozzá. Ez egy hihetetlen nagy előny, és leegyszerűsíti az adminisztrációt.

Akkor jöjjön a teljesség igénye nélkül néhány fontosabb resource felsorolása egy-egy példával:

dedicated-cpu
ncpus, importance

Solaris 10 8/07: Megadhatjuk a zónához rendelt CPU-k számát(ncpus) és opcionálisan a fontosságát (importance). A következő példa egy ilyet mutat meg importance beállításával

    zonecfg:my-zone> add dedicated-cpu
    zonecfg:my-zone:dedicated-cpu> set ncpus=1-3
    zonecfg:my-zone:dedicated-cpu> set importance=2
    zonecfg:my-zone:dedicated-cpu> end

capped-cpu
ncpus

Itt is CPU-k számát kell megadnununk, de míg a dedicated-cpu-nál hozzá dedikálunk CPU-kat, itt csak egy felső korlátot adunk meg.

    zonecfg:my-zone> add capped-cpu
    zonecfg:my-zone:capped-cpu> set ncpus=3.5
    zonecfg:my-zone:capped-cpu> end

capped-memory
physical, swap, locked

Limitálhatjuk a zóna memória méretét. Megadhatjuk a fizikai, swap és lockolt memória méretét. Mind opcionális, de legalább egyet meg kell adnunk közülük ha ezt akarjuk definiálni.

    zonecfg:my-zone> add capped-memory
    zonecfg:my-zone:capped-memory> set physical=50m
    zonecfg:my-zone:capped-memory> set swap=100m
    zonecfg:my-zone:capped-memory> set locked=30m
    zonecfg:my-zone:capped-memory> end

fs
dir, special, raw, type, options

Az FS erőforrásban definiálhatunk egy paramétert amivel tárterületet adunk a zonánk számára. A következő paraméterek megadásával tudjuk ezt a resource-t definiálni:

dir

Egy filesystem mountpoint megadása a zónában.

special

Block device megadása vagy a a global zone mountpointjának a megadása.

raw

Speciális raw device megadása amin előtte mindenképp egy fsck-t kell futtatnunk.

type

Filesystem típusa

options

Bármilyen opció amit mountolásnál (direktbe egy mount parancs esetében) megadnánk ehhez a filesystemhez.

A következő péda a global zonában elérhető /dev/dsk/c0t0d0s2 disk device-t teszi elérhetővé a /mnt folderben a local zónánk számára. A fenti device megfeleli slice-án előtte fsck-t futtattunk. A filesystem UFS-re van formázva. Mount opcióként a nodevices és logging van megadva.

    zonecfg:my-zone> add fs
    zonecfg:my-zone:fs> set dir=/mnt
    zonecfg:my-zone:fs> set special=/dev/dsk/c0t0d0s2
    zonecfg:my-zone:fs> set raw=/dev/rdsk/c0t0d0s2
    zonecfg:my-zone:fs> set type=ufs
    zonecfg:my-zone:fs> add options [nodevices,logging]
    zonecfg:my-zone:fs> end

A következő példában egy global zónában definiált ZFS volume-t definiálunk a local zóna számára:

   zonecfg:my-zone> add fs
   zonecfg:my-zone:fs> set type=zfs
   zonecfg:my-zone:fs> set special=tank/zone/zion
   zonecfg:my-zone:fs> set dir=/export/shared
   zonecfg:my-zone:fs> end

inherit-pkg-dir
dir

Az itt meghatározott könyvtár a global zónából read-only módban lesz élérhető a local zóna számára.

    zonecfg:my-zone> add inherit-pkg-dir
    zonecfg:my-zone:inherit-pkg-dir> set dir=/opt/sfw
    zonecfg:my-zone:inherit-pkg-dir> end

net
address, physical, defrouter

Egy shared, osztott hálózati cím definiálásával a zónánk számára definiált ip cím egy új IP aliasként (virtuális IP címként) fog megjelenni a global zónában. Ezt lehet a következő példában látni

    zonecfg:my-zone> add net
    zonecfg:my-zone:net> set physical=hme0
    zonecfg:my-zone:net> set address=192.168.0.1
    zonecfg:my-zone:net> end

Az exklúziv kiajánláskor semmilyen virtuális device nem létezik, hanem mi a global zónában elérhető fizikai eszközt egy az egyben átadjuk a zónánk számára.

    zonecfg:my-zone> set ip-type=exclusive
    zonecfg:my-zone> add net
    zonecfg:my-zone:net> set physical=bge32001
    zonecfg:my-zone:net> end

device
match

A követkő példa a /dev/pts device-okat elérhetővé teszi a zóna számára.

    zonecfg:my-zone> add device
    zonecfg:my-zone:device> set match=/dev/pts*
    zonecfg:my-zone:device> end

Zóna mozgatása két külön fizikai rendszer global host között

Először is az itteni megoldás feltételezi azt, hogy a zónák egy közös, shared storage-n találhatóak, és mindkét global zóna, azaz fizikai Solaris gép hozzáfér a zóna adatfileaihoz. (Persze kiváltható ez a közös storage azzal is ha a tároló disket, pendrive-t lecsatoljuk az egyik rendszerről majd a másikba felcsatoljuk).

host1# zoneadm -z my-zone halt
host1# zoneadm -z my-zone detach
host2# zonecfg -z my-zone
my-zone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:my-zone> create -a /export/zones/my-zone
zonecfg:my-zone> commit
zonecfg:my-zone> exit

host2# zoneadm -z my-zone attach

1. Leállítjuk a zónát. Nagyon fontos, hogy futó zónát nem lehet migrálni.
2. Az eredeti global hoston a zoneadm -z ZONANEVE detach paranccsal lecsatoljuk
3. A második global zónán, ahova ugye át kívánjuk vinni, ott létre kell hozni a zóna konfigurációs file-ját.
4. Mivel még nem létezik a create -a ZONA_PATH paranccsal létrehozhatunk egy alapot, vagy szépen kézzel beállítgathatjuk, vagy kiexportálva az eredeti hoston a beállításokat zonecfg – ZONANEVE -f ZONECONFIGEXPORT-al átvihetjük az összes beállítását.
5. A vagy alap, vagy beállított, vagy beimportált configot (lényeg, hogy a zónánk nevével és elérési útjával létezzen) kiírjuk file-ba a commit paranccsal.
6. Az exit-el kilépünk a zonecfg menüjéből.
7. Majd zoneadm -z ZONANEVE attach paraccsal felcsatoljuk a zónánkat a másik gépen.

Most lássuk, mi történik akkor, amikor egy olyan global zónára akarjuk fecsatlakoztatni a zónánkat, ahol más csomagok, és patchek érhetőek el?

host2# zoneadm -z my-zone attach
source host packages inconsistent with local host
SUNWgnome-libs (2.6.0,REV=101.0.3.2005.12.06.20.27) version mismatch 
(2.6.0,REV=101.0.3.2005.12.19.21.22)
SUNWudaplr (11.11,REV=2005.12.13.01.06) version mismatch
(11.11,REV=2006.01.03.00.45)
SUNWradpu320 (11.10.0,REV=2005.01.21.16.34) is not installed
SUNWaudf (11.11,REV=2005.12.13.01.06) version mismatch
(11.11,REV=2006.01.03.00.45)
NCRos86r (11.10.0,REV=2005.01.17.23.31) is not installed
local host packages inconsistent with source host
SUNWukspfw (11.11,REV=2006.01.03.00.45) was not installed
SUNWsmcmd (1.0,REV=2005.12.14.01.53) was not installed
source host patches inconsistent with local host
120081 is not installed
118844 is not installed
118344 is not installed
local host patches inconsistent with source host
118669 was not installed
118668 was not installed
116299 was not installed

Nem kell megijedni, egy -F kapcsolóval (zoneadm -z my-zone attach -F) ezen figyelmeztetéseket figyelmen kívül hagyhatjuk és véghezvihetjük a felcsatolást. Persze a végeredményért senki nem vállal felelőséget amennyiben komoly patch eltérések vannak. Ez ugye főleg kis zóna esetén lehet nagy baj, de akár össze nem illő kernelpatchek is boríthatnak egy nagy zónát is. Tehát érdemes rá figyelni.

Zóna Klónozása

Zóna klónozására is van lehetőségünk, amikor is egy teljesen beállított feltelepítet, beconfigurált rendszert szeretnénk duplikálni, és nem kívánjuk az egész procedúrát végigvinni, csupán lemásolni. A következő képpen történik:

# zonecfg -z zone1 export > zone2.cfg
# vi zone2.cfg
# zonecfg -z zone2 -f zone2.cfg
# zoneadm -z zone1 halt
# zoneadm -z zone2 clone zone1
Cloning zonepath /export/zones/zone1...
This took around 5 minutes to clone a 1GB zone (see notes below)

# zoneadm list -vc
ID NAME STATUS PATH
0 global running /
- zone1 installed /export/zones/zone1
- zone2 installed /export/zones/zone2

# zoneadm -z zone1 boot
# zoneadm -z zone2 boot
# zoneadm list -vc
ID NAME STATUS PATH
0 global running /
5 zone1 running /export/zones/zone1
6 zone2 running /export/zones/zone2

# zlogin -C zone2

1. Ki kell exportálni file-ba a klónozni kívánt zóna konfigurációját.
2. Meg kell változtatni alapvető elemeket a configban. Ezt megtehetjük az exportált file editálásával vagy importálás után a zonecfg segítségével.
3. A zonecfg -z zone2 -f zone2.cfg paranccsal beimportáljuk a meglévő és módosított configunkat és ezzel létrehozzuk a klónunk konfigurációját
4. Állítsuk le, illetve bizonyosodjuk meg arról, hogy a klónozandó gépünk nem fut. Nem lehet futó zónát klónozni.
5. A zoneadm -z zone2 clone zone1 paranccsal indítsuk el a klónozást. A rendszer meg fogja becsülni a szókséges időt is informál a másolandó adat méretéről is.
6. Amint kész kérjük le zonadm list -cv paranccsal a zónák állapotát.
7. Indítsuk el őket a zoneadm -z ZONANEVE boot parancsokkal.
8. Majd ne feledkezzünk meg arról, hogy zlogin -C ZONANEVE parancsal lépjünk be is. Ez nagyon fontos!

Remélem e áttekintő valamelyest engedett bepillantást a Solaris Zónák lelki világába. Arról is, hogy Linux és BSD-vel ellentétben mennyivel kézenfekvőbb és egyszerűbb a kezelésük.

Solaris 10 Zónák” bejegyzéshez 4 hozzászólás

  1. Nagyon jó dokumentáció lett.
    Csak a zfs-en lévő a zónák mentését tenném még hozzá.

    részlet a zpool history ból:
    2010-04-16.00:00:02 zfs snapshot -r rpool/webzona@zfs-auto-snap:daily-2010-04-16-00:00

    A mentés:
    pfexec zfs send rpool/webzona/ROOT/zbe@zfs-auto-snap:daily-2010-04-16-00:00 > /backups/mentes.img

    A visszaállitás:
    pfexec zfs restore rpool/webzona/ROOT/zbe < /backups/mentes.img

    Konkluzió:
    A zbe szelet birtokában más rendszerre is átvihető az adott zóna a feltétel csak az, hogy a rendszereken ugyanaz a verzió és architektúra legyen. Tehát klónozás és biztonsági mentés funkciót is betölt a technika.

    A leirás naggyából passzol OpenSolaris rendszerre is annyi megkötéssel, hogy a Sparse és a whoole zónák helyett 1 "IPKG" tipusu zóna használható

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük