**OpenVZ** (קיצור של: **Open Virtuozzo**) היא טכנולוגיית וירטואליזציה ברמת מערכת הפעלה עבור לינוקס. היא מאפשרת לשרת פיזי להריץ מספר מופעי מערכת הפעלה מבודדים, הנקראים קונטיינרים, שרתים וירטואליים פרטיים (VPS) או סביבות וירטואליות (VEs). טכנולוגיית OpenVZ דומה ל- Solaris Containers ול- LXC.

OpenVZ בהשוואה לטכנולוגיות וירטואליזציה אחרות
---------------------------------------------

בעוד שטכנולוגיות וירטואליזציה כגון VMware, Xen ו- KVM מספקות וירטואליזציה מלאה ויכולות להריץ מספר מערכות הפעלה וגרסאות ליבה שונות, OpenVZ משתמשת בליבת לינוקס אחת ולכן יכולה להריץ רק לינוקס. כל מיכלי OpenVZ חולקים את אותה ארכיטקטורה וגרסת ליבה. זה יכול להיות חיסרון במצבים שבהם נדרשות גרסאות קרנל שונות מזו של המארח. עם זאת, מכיוון שאין לו תקורה של Hypervisor אמיתי, הוא מהיר ויעיל ביותר.

הקצאת זיכרון עם OpenVZ היא "רכה" בכך שזיכרון שאינו בשימוש בסביבה וירטואלית אחת יכול לשמש אחרים או לאחסון מטמון בדיסק. בעוד שגרסאות ישנות של OpenVZ השתמשו במערכת קבצים נפוצה (כאשר כל סביבה וירטואלית היא רק ספריית קבצים המבודדת באמצעות chroot), הגרסאות המאוחרות יותר של OpenVZ מאפשרות לכל מיכל מערכת קבצים משלו.

ליבה
----

ליבת OpenVZ היא ליבת לינוקס, ששונתה כדי להוסיף תמיכה בקונטיינרים של OpenVZ. הליבה שהשתנה מספקת וירטואליזציה, בידוד, ניהול משאבים ונקודות ביקורת. החל מ-vzctl 4.0, ליבת OpenVZ יכולה לעבוד עם ליבות Linux 3.x לא משודרגות (unpatched), עם מערך תכונות מופחת.

### וירטואליזציה ובידוד

כל קונטיינר הוא ישות נפרדת, ומתנהג במידה רבה כפי ששרת פיזי היה מתנהג. לכל אחד יש:

קבצים
ספריות מערכת, יישומים, וירטואליזציה `/proc` ו- `/sys`, מנעולים וירטואליים וכו'
משתמשים וקבוצות
לכל קונטיינר יש משתמש שורש משלו, כמו גם משתמשים וקבוצות אחרות .
עץ תהליכים
קונטיינר רואה רק את התהליכים שלו (החל מ-init). PIDs הם וירטואליזציה, כך PID init הוא 1 כפי שהוא צריך להיות.
רשת
התקן רשת וירטואלי, המאפשר למיכל לקבל כתובות IP משלו, כמו גם קבוצה של netfilter (`iptables`) וכללי ניתוב
התקנים
במידת הצורך, ניתן להעניק לכל קונטינר גישה להתקנים אמיתיים כמו ממשקי רשת, יציאות טוריות, מחיצות דיסק וכו'
אובייקטי IPC
זיכרון משותף, סמפורים, הודעות.
### ניהול משאבים

ניהול משאבי OpenVZ מורכב מארבעה רכיבים: מכסת דיסק דו-מפלסית, מתזמן CPU "הוגן", מתזמן קלט/פלט של דיסקים. ניתן לשנות משאבים אלו במהלך זמן הריצה של קונטיינר, ולבטל את הצורך באתחול מחדש.

#### מכסת דיסקים דו-מפלסית

לכל קונטיינר יכולות להיות מכסות דיסק משלו, הנמדדות במונחים של בלוקים של דיסק ואינודים (בערך מספר קבצים). בתוך המכולה, ניתן להשתמש בכלים סטנדרטיים כדי להגדיר מכסות דיסק של UNIX למשתמש ולכל קבוצה.

#### מתזמן CPU

מתזמן ה-CPU ב-OpenVZ הוא יישום דו-שלבי של אסטרטגיית תזמון שיתוף הוגן.

ברמה הראשונה, המתזמן מחליט לאיזה קונטיינר יש לתת לפס זמן של ה-CPU, בהתבסס על ערכי **יחידות מעבד לכל קונטיינר.** ברמה השנייה מתזמן לינוקס הסטנדרטי מחליט איזה תהליך להפעיל באותו קונטיינר, תוך שימוש בסדרי עדיפויות סטנדרטיים של תהליכי לינוקס.

אפשר להגדיר ערכים שונים עבור המעבדים בכל קונטיינר. זמן מעבד אמיתי יתחלק באופן יחסי לערכים אלו.

בנוסף לאמור לעיל, OpenVZ מספק  דרכים:

* להגדר מגבלות מעבד קפדניות, כגון 10% מזמן המעבד הכולל ( `--cpulimit` )
* הגבלת מספר ליבות המעבד הזמינות למיכל ( `--cpus` )
* לאגד מיכל לקבוצה מסוימת של מעבדים ( `--cpumask` )

#### מתזמן I/O

בדומה מתזמן מעבד שתוארו לעיל, I / O מתזמן ב OpenVZ הוא גם דו-מפלסי, ניצול Jens Axboe של CFQ I / O מתזמן על הרמה השנייה שלו.

לכל קונטיינר מוקצית עדיפות I/O, והמתזמן מחלק את רוחב הפס הזמין של I/O בהתאם לעדיפויות שהוקצו. לכן אף קונטיינר אחד לא יכול להרוות ערוץ קלט/פלט.

#### משתמשי Beancounters

User Beancounters הוא קבוצה של מונים, הגבלות וערבויות לכל קונטיינר, שנועדו למנוע מקונטיינר בודד למנף את משאבי המערכת. בקרנלים הנוכחיים של OpenVZ (מבוסס RHEL6 042stab\*) ישנם שני פרמטרים עיקריים ( **RAM** ו- **swap**, או **physpages** ו- **swapages** ), ואחרים הם אופציונליים. 

משאבים אחרים הם בעיקר זיכרון ואובייקטים שונים בתוך הליבה כגון מקטעי זיכרון משותפים בתקשורת בין-תהליכית ומאגרי רשת. ניתן לראות כל משאב מתוך /proc/user\_beancounters ויש לו חמישה ערכים המשויכים אליו: שימוש נוכחי, שימוש מקסימלי (למשך חייו של מיכל), מחסום, מגבלה ומונה כישלונות. המשמעות של מחסום וגבול תלויה בפרמטרים; בקיצור, אפשר לחשוב על אלה כגבול רך וגבול קשה. אם משאב כלשהו פוגע במגבלה, מונה הכשלים עבורו גדל. זה מאפשר לבעלים לזהות בעיות על ידי ניטור /proc/user\_beancounters בקונטיינר.

### מחסומים והגירה חיה

תכונת העברה ונקודת ביקורת חיה שוחררה עבור OpenVZ באמצע אפריל 2006. זה מאפשר להעביר קונטיינר משרת פיזי אחד לאחר מבלי לסגור את הקונטיינר. התהליך ידוע כ-checkpointing: קונטיינר מוקפא וכל מצבו נשמר בקובץ בדיסק. לאחר מכן ניתן להעביר את הקובץ הזה למכונה אחרת וניתן לבטל שם קונטיינר (לשחזר); העיכוב הוא בערך כמה שניות. מכיוון שהמצב בדרך כלל נשמר לחלוטין, הפסקה זו עשויה להיראות כהשהייה חישובית רגילה.

מגבלות
------

כברירת מחדל, OpenVZ מגביל גישה לקונטיינר להתקנים פיזיים אמיתיים (ובכך הופכת קונטיינר לבלתי תלוי בחומרה). מנהל OpenVZ יכול לאפשר גישת קונטיינר להתקנים אמיתיים שונים, כגון כונני דיסקים, יציאות USB, התקני PCI או כרטיסי רשת פיזיים.

/dev/loopN מוגבל לעיתים קרובות בפריסות (כיוון שהתקני לולאה משתמשים בשרשורי ליבה שעלולים להיות בעיית אבטחה), מה שמגביל את היכולת לטעון תמונות דיסק. דרך לעקוף היא להשתמש ב- FUSE .

OpenVZ מוגבל לספק רק חלק מטכנולוגיות VPN המבוססות על PPP (כגון PPTP/L2TP) ו-TUN/TAP. כאשר IPsec נתמך בתוך קונטיינרים מאז הקרנל 2.6.32.

ממשק משתמש גרפי בשם EasyVZ נוסה בשנת 2007, אך הוא לא התקדם מעבר לגרסה 0.1. עד גרסה 3.4, Proxmox VE יכול לשמש כסביבת וירטואליזציה של שרת מבוססת OpenVZ עם ממשק משתמש ממשק, אם כי גרסאות מאוחרות יותר עברו ל-LXC .

קישורים חיצוניים
----------------

ויקישיתוף מדיה וקבצים בנושא **OpenVZ** בוויקישיתוף
* 

* אתר האינטרנט הרשמי של OpenVZ

הערות שוליים
------------

1. ↑
2. ↑
3. ↑  Kolyshkin, Kir (6 באוקטובר 2012). "OpenVZ turns 7, gifts are available!". *OpenVZ Blog*. נבדק ב-2013-01-17. `{{cite web}}`:  (עזרה)
4. ↑  vzctl(8) man page, CPU fair scheduler parameters section,
5. ↑
6. ↑  vzctl(8) man page, Device access management subsection,
7. ↑  vzctl(8) man page, PCI device management section,
8. ↑  vzctl(8) man page, Network devices section,
9. ↑  EasyVZ: Grafische Verwaltung für OpenVZ. Frontend für freie Linux-Virtualisierung