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:
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.
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:
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.
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.
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ó