نصب ماشین مجازی Qemu-KVM بر روی کامپیوتر خانگی با لینوکس. استفاده از KVM برای ایجاد ماشین های مجازی روی سرور Kvm ایجاد یک ماشین مجازی اوبونتو

در این مقاله مقدماتی به طور خلاصه در مورد همه صحبت خواهم کرد نرم افزار، در فرآیند توسعه خدمات استفاده می شود. آنها در مقالات بعدی با جزئیات بیشتر مورد بحث قرار خواهند گرفت.

چرا ؟ این سیستم عاملبرای من نزدیک و قابل درک است، بنابراین هنگام انتخاب توزیع، هیچ عذاب، عذاب یا پرتابی وجود نداشت. هیچ مزیت خاصی نسبت به لینوکس Red Hat Enterprise ندارد، اما تصمیم به کار با یک سیستم آشنا گرفته شد.

اگر قصد دارید به طور مستقل زیرساختی را با استفاده از فناوری‌های مشابه مستقر کنید، به شما توصیه می‌کنم از RHEL استفاده کنید: به لطف مستندات خوب و برنامه‌های کاربردی خوب نوشته شده، اگر نه یک مرتبه بزرگ، مطمئناً دو برابر ساده‌تر خواهد بود. به لطف سیستم صدور گواهینامه توسعه یافته، می توانید به راحتی تعدادی متخصص را پیدا کنید که در سطح مناسب با این سیستم عامل آشنا هستند.

ما دوباره تصمیم گرفتیم استفاده کنیم Debian Squeezeبا مجموعه ای از بسته ها از سید/تجربیو برخی از بسته ها با پچ های ما بکپورت و کامپایل شده اند.
برنامه هایی برای انتشار یک مخزن با بسته ها وجود دارد.

هنگام انتخاب فناوری مجازی سازی، دو گزینه در نظر گرفته شد - Xen و KVM.

همچنین، این واقعیت که تعداد زیادی از توسعه دهندگان، میزبان ها و راه حل های تجاری مبتنی بر Xen وجود داشت در نظر گرفته شد - اجرای یک راه حل مبتنی بر KVM جالب تر بود.

دلیل اصلی اینکه ما تصمیم گرفتیم از KVM استفاده کنیم، نیاز به اجرای ماشین های مجازی با FreeBSD و در آینده با MS Windows است.

برای رانندگی ماشین های مجازیمعلوم شد استفاده از محصولاتی که از API آن استفاده می کنند بسیار راحت است: زیبا, virt-مدیر, virt-install، و غیره.

این سیستمی است که تنظیمات ماشین های مجازی را ذخیره می کند، آنها را مدیریت می کند، آمار آنها را نگه می دارد، اطمینان حاصل می کند که هنگام راه اندازی ماشین مجازیرابط بالا آمد، دستگاه ها را به دستگاه متصل می کند - به طور کلی، یک دسته از آن را انجام می دهد کار مفیدو کمی بیشتر از آن.

البته راه حل کامل نیست. معایب عبارتند از:

  • پیام های خطای کاملا دیوانه کننده
  • ناتوانی در تغییر بخشی از پیکربندی ماشین مجازی در حین پرواز، اگرچه QMP (پروتکل نظارت QEMU) این اجازه را می دهد.
  • گاهی اوقات، به دلایلی ناشناخته، اتصال به libvirtd غیرممکن است - پاسخ به رویدادهای خارجی متوقف می شود.

مشکل اصلی در پیاده سازی سرویس در همان ابتدا محدودیت منابع برای ماشین های مجازی بود. در Xen، این مشکل با کمک یک زمان‌بندی داخلی که منابع را بین ماشین‌های مجازی توزیع می‌کند حل شد - و بهترین چیز این است که توانایی محدود کردن عملیات دیسک نیز پیاده‌سازی شد.

تا زمان ظهور مکانیسم تخصیص منابع هسته، چنین چیزی در KVM وجود نداشت. طبق معمول در لینوکس، دسترسی به این توابع از طریق یک ویژه پیاده سازی شد سیستم فایل cgroup، که در آن با استفاده از معمولی تماس های سیستمی Write()، می‌توانید فرآیندی را به گروه اضافه کنید، وزن آن را به صورت طوطی تعیین کنید، هسته‌ای را که روی آن اجرا شود، مشخص کنید. توان عملیاتیدیسکی که این فرآیند می تواند از آن استفاده کند یا دوباره وزنی به آن اختصاص دهد.

مزیت این است که همه اینها در داخل هسته پیاده سازی می شوند و می توان از آن نه تنها برای سرور، بلکه برای دسکتاپ نیز استفاده کرد (که در معروف "The ~200 Line Kernel Linux Kernel Patch That Wonders" استفاده شد). و به نظر من، این یکی از مهم ترین تغییرات در شاخه 2.6 است، بدون احتساب #12309 مورد علاقه من، و نه فایل سیستم فایل دیگری. خوب، شاید، به جز POHMELFS (اما صرفاً به دلیل نام).

نگرش من نسبت به این کتابخانه ابزار بسیار مبهم است.

از یک طرف چیزی شبیه به این است:

و جمع‌آوری این چیز از منبع، بسیار دشوارتر است: گاهی اوقات به نظرم می‌رسد که لینوکس از ابتدا کمی ساده‌تر از ابتدا ساخته می‌شود.

از طرف دیگر، این یک چیز بسیار قدرتمند است که به شما امکان می دهد تصاویر را برای ماشین های مجازی ایجاد کنید، آنها را تغییر دهید، آنها را فشرده کنید، grub را نصب کنید، جدول پارتیشن را تغییر دهید، فایل های پیکربندی را مدیریت کنید، ماشین های سخت افزاری را به یک محیط مجازی منتقل کنید، ماشین های مجازی را انتقال دهید. از یک تصویر به تصویر دیگر، ماشین‌های مجازی را از تصویر به سخت‌افزار منتقل کنید و صادقانه بگویم، در اینجا تخیل من را کمی ناامید می‌کند. اوه، بله: شما همچنین می توانید یک دیمون را در داخل یک ماشین مجازی لینوکس اجرا کنید و به داده های ماشین مجازی به صورت زنده دسترسی داشته باشید، و همه این کارها را در پوسته، پایتون، پرل، جاوا، ocaml انجام دهید. این کوتاه و دور از ذهن است لیست کاملاز آنچه می توان با آن انجام داد.

جالب اینجاست که بیشتر کدها در زمان مونتاژ و همچنین مستندات پروژه تولید می شوند. Ocaml و perl به طور گسترده مورد استفاده قرار می گیرند. خود کد به زبان C نوشته می‌شود، که سپس در OCaml پیچیده می‌شود و تکه‌های تکراری کد خودشان تولید می‌شوند. کار با تصاویر با راه اندازی یک تصویر سرویس ویژه (دستگاه سوپرمین) انجام می شود که دستورات از طریق کانالی به آن ارسال می شود. این تصویر نجات شامل مجموعه خاصی از ابزارها، مانند parted، mkfs و موارد دیگر مفید برای یک مدیر سیستم است.

اخیراً حتی شروع به استفاده از آن در خانه کردم، زمانی که داده های مورد نیاز خود را از تصویر ناندروید استخراج کردم. اما این نیاز به یک هسته فعال یاف دارد.

دیگر

در زیر چند لینک جالب دیگر برای توضیح نرم افزار مورد استفاده وجود دارد - در صورت علاقه خودتان آن را بخوانید و مطالعه کنید. مثلا،

من این یادداشت را برای نشان دادن می نویسم نصب مرحله به مرحلهو راه اندازی یک ماشین مجازی مبتنی بر KVM در لینوکس. من قبلاً در مورد مجازی سازی نوشتم ، جایی که از فوق العاده استفاده کردم.

الان با مشکل اجاره مواجه شدم. سرور خوببا حجم زیاد حافظه دسترسی تصادفیو حجمی هارد دیسک. اما من نمی‌خواهم پروژه‌ها را مستقیماً روی دستگاه میزبان اجرا کنم، بنابراین آنها را به سرورهای مجازی کوچک جداگانه‌ای که دارای کانتینرهای لینوکس یا داکر هستند، جدا می‌کنم (در مقاله دیگری در مورد آنها صحبت خواهم کرد).

همه هاست های ابری مدرن بر اساس یک اصل کار می کنند، یعنی. یک میزبان روی سخت‌افزار خوب، دسته‌ای از سرورهای مجازی را که ما از آنها به نام VPS/VDS استفاده می‌کردیم، ایجاد می‌کند و آنها را بین کاربران توزیع می‌کند یا این فرآیند را خودکار می‌کند (سلام، DigitalOcean).

KVM (ماشین مجازی مبتنی بر هسته) است نرم افزاربرای لینوکس، از سخت افزار پردازنده سازگار با x86 برای کار با فناوری مجازی سازی Intel VT/AMD SVM استفاده می کند.

نصب KVM

من تمام نقشه های ایجاد یک ماشین مجازی را در سیستم عامل اوبونتو 16.04.1 LTS انجام خواهم داد. برای بررسی اینکه آیا فرآیندهای شما از مجازی سازی سخت افزار پشتیبانی می کنند یا خیر مبتنی بر اینتل VT/AMD SVM، اجرا کنید:

Grep -E "(vmx|svm)" /proc/cpuinfo

اگر ترمینال خالی نباشد، همه چیز مرتب است و KVM قابل نصب است. اوبونتو رسما فقط از هایپروایزر KVM (بخشی از هسته لینوکس) پشتیبانی می کند و استفاده از کتابخانه libvirt را به عنوان ابزاری برای مدیریت آن توصیه می کند، کاری که در ادامه انجام خواهیم داد.

همچنین می توانید پشتیبانی از مجازی سازی سخت افزار در اوبونتو را با استفاده از دستور زیر بررسی کنید:

در صورت موفقیت، چیزی شبیه به این را مشاهده خواهید کرد:

اطلاعات: /dev/kvm وجود دارد می توان از شتاب KVM استفاده کرد

نصب بسته ها برای کار با KVM:

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

اگر به پوسته گرافیکی سیستم دسترسی دارید، می توانید مدیر رابط کاربری گرافیکی libvirt را نصب کنید:

Sudo apt-get install virt-manager

استفاده از virt-manager بسیار ساده است (سخت تر از VirtualBox نیست)، بنابراین در این مقاله در مورد گزینه کنسول برای نصب و پیکربندی سرور مجازی صحبت خواهیم کرد.

نصب و پیکربندی سرور مجازی

در نسخه کنسول نصب، پیکربندی و مدیریت سیستم، یک ابزار ضروری ابزار virsh (افزونه ای برای کتابخانه libvirt) است. دارای تعداد زیادی گزینه و پارامتر، توصیف همراه با جزئیاترا می توان به صورت زیر بدست آورد:

مرد زیبا

یا با استاندارد "کمک" تماس بگیرید:

Virsh کمک کنید

من همیشه هنگام کار با سرورهای مجازی قوانین زیر را رعایت می کنم:

  1. نگه میدارم تصاویر isoسیستم عامل در فهرست /var/lib/libvirt/boot
  2. من تصاویر ماشین مجازی را در فهرست /var/lib/libvirt/images ذخیره می کنم
  3. من به صراحت به هر ماشین مجازی جدید آدرس IP ثابت خود را از طریق سرور DHCP Hypervisor اختصاص می دهم.

بیایید نصب اولین ماشین مجازی (سرور 64 بیتی اوبونتو 16.04 LTS) را شروع کنیم:

سی دی /var/lib/libvirt/boot sudo wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

پس از دانلود تصویر، نصب را شروع کنید:

Sudo virt-install \ --virt-type=kvm \ --name ubuntu1604\ --ram 1024 \ --vcpus=1 \ --os-variant=ubuntu16.04 \ --hvm \ --cdrom=/var/ lib/libvirt/boot/ubuntu-16.04.1-server-amd64.iso \ --network network=default,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/ubuntu1604. img,size=20,bus=virtio

با ترجمه تمام این پارامترها به "زبان انسانی"، معلوم می شود که ما در حال ایجاد یک ماشین مجازی با سیستم عامل اوبونتو 16.04، 1024 مگابایت رم، 1 پردازنده، یک کارت شبکه استاندارد هستیم (ماشین مجازی به دلیل NAT به اینترنت دسترسی پیدا می کند. ) هارد 20 گیگابایتی.

ارزش توجه به پارامتر را دارد --os-variant، به هایپروایزر می گوید که تنظیمات باید با کدام سیستم عامل سازگار شود.
با اجرای دستور می توان لیستی از گزینه های سیستم عامل موجود را بدست آورد:

Osinfo-query os

اگر چنین ابزاری در سیستم شما نیست، نصب کنید:

Sudo apt-get install libosinfo-bin

پس از شروع نصب، پیام زیر در کنسول ظاهر می شود:

نصب دامنه همچنان در حال انجام است. برای تکمیل مراحل نصب، می توانید دوباره به کنسول متصل شوید.

این یک وضعیت عادی است، ما نصب را از طریق VNC ادامه خواهیم داد.
بیایید ببینیم کدام پورت در ماشین مجازی ما (مثلاً در ترمینال بعدی) افزایش یافته است:

Virsh dumpxml ubuntu1604... ...

پورت 5900، در آدرس محلی 127.0.0.1. برای اتصال به VNC باید از Port Forwarding از طریق ssh استفاده کنید. قبل از انجام این کار، مطمئن شوید که ارسال tcp در دیمون ssh فعال است. برای انجام این کار، به تنظیمات sshd بروید:

Cat /etc/ssh/sshd_config | grep AllowTcpForwarding

اگر چیزی پیدا نشد یا دیدید:

AllowTcpForwarding no

سپس پیکربندی را در آن ویرایش می کنیم

AllowTcpForwarding بله

و sshd را ریبوت کنید.

راه اندازی پورت فورواردینگ

ما دستور را در ماشین محلی اجرا می کنیم:

Ssh -fN -l ورود -L 127.0.0.1:5900:localhost:5900 server_ip

در اینجا ما ارسال پورت ssh از پورت محلی 5900 به پورت سرور 5900 را پیکربندی کرده ایم. اکنون می توانید با استفاده از هر مشتری VNC به VNC متصل شوید. من UltraVNC را به دلیل سادگی و راحتی آن ترجیح می دهم.

پس از اتصال موفقیت آمیز، پنجره خوش آمدگویی استاندارد برای شروع نصب اوبونتو روی صفحه نمایش داده می شود:

پس از اتمام نصب و راه اندازی مجدد معمول، پنجره ورود ظاهر می شود. پس از ورود به سیستم، آدرس IP ماشین مجازی تازه ایجاد شده را تعیین می کنیم تا بعداً آن را ثابت کنیم:

Ifconfig

ما به یاد می آوریم و به دستگاه میزبان می رویم. ما آدرس مک کارت شبکه ماشین مجازی را بیرون می آوریم:

Virsh dumpxml ubuntu1604 | grep "آدرس مک"

بیایید آدرس مک خود را به خاطر بسپاریم:

ویرایش تنظیمات شبکههایپروایزر:

Sudo virsh net-edit default

ما به دنبال DHCP می گردیم و این را اضافه می کنیم:

باید چیزی شبیه این باشد:

برای اینکه تنظیمات اعمال شوند، باید سرور DHCP Hypervisor را مجددا راه اندازی کنید:

Sudo virsh net-destroy پیش فرض sudo virsh net-start سرویس sudo پیش فرض libvirt-bin راه اندازی مجدد

پس از این، ما ماشین مجازی را راه اندازی مجدد می کنیم، اکنون همیشه آدرس IP به آن اختصاص داده شده است - 192.168.122.131.

راه های دیگری برای تنظیم IP ثابت برای ماشین مجازی وجود دارد، به عنوان مثال، با ویرایش مستقیم تنظیمات شبکه در داخل سیستم مهمان، اما در اینجا هر چیزی که دلتان بخواهد است. من فقط گزینه ای را که ترجیح می دهم استفاده کنم را نشان دادم.

برای اتصال به ترمینال ماشین مجازی، اجرا کنید:

Ssh 192.168.122.131

ماشین آماده نبرد است.

Virsh: لیست دستورات

برای دیدن دویدن هاست های مجازی(همه موارد موجود را می توان با افزودن --all به دست آورد):

لیست سودو ویرش

می توانید هاست را مجددا راه اندازی کنید:

Sudo virsh $VM_NAME را راه اندازی مجدد کرد

توقف ماشین مجازی:

توقف Sudo virsh $VM_NAME

اجرای توقف:

Sudo virsh $VM_NAME را نابود می کند

Sudo virsh $VM_NAME را شروع می کند

غیر فعال کردن:

Sudo virsh خاموش شدن $VM_NAME

افزودن به autorun:

Sudo virsh $VM_NAME را به صورت خودکار راه اندازی می کند

اغلب اوقات لازم است یک سیستم شبیه سازی شود تا در آینده از آن به عنوان چارچوبی برای سایر سیستم عامل های مجازی استفاده شود؛ برای این کار از ابزار virt-clone استفاده می شود.

Virt-clone -- help

این یک ماشین مجازی موجود را شبیه سازی می کند و داده های حساس به میزبان، به عنوان مثال، آدرس مک را تغییر می دهد. رمزهای عبور، فایل ها و سایر اطلاعات خاص کاربر در کلون ثابت می مانند. اگر آدرس IP در ماشین مجازی کلون شده به صورت دستی ثبت شده باشد، ممکن است مشکلات دسترسی SSH به کلون به دلیل تداخل ایجاد شود (2 میزبان با IP یکسان).

علاوه بر نصب ماشین مجازی از طریق VNC، امکان استفاده از X11Forwarding از طریق ابزار virt-manager نیز وجود دارد. برای مثال در ویندوز می توانید از Xming و PuTTY برای این کار استفاده کنید.

در اوبونتو استفاده از هایپروایزر KVM (مدیر ماشین مجازی) و کتابخانه libvirt به عنوان ابزار مدیریتی برای آن توصیه می شود. Libvirt شامل مجموعه ای از API های نرم افزاری و برنامه های کاربردی کاربر برای مدیریت ماشین های مجازی (VMs) virt-manager (رابط گرافیکی، رابط کاربری گرافیکی) یا virsh ( خط فرمان، CLI). به عنوان مدیران جایگزین، می توانید از convirt (GUI) یا convirt2 (واسط وب) استفاده کنید.

در حال حاضر، تنها هایپروایزر KVM به طور رسمی در اوبونتو پشتیبانی می شود. این هایپروایزر بخشی از کد هسته عملیاتی است سیستم های لینوکس. برخلاف Xen، KVM از paravirtualization پشتیبانی نمی کند، به این معنی که برای استفاده از آن، CPU شما باید از فناوری های VT پشتیبانی کند. با اجرای دستور در ترمینال می توانید بررسی کنید که آیا پردازنده شما از این فناوری پشتیبانی می کند یا خیر:

اگر در نتیجه پیام زیر را دریافت کردید:

اطلاعات: /dev/kvm وجود دارد می توان از شتاب KVM استفاده کرد

این بدان معناست که KVM بدون مشکل کار خواهد کرد.

اگر در خروجی پیام زیر را دریافت کردید:

CPU شما از پسوندهای KVM پشتیبانی نمی کند شتاب KVM نمی تواند استفاده شود

سپس شما هنوز هم می توانید از ماشین مجازی استفاده کنید، اما سرعت آن بسیار کندتر خواهد بود.

    سیستم های 64 بیتی را به عنوان مهمان نصب کنید

    بیش از 2 گیگابایت رم به سیستم های مهمان اختصاص دهید

نصب و راه اندازی

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

این یک نصب روی سرور بدون X است، یعنی شامل یک رابط گرافیکی نیست. با دستور می توانید آن را نصب کنید

Sudo apt-get install virt-manager

پس از این، آیتم "مدیر ماشین مجازی" در منو ظاهر می شود و با احتمال زیاد، همه چیز کار می کند. اگر هنوز مشکلی وجود دارد، باید دستورالعمل‌های موجود در ویکی انگلیسی را بخوانید.

ایجاد سیستم مهمان

رویه ایجاد مهمان با استفاده از رابط کاربری گرافیکیکاملا ساده

اما حالت متن را می توان توصیف کرد.

qcow2

هنگام ایجاد یک سیستم با استفاده از رابط کاربری گرافیکی به عنوان هارد دیسکپیشنهاد می شود یا یک فایل تصویری موجود را انتخاب کنید یا دستگاه را مسدود کنید، یا ایجاد کنید فایل جدیدبا داده های خام (RAW). با این حال، این تنها فرمت فایل موجود نیست. از بین تمام انواع دیسک های ذکر شده در man qemu-img، منعطف ترین و مدرن ترین آنها qcow2 است. از عکس های فوری، رمزگذاری و فشرده سازی پشتیبانی می کند. قبل از ایجاد یک مهمان جدید باید ایجاد شود.

Qemu-img create -o preallocation=metadata -f qcow2 qcow2.img 20G

به گفته همان مرد qemu-img، تخصیص پیش‌داده (-o preallocation=metadata) دیسک را در ابتدا کمی بزرگ‌تر می‌کند، اما فراهم می‌کند عملکرد بهتردر آن لحظاتی که تصویر نیاز به رشد دارد. در واقع، در این مورد، این گزینه به شما امکان می دهد از یک باگ ناخوشایند جلوگیری کنید. تصویر ایجاد شده در ابتدا کمتر از یک مگابایت فضا اشغال می کند و در صورت نیاز به اندازه مشخص شده افزایش می یابد. سیستم مهمان باید فوراً این اندازه مشخص شده نهایی را ببیند، اما در مرحله نصب ممکن است ببیند اندازه واقعیفایل. به طور طبیعی، نصب کنید HDDدر اندازه 200 کیلوبایت آن را رد می کند. این اشکال مختص اوبونتو نیست، حداقل در RHEL ظاهر می شود.

علاوه بر نوع تصویر، متعاقباً می توانید روش اتصال آن را انتخاب کنید - IDE، SCSI یا Virtio Disk. عملکرد زیرسیستم دیسک به این انتخاب بستگی دارد. پاسخ صحیح قطعی وجود ندارد؛ شما باید بر اساس وظیفه ای که به سیستم مهمان محول می شود انتخاب کنید. اگر سیستم مهمان "برای نگاه کردن" ایجاد شود، هر روشی انجام خواهد شد. به طور کلی، معمولاً I/O است که گلوگاه یک ماشین مجازی است، بنابراین هنگام ایجاد یک سیستم با بارگذاری بالا، باید تا حد امکان با این موضوع مسئولانه برخورد شود.

قبلا در مورد نصب نوشته بودم Qemu-KVM V دبیان. اما به نظر من معلوم شد که اطلاعات ناقص است. به علاوه من برخی تفاوت های ظریف را در نظر نگرفتم. بنابراین، مقاله به روز شده ای را در مورد نصب ماشین مجازی Qemu-KVM مورد توجه شما قرار می دهم. مقاله قدیمیالبته حذفش میکنم

فکر کنم باید توضیح بدم چیه ماشین مجازی، ارزشش را ندارد. احتمالاً این را می دانید (از آنجایی که در حال خواندن این مقاله هستید). اگر نه - . ما مستقیماً روی موضوع تمرکز خواهیم کرد. Qemu-KVMپروژه ای برای ترکیب دو تا از رویایی ترین (به نظر من) فناوری های مجازی سازی کامل است. قمونوعی شبیه ساز کامپیوتری است که از انواع زیادی از معماری های سخت افزاری پشتیبانی می کند. می تواند تقریباً هر سیستم عاملی را برای هر دستگاهی اجرا کند (مثلاً من نسخه های قدیمی را اجرا کردم Mac OS X، که برای پاور پی سی). عیب قمو کند بودن آن به دلیل عدم وجود شتاب سخت افزاری است. و سپس پروژه دیگری به نجات می رسد - KVM. یا ماشین مجازی کرنل. KVM یک فناوری هسته لینوکس است که امکان شتاب سخت افزاری را با مجازی سازی کامل فراهم می کند. نقطه ضعف KVM این است که فقط از معماری x86 پشتیبانی می کند

چرا Qemu-KVM؟ برای لینوکس، این پروژه مجازی سازی توصیه می شود. سریعتر از VirtualBoxو پخش کننده VMware(طبق آزمایشات من)، KVM یک فناوری بومی برای لینوکس است. به علاوه، اگر شما یک محصول خوب دارید کامپیوتر بازیبا دو کارت گرافیک می توانید در Qemu-KVM نصب کنید پنجره هایکی از کارت‌های ویدئویی را در آن بیندازید و راه‌اندازی مجدد به سیستم‌عامل دیگر را فراموش کنید. اگر می خواهید بازی کنید، یک ماشین مجازی با ویندوز راه اندازی می کنید و بازی می کنید. عملکرد 95 درصد عملکرد ویندوز نصب شده روی سخت افزار خواهد بود. اما به نظر من فقط زیباست. در این مورد مقاله جداگانه ای خواهم نوشت. جالب خواهد بود:)

اکنون من برنامه عمل خود را شرح خواهم داد. ابتدا نصب را با استفاده از یک مثال انجام می دهم دبیان 8.2 گنوم 64 بیتی، اگرچه در سایر محیط های گرافیکی تفاوت قابل توجهی وجود نخواهد داشت. ثانیا، من کار با KVM را فقط در حالت گرافیکی توضیح خواهم داد (در نهایت، ما آن را روی سرور نصب نخواهیم کرد). بنابراین، همانطور که معمولا در مورد مجازی سازی سرور انجام می شود، هیچ پایانه، اسکریپت و غیره وجود ندارد. ثالثاً، من به شما توصیه می کنم که اسناد Qemu و KVM را نیز بخوانید (در پایان مقاله پیوندها را ارائه خواهم داد). اگر می خواهید از حداکثر پتانسیل این بسته استفاده کنید، این برای شما بسیار مفید خواهد بود. خب، برنامه عمل ما مشخص است. اکنون مراحل عمل:

  • نصب qemu-kvm;
  • نصب یک مدیر گرافیکی و ابزارهای اضافی؛
  • راه اندازی پل شبکه؛
  • ایجاد فضای ذخیره سازی برای ماشین های مجازی؛
  • نصب سیستم مهمان
ابتدا اجازه دهید بررسی کنیم که آیا رایانه شما از مجازی سازی سخت افزار پشتیبانی می کند یا خیر. برای انجام این کار، دستور را در ترمینال اجرا کنید:

egrep "(vmx|svm)" /proc/cpuinfo

خروجی فرمان باید شامل یکی از این دو باشد vmx، یا svm. اگر آنها وجود ندارند، بررسی کنید که آیا مجازی سازی در BIOS فعال است (به دنبال موارد باشید اینتل VT-iیا مشابه برای AMD). اگر هیچ چیز وجود ندارد، پس شانس شما نیست.

قطعات لازم را نصب کنید:

sudo apt install qemu-kvm bridge-utils libvirt-bin virt-manager

خودتان را به گروه libvirt اضافه کنید:

sudo adduser $USER libvirt

حالا بیایید شبکه را راه اندازی کنیم. برای اینکه همه ماشین های مجازی بتوانند به شبکه دسترسی داشته باشند و با یکدیگر ارتباط برقرار کنند، باید برای هر ماشین مجازی یک پل شبکه و کارت های شبکه مجازی ایجاد کنید. دستگاه های ضربه بزنید). از آنجایی که ما ماشین های مجازی را از رابط گرافیکی نصب خواهیم کرد، نیازی به ایجاد تپ به صورت دستی نیست. Virt Managerهر بار که شروع کنیم این کار را برای ما انجام خواهد داد. ما فقط باید پل را پیکربندی کنیم. ابتدا اجازه دهید مسیریابی را در هسته فعال کنیم:

sudo nano /etc/sysctl.conf

ما به دنبال خط net.ipv4_forward=0 می گردیم و مقدار آن را به تغییر می دهیم 1 . ما همچنین صرفه جویی می کنیم:

sudo sysctl -p

از این به بعد من موارد زیر را فرض می کنم: 1) یکی در رایانه شما وجود دارد کارت LAN، که یک آدرس IP از روتر دریافت می کند. 2) از طریق مودم 3G به اینترنت دسترسی دارید و کارت شبکه شما رایگان است. این گزینه شامل موارد بیشتری است خود ساخته، اما چندین بار تست شده (من خودم روی یکی از دستگاه ها تست کردم). بنابراین، فایل رابط ها را باز کنید:

sudo nano /etc/network/interfaces

محتویات پیش فرض آن عبارتند از:



خودکار لو
iface lo loopback inet

محتوای آن را تغییر می دهیم. برای گزینه اول:

منبع /etc/network/interfaces.d/*

# رابط شبکه Loopback
خودکار لو
iface lo loopback inet

خودکار eth0
کتابچه راهنمای iface eth0 inet

خودکار br0
iface br0 inet static
آدرس 192.168.0.2
دروازه 192.168.0.1
ماسک شبکه 255.255.255.0
شبکه 192.168.0.0
پخش 192.168.0.255
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0

برای گزینه دوم:

منبع /etc/network/interfaces.d/*

# رابط شبکه Loopback
خودکار لو
iface lo loopback inet

خودکار ppp0
iface ppp0 inet wvdial

خودکار eth0
کتابچه راهنمای iface eth0 inet

خودکار br0
iface br0 inet static
آدرس 192.168.0.2
دروازه 192.168.0.1
ماسک شبکه 255.255.255.0
شبکه 192.168.0.0
پخش 192.168.0.255
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
up route del default br0

توجه داشته باشید:اگر نیاز ندارید اتصال خودکاراینترنت از طریق مودم پس از راه اندازی سیستم، ppp0 خودکار را بردارید و
iface ppp0 inet wvdial . در غیر این صورت، مطمئن شوید که هنگام راه اندازی سیستم، مودم در پورت USB قرار داده شده است.

صرفه جویی. حالا برای گزینه با مودم، باید یک برنامه شماره گیر نصب کنید wvdial:

sudo apt نصب wvdial

ویرایش پیکربندی (توجه: یک مودم 3G به عنوان مثال استفاده می شود Beeline. به راحتی می توانید نمونه هایی از تنظیمات مودم های دیگر را در اینترنت پیدا کنید:

sudo nano /etc/wvdial.conf


Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1"IP"،"home.beeline.ru"
حالت احمقانه = 1
ISDN = 0
نوع مودم = مودم USB
PPPD جدید = بله
تلفن = *99#
مودم = /dev/ttyACM0
نام کاربری = beeline
رمز عبور = بیلاین
Baud = 9600
کشور = روسیه
اتصال مجدد خودکار=روشن
DNS خودکار = خاموش
ثانیه های بیکار = 0

صرفه جویی. اکنون مودم بلافاصله پس از بوت شدن سیستم روشن می شود. مسیر line up del default br0 مسیر پیش فرض را از طریق پل حذف می کند. اگر این کار انجام نشود، نمی توانید به اینترنت متصل شوید، زیرا ترافیک از روی پل عبور می کند و نه از طریق مودم 3G.

آخرین مرحله که باید بگوییم دیواره آتش، به طوری که ترافیک را از ماشین های مجازی ما به شبکه و برگشت منتقل می کند. برای انجام این کار، می توانید به دو روش بروید: نوشتن یک اسکریپت با چندین قانون برای iptables، که همراه با سیستم اجرا می شود یا این قوانین را به صورت دستی وارد کرده و ذخیره کنید. از گزینه اول استفاده میکنم برای مورد دوم باید بسته را نصب کنید iptables-persistentو به سادگی قوانین را یکی یکی وارد کنید (با استفاده از sudo). بنابراین. ایجاد یک اسکریپت (در هر ویرایشگر متن). محتوای زیر را در آنجا قرار دهید:

#!/bin/sh

# رابط خروجی را تعریف کنید که جایگزین آدرس (NAT) برای آن اعمال شود
iptables -v -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# همه بسته هایی که از آن به مودم آمده اند را فوروارد می کنیم شبکه جهانی(0.0.0.0/0) به شبکه محلی (192.168.0.0/24)
iptables -v -A FORWARD -i ppp0 -o br0 -s 0.0.0.0/0 -d 192.168.0.0/24 -j ACCEPT

# همه بسته‌های ارسالی را فوروارد کنید شبکه محلی(192.168.0.0/24) به جهانی (0.0.0.0/0)
iptables -v -A FORWARD -i br0 -o ppp0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j ACCEPT

آن را به عنوان ذخیره کنید دروازه.شو حقوق اجرا را بدهید (چه در ویژگی های فایل یا در ترمینال با دستور chmod +x gateway.sh). اکنون می توانید آن را به صورت دستی پس از بوت شدن سیستم راه اندازی کنید یا آن را به راه اندازی اضافه کنید. برای انجام این کار، اسکریپت را به ~/.config/autostart(V مدیر فایلنمایش را روشن کنید فایل های مخفیو دایرکتوری را خواهید دید پیکربندیدر فهرست اصلی شما).

اکنون همه چیز برای نصب ماشین مجازی آماده است. از منوی برنامه، Virt Manager (مدیر ماشین مجازی) را راه اندازی کنید:

روی خط راست کلیک کنید میزبان محلیو انتخاب کنید جزئیات. به برگه بروید ذخیره سازی. ما باید دایرکتوری (یا پارتیشن/دیسک دیسک) را برای ذخیره ماشین های مجازی مشخص کنیم.

در گوشه پایین سمت چپ، روی علامت مثبت کلیک کنید ( یک استخر اضافه کنید، نوع ذخیره سازی و مسیر رسیدن به آن را مشخص کنید.

روی زبانه رابط های شبکه، می توانید بررسی کنید که آیا همه چیز کار می کند یا خیر.

حالا فشار می دهیم فایل - ماشین مجازی جدید. مسیر تصویر دیسک و نوع ماشین مجازی را مشخص کنید. در مرحله بعد مقدار رم آن و تعداد هسته های پردازنده را مشخص می کنیم. در مرحله بعد، فضای ذخیره سازی ما را نشان داده و کلیک کنید حجم جدید. نام را مشخص کنید، نوع را بگذارید qcow2، و اندازه این یک هارد دیسک مجازی خواهد بود. اگر قصد دارید یک سیستم با پوسته گرافیکی و یکسری برنامه نصب کنید، فضای بیشتری (50 گیگابایت) بدهید. در آخرین برگه، کادر را علامت بزنید قبل از راه اندازی تنظیمات را تغییر دهید، بررسی کنید که پل ما به عنوان یک دستگاه شبکه انتخاب شده باشد، هر نامی را برای ماشین مجازی بنویسید و کلیک کنید کامل. پنجره پارامترهای این ماشین مجازی در مقابل شما باز می شود.





به برگه بروید CPU، و تیک بزنید تنظیمات پردازنده میزبان را کپی کنید.

کنار برگه خالص(بعدی)، و همچنین نشان دهید ویتیو. روی زبانه نمایش دادنلطفا نشان بدهید ادویهو روی برگه ویدیو - QXL. به طور معمول این لینک ارائه می دهد حداکثر عملکردطراحی گرافیک، اما اگر می خواهید، می توانید آزمایش کنید. لطفا توجه داشته باشید که برای مهمانان سیستم های ویندوز، نیاز به نصب جداگانه درایور QXL (در خود ویندوز) دارد.


حالا که همه چیز آماده است، در گوشه سمت چپ بالا کلیک کنید نصب را شروع کنید. و سیستم را طبق معمول نصب کنید، با یک استثنا: به محض اینکه نصب کننده شروع به پیکربندی خودکار شبکه کرد، کلیک کنید لغو کنید، و انتخاب کنید شبکه را به صورت دستی پیکربندی کنید. آدرس IP مورد نظر را برای ماشین مجازی (در مورد ما) مشخص کنید 192.168.0.3 )، پوشش زیر شبکه ( 255.255.255.0 ، دروازه (دروازه آدرس میزبان خواهد بود، یعنی 192.168.0.2 ) و سرور DNS (در اینجا فقط Google را مشخص کنید 8.8.8.8 ). همین. دیگر نیازی به انجام کاری نیست. سیستم را نصب و پیکربندی کنید. به طور کلی، این همه است. مراحل توضیح داده شده راهی برای جایگزینی مثلاً VirtualBox با یک جایگزین بهتر است. پس از مطالعه مستندات، متوجه خواهید شد که قابلیت های Qemu-KVM چقدر گسترده است. من عمداً پارامترهای کنسول اضافی و روش‌های راه‌اندازی ماشین‌های مجازی از طریق ترمینال را شرح ندادم، زیرا این همیشه در یک ماشین خانگی ضروری نیست. من یک مقاله جداگانه در این مورد خواهم نوشت، در مورد راه اندازی یک سرور چند منظوره خانگی (که می تواند به عنوان یک سرور ماشین مجازی نیز عمل کند). برای کسانی که به دلایلی متوجه نشدند چه نوشته شده است یا هنوز لحظات غیرقابل درک وجود دارد ، پیشنهاد می کنم ویدیویی را تماشا کنند که در آن توضیح نمی دهم ، اما نحوه نصب و پیکربندی همه این موارد را نشان می دهم. اگر پیشنهاد یا اضافاتی به مقاله دارید، در نظرات بنویسید.

بررسی پشتیبانی هایپروایزر

ما بررسی می کنیم که سرور از فناوری های مجازی سازی پشتیبانی می کند:

cat /proc/cpuinfo | egrep "(vmx|svm)"

در پاسخ باید چیزی شبیه به این دریافت کنید:

پرچم‌ها: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm konstanta_top_tsc aperf mperf pni pclmulqdq dtes64 مانیتور ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm epb tpr_shadow vnmi flexpriority ept vpid dtherm ida arat

در غیر این صورت، به BIOS بروید، گزینه فعال کردن فناوری مجازی سازی را پیدا کنید (نام های مختلفی دارد، به عنوان مثال، Intel Virtualization Technology یا Virtualization) و آن را فعال کنید - مقدار را تنظیم کنید. فعال کردن.

همچنین می توانید با دستور زیر سازگاری را بررسی کنید:

* اگر دستور خطا را برگرداند "فرمان kvm-ok یافت نشد"، بسته مناسب را نصب کنید: apt-get install cpu-checker.

اگر ببینیم:

اطلاعات: /dev/kvm وجود دارد
می توان از شتاب KVM استفاده کرد

این بدان معناست که پشتیبانی سخت افزاری وجود دارد.

آماده سازی سرور

برای راحتی ما، یک دایرکتوری ایجاد می کنیم که در آن داده ها را برای KVM ذخیره می کنیم:

mkdir -p /kvm/(vhdd,iso)

* دو دایرکتوری ایجاد خواهد شد: /kvm/vhdd(برای مجازی دیسکهای سخت) و /kvm/iso(برای تصاویر iso).

بیایید زمان را تنظیم کنیم:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* این دستورمنطقه را مطابق با زمان مسکو تنظیم می کند.

ntpdate ru.pool.ntp.org

* ما با سرور زمان همگام می شویم.

نصب و راه اندازی

ما KVM و ابزارهای مدیریتی لازم را نصب می کنیم.

الف) اوبونتو تا نسخه 18.10

apt-get install qemu-kvm libvirt-bin virtinst libosinfo-bin

ب) اوبونتو بعد از 18.10:

apt-get install qemu-kvm libvirt-daemon-system libvirt-bin virtinst libosinfo-bin

* جایی که qemu-kvm- هایپروایزر؛ libvirt-bin- کتابخانه کنترل هایپروایزر؛ باکیفیت- ابزار مدیریت ماشین مجازی؛ libosinfo-bin- ابزاری برای مشاهده لیستی از گزینه های سیستم عامل که می توانند به عنوان سیستم عامل مهمان استفاده شوند.

بیایید آن را تنظیم کنیم شروع خودکارسرویس:

systemctl libvirtd را فعال کنید

بیایید libvirtd را راه اندازی کنیم:

systemctl start libvirtd

تنظیمات شبکه

ماشین‌های مجازی می‌توانند پشت NAT (که یک سرور KVM است) کار کنند یا آدرس‌های IP را از شبکه محلی دریافت کنند - برای این کار باید یک پل شبکه را پیکربندی کنید. ما دومی را پیکربندی می کنیم.

استفاده كردن اتصال از راه دور، تنظیمات را به دقت بررسی کنید. اگر خطایی رخ دهد، اتصال قطع می شود.

نصب Bridge-Utils:

apt-get install bridge-utils

الف) راه اندازی شبکه در نسخه های قدیمی اوبونتو (/etc/network/interfaces).

فایل پیکربندی را برای پیکربندی رابط های شبکه باز کنید:

vi /etc/network/interfaces

و بیایید آن را به این شکل قرار دهیم:

#face eth0 inet static
# آدرس 192.168.1.24
# netmask 255.255.255.0
#درگاه 192.168.1.1
# dns-nameservers 192.168.1.1 192.168.1.2

خودکار br0
iface br0 inet static
آدرس 192.168.1.24
ماسک شبکه 255.255.255.0
دروازه 192.168.1.1
dns-nameservers 192.168.1.1 192.168.1.2
bridge_ports eth0
bridge_fd 9
پل_سلام 2
bridge_maxage 12
bridge_stp off

* جایی که هر چیزی که نظر داده می شود تنظیمات قدیمی شبکه من است. br0- نام رابط پل ایجاد شده؛ eth0- یک رابط شبکه موجود که از طریق آن پل کار خواهد کرد.

راه اندازی مجدد سرویس شبکه:

systemctl راه اندازی مجدد شبکه

ب) راه اندازی شبکه در نسخه های جدید اوبونتو (netplan).

vi /etc/netplan/01-netcfg.yaml

* بسته به نسخه سیستم، فایل پیکربندی یاملممکن است نام دیگری داشته باشد

بیایید آن را به شکل زیر در بیاوریم:

شبکه:
نسخه: 2
رندر: شبکه ای
اترنت:
eth0:
dhcp4: نادرست
dhcp6: نادرست
wakeonlan: درست است

پل ها:
br0:
macaddress: 2c:6d:45:c3:55:a7
رابط ها:
-eth0
آدرس ها:
- 192.168.1.24/24
gateway4: 192.168.1.1
mtu: 1500
سرورهای نام:
آدرس ها:
- 192.168.1.1
- 192.168.1.2
مولفه های:
stp: درست است
تاخیر رو به جلو: 4
dhcp4: نادرست
dhcp6: نادرست

* V در این مثالما یک رابط پل مجازی ایجاد می کنیم br0; ما به عنوان یک رابط فیزیکی استفاده می کنیم eth0.

اعمال تنظیمات شبکه:

ما بر تغییر مسیر اصرار داریم ترافیک شبکه(به طوری که ماشین های مجازی با رابط شبکه NAT می توانند به اینترنت دسترسی داشته باشند):

vi /etc/sysctl.d/99-sysctl.conf

خط را اضافه کنید:

net.ipv4.ip_forward=1

تنظیمات را اعمال کنید:

sysctl -p /etc/sysctl.d/99-sysctl.conf

ساخت ماشین مجازی

برای ایجاد اولین ماشین مجازی، دستور زیر را وارد کنید:

virt-install -n VM1\
--شروع خودکار\
--noautoconsole\
--network=bridge:br0 \
--ram 2048 --arch=x86_64 \
--vcpus=2 -- میزبان cpu --check-cpu \
--مسیر دیسک=/kvm/vhdd/VM1-disk1.img,size=16 \
--cdrom /kvm/iso/ubuntu-18.04.3-server-amd64.iso \
--graphics vnc,listen=0.0.0.0,password=vnc_password \
--os-type linux --os-variant=ubuntu18.04 --boot cdrom,hd,menu=on

  • VM1 -نام ماشین در حال ایجاد;
  • شروع خودکار -اجازه دهید ماشین مجازی به طور خودکار همراه با سرور KVM راه اندازی شود.
  • noautoconsole -به کنسول ماشین مجازی متصل نمی شود.
  • شبکه -نوع شبکه. در این مثال، ما در حال ایجاد یک ماشین مجازی با رابط "پل شبکه" هستیم. برای ایجاد یک رابط داخلی با نوع NAT وارد کنید --network=default,model=virtio;
  • رم -مقدار رم؛
  • vcpus -تعداد پردازنده های مجازی؛
  • دیسک -دیسک مجازی: مسیر -مسیر به دیسک؛ اندازه -حجم آن؛
  • سی دی رام -درایو مجازی با تصویر سیستم؛
  • گرافیکپارامترهای اتصال به ماشین مجازی با استفاده از کنسول گرافیکی (در این مثال از vnc استفاده می کنیم). گوش بده -درخواست‌های vnc در چه آدرسی دریافت می‌شوند (در مثال ما، همه)؛ کلمه عبور -رمز عبور برای اتصال با استفاده از vnc؛
  • OS-Variant -سیستم عامل مهمان (ما کل لیست را با دستور دریافت کردیم osinfo-query os، در این مثال ما اوبونتو 18.04 را نصب می کنیم.

اتصال به ماشین مجازی

در رایانه ای که قصد داریم از آن با ماشین های مجازی کار کنیم، یک کلاینت VNC، به عنوان مثال، TightVNC را دانلود کرده و آن را نصب کنید.

در سرور وارد می کنیم:

virsh vncdisplay VM1

دستور نشان می دهد که VNC روی کدام پورت برای ماشین VM1 اجرا می شود. من داشته ام:

* :1 به این معنی است که باید 1 را به 5900 - 5900 + 1 = 5901 اضافه کنید.

TightVNC Viewer را که ما نصب کرده ایم راه اندازی کنید و داده های اتصال را وارد کنید:

را کلیک کنید اتصال. وقتی از شما خواسته شد رمز عبوری را که هنگام ایجاد VM مشخص کرده اید وارد کنید ( vnc_password). ما با استفاده از یک کنسول از راه دور به ماشین مجازی متصل خواهیم شد.

اگر رمز عبور را به خاطر نمی آوریم، تنظیمات ماشین مجازی را با دستور زیر باز می کنیم:

و ما خط را پیدا می کنیم:



* در این مثال از رمز عبور برای دسترسی به ماشین مجازی استفاده شده است 12345678 .

مدیریت ماشین مجازی از خط فرمان

نمونه هایی از دستوراتی که ممکن است هنگام کار با ماشین های مجازی مفید باشند.

1. لیستی از ماشین های ایجاد شده را دریافت کنید:

فهرست virsh -- همه

2. ماشین مجازی را فعال کنید:

virsh start VMname

* جایی که VMname- نام ماشین ایجاد شده

3. ماشین مجازی را خاموش کنید:

ubuntu-vm-builder بسته ای است که توسط Canonical برای ایجاد آسان تر ماشین های مجازی جدید توسعه یافته است.

برای نصب آن وارد کنید:

apt-get نصب ubuntu-vm-builder