הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
וירטואליזציה והשימוש הלא-נכון
בזמן האחרון, טכנולוגיית וירטואליזציה תופסת תאוצה לא רק בסביבה ארגונית אלא גם על תחנות עבודה ומחשבים ביתיים. אם זה בגלל ריבוי פלטפורומת שמספקות תמיכה בוירטואליזציה: VMWare Server שהפך לחינמי, qemu שעובד היום עם kvm או kqemu ששוחרר לאחרונה תחת רישיון חופשי. אם זה מדובר בשחקן חדש אבל מבטיח כמו VirtualBox או פתרון מעניין כמו Xen. אפשרויות וירטואליזציה נכנסות לתודעת משתמשים "מתקדמים" וכתוצאה מכך גם השימוש בה גובר. הרי זה מאוד מפתה לנסות כמה מערכת בלי DualBoot ובלי לצאת מסביבת העבודה רגילה. להכנס לכמה דקות ל-XP, אפילו בלי לסגור את הדפדפן שלך. לעשות פיתוח ובדיקות בכמה סביבות שונות במקביל.
כמו שזה קורה עם טכנולוגיה החדשה, בא גם השימוש הלא נכון בה -- מנסים להרוג ייתושים עם פטישי אוויר.
אני אביא מספר דוגמאות, אחת שלי ושאר של אחרים שימחישו את הבעיה.
שרת וירטואלי בעזרת Xen.
בעקבות הדרישות להרצת אתר אינטרנט על מחשב ביתי, רציתי להבטיח כי האתר ירוץ על מכונה וירטואלית נפרדת, כדי שכל הגישה מבחוץ תעבור דרך "קופסה" שמאובטחת היטב. כמובן, אחד הרעיונות הראשונים היה -- להתקין מכונה וירטואלית, להריץ בא את השרת. רק מה הבעיה? מסתבר ש-Xen מאוד לא ידידותי לפתרונות וירטואליזציה אחרים כמו VMWare או VirtualBox ופשוט לא מאפשר הרצה שלהם על קרנל עם תמיכה ב-xen. בנוסף לכך, הדרייבר של nVidia סירב לעלות בלי שהופעל עליו patch. לאחר הסתכלות יותר מעמיקה, נשארתי עם פתרונות של qemu, virtual box או VMWare Server. שלא היו שונים מהותית מ-Xen. אבל בכל זאת, המשחקים עם Xen גרמו לי לחשוב: "האם זה נכון להשתמש כאן בוירטואליזציה כפישהי?"
כאן צפריר בא לעזרתי והציע linux-vserver. פתרון של "כמעט וירטואליזציה" ותיק ואמין -- הרצת מכונה וירטואלית על קרנל מקורי -- משהו דומה ל-chroot או jail של BSD, רק יותר מתוחכם. זה חוסך בזבוז משאבים משמעותי: זכרון וירטואלי, דיסק, קרנל נוסף. יותר מזה, כל מה שמתבזבז, זה בדיוק את מה שאני רוצה -- מספר תהליכים ייעודים לשרת וירטואלי כמו Apache ו-MySQL. אחרי בדיקה מעמיקה, מצאתי שזה בדיוק פתרון שאהיה מרוצה ממנו.
באותה מידה, לעתים, יותר קל ונוח להשתמש ב-chroot פשוט במקום מכונה וירטואלית מלאה. פעם, אחד הפתרונות הנפוצים היה שימוש ב-debootstrap לצורך הפעלת יישומי 32 ביט בסביבות 64 ביט. אפשר היה גם להפעיל מכונה וירטואלית, אבל chroot עשה את העבודה בצורה טובה.
הפעלת יישומי Windows במכונה וירטואלית.
יש כאן שתי בעיות:
- יישומים רבים ניתן להפעיל בעזרת Wine, Cedega או Cross X Office. זה נותן:
- אינטגרציה מלאה עם המערכת -- תיקיית הבית, חלונות ועוד.
- מאפשר הרצת יישומים במהירות כמעט טבעית.
- לא מבזבז משאבים יקרים
- יש רכיבים שלא ניתן לדמות ברמת הטכנולוגיה העכשווית, למשל:
- plug & play אמיתי
- האצה תלת מימדית.
אם יש לך משחק שמאוד מתחשק לך לשחק, אז כדאי לבדוק אם wine או cedega תומכים בו. בצורה זו, הצלחתי להפעיל משחקים רציניים כמו AH2 או IL2 שאין להם שום תחליפים חופשיים ראויים לשמם. לעומת זאת, הרצה במכונה וירטואלית לא תביא לפתרון, מכיוון שתמיכה בהאצה תלת-מימדית קיימת רק ב-VMWare ועדיין ניסיונית.
זה נכון גם עבור יישומים מסויימים שניתן להריץ אותם בצורה חלקה על Wine או CXOffice, למשל MS Word. ראיתי מספר מקרים שאנשים ניסו להרים מכונה וירטואלית שלמה רק בגלל MS Word, למשל כאן. זה מיותר לחלוטין לוותר על אינטגרציה מלאה עם סביבת העבודה על מנת לכתוב מסמך קצרצר.
יותר מזה, לפעמים זה בלתי אפשרי להריץ מכונה וירטואלית אם מדובר במחשב ישן יותר. למשל, היה לי הרבה יותר קל להריץ יישום ספציפי שנדרש באוניברסיטה דרך wine מאשר להריץ מכונה וירטואלית על מחשב נייד ישן עם 256MB של זכרון.
סיכום
וירטואליזציה זו טכנולוגיה שלאט-לאט חודרת גם לשולחן העבודה הביתי, אבל יש לה מגבלות רבות כמו אינטגרציה עם סביבת העבודה, ביצועים, שימוש מיותר במשאבי המחשב. לכן, לפני שרצים להרים עוד מכונה וירטאולית, תבדקו, אולי יש פתרונות אחרים?
תגובות
גם Wine הוא סוג של וירטואליזציה, אבל הנקודה ברורה. כבר נתקלתי במקרים של עודף מכונות וירטואליות, כאשר התוצאה היא צורך לתחזק מספר גדול יותר של מערכות הפעלה, למרות הצימצום בחומרה.
עם זאת, אני חסיד של מכונות וירטואליות לצורך נוסף: הפרדה בין מערכת ההפעלה לחומרה. קל יותר לשדרג, לגבות ולנייד מערכת וירטואלית מאשר מערכת פיזית.
לגבי Wine. זה לא ממש סוג של וירטואליזציה, זה מימוש של Win32API מחדש. זה שבמקום לעשות link עם dll של Windows אתה עושה link עם dll של wine זה לא ממש משנה, אתה עדיין מריץ את התוכנה שלך בתור תהליך Linux-י על כל דבר. אם אתה זוכר אז אחד הפירושים של wine הוא Wine Is Not Emulator.
לגבי, שימוש במכונות וירטואליות, אני בהחלט מסכים שזו טכנולוגיה מעולה. אני פיתחתי "קזית 3" על qemu, בדקתי עשרות מערכות על מכונות וירטואליות שונות. זו בהחלט טכנולוגיה נהדרת. פה אין כל ספק.
עוד הערה קטנה,
יש הבדל משמעותי בשימוש במערכות וירטואליזציה בסביבה ארגונית שבה יש לך מכונה אחת עבוד מספר שרתים שווי ערך, לבין שימוש בוירטואליזציה בתחנות עבודה/מחשבים ביתיים, כאשר שם היא מאפשרת להוסיף עוד מערכת "נחותה יותר" לפי הצורך והעבודה עיקרית עדיין מתבצעת במערכת רגילה.
למה צריך וירטואליזציה להרצת שרת?
אנשים שוכחים, אבל יש כלי מצוין בלינוקס שנקרא chroot ואז אפשר להריץ יישומים בסביבה סגורה משל עצמם וגם של הפצות אחרות.
chroot מגן על קבצים בלבד, אבל זה לא מספיק.
לדוגמה אתה יכול לשלוח סיגנלים מתוך chroot, למשל kill. לכן, זה לא בדיוק בריא עבור "קופסה" מאובטחת.
עוד פתרון וירטואליזציה שלא הזכרת - OpenVZ תבדוק אם הוא מתאים לדרישות שלך.
נכון, אני לא בדקתי אותו, הוא אמור להיות די דומה ל-linux-vserver.
בכל אופן, כרגע vserver נראה עובד ומספק את הצרכים שלי, זה מספיק.
בנוסף, בדביאן אין קרנל מוכן כמו שהוא מוכן עבור vserver, וממש לא בא לי לקמפל אחד ;)
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.