اتصال به ماشینمجازی از طریق console (در virsh)
توسط: vahit
امروز میخوام در مورد libvirt صحبت کنم. اگر با مباحث مجازیسازی آشنا باشید به احتمال خیلی خیلی زیاد میدونید که libvirt چی هست ولی محض یادآوری و اطلاع دوستانی که چیزی ازش نمیدونن عرض کنم که libvirt به گفتهی خود سایتش عبارت است از:
Libvirt is collection of software that provides a convenient way to manage virtual machines and other virtualization functionality, such as storage and network interface management. These software pieces include an API library, a daemon (libvirtd), and a command line utility (virsh).
An primary goal of libvirt is to provide a single way to manage multiple different virtualization providers/hypervisors. For example, the command ‘virsh list –all’ can be used to list the existing virtual machines for any supported hypervisor (KVM, Xen, VMWare ESX, etc.) No need to learn the hypervisor specific tools!
به عبارت سادهتر (البته متن و زبان خود سایت خیلی ساده و گویا هست) libvirt مجموعهای از برنامههای مناسبی است برای مدیریت ماشینها و بقیهی منابع مجازی مانند منابع ذخیرهسازی (strage) و کارتهای شبکه.
از جمله خوبیهایی که استفاده از libvirt داره این هست که چندین hypervisor و provider رو پشتیبانی میکنه و دیگه لازم نیست برای استفاده از هر کدوم از اونها دستورات مختص به خودشون رو یادبگیریم. برای مثال میشه با استفاده از دستور زیر
1 |
virsh list --all |
همهی ماشینهای مجازی موجود رو لیست کرد. اگر استفاده از خط فرمان رو نمیپسندید میتونید رابط گرافیکی virt-manager رو نصب و استفاده کنید.
در کل مزیتهای بسیاری داره و خوندن بقیهی موارد لینک بالا رو توصیه میکنم.
از بحث چیستی libvirt که بگذریم، امروز میخوام در مورد استفاده از قابلیت console دستور virsh صحبت کنم. console این قابلیت رو به ما میده که بتونیم به serial console ماشین مهمان (که البته منظور مجازی هست) متصل بشیم (از طریق خط فرمان). امّا برای این کار باید تنظیماتی بر روی ماشین مجازی انجام بدیم تا بتونه این اتصال رو برقرار کنه.
کارهایی که باید انجام بدیم ۲تا هستن (هر دوی این کارها داخل ماشینمجازی انجام میگیرن یعنی باید یه روش دیگهای باشه و بر حسب شرایط بتونید پیدا کنید که بتونید داخل ماشین لاگین کنید):
اوّل اینکه باید سیستمعامل ماشینمجازی رو تنظیم کنیم که خروجی رو بر روی سریال پورت مجازی (که اسم serial port در لینوکس ttyS0 و در ویندوز COM1 هست) بفرسته. برای اینکار، خط مربوط به کرنل رو در فایل /boot/grub/grub.cfg ویرایش کرده و متن زیر رو به انتهای اون اضافه کنیم.
1 |
console=tty0 console=ttyS0,115200 |
نکته:
۱. قبل از ویرایش فایل یک کپی از اون به عنوان پشتیبان (محض استفاده در مواردی که ویرایش اون منجر به ایجاد مشکل میشه) تهیه کنید.
۲. این فایل سطح دسترسی نوشتن نداره و قبل از هر چیز این رو رفع کنید.
۳. یادتون باشه بعد از انجام تغییرات دسترسی نوشتن بر روی فایل رو بگیرید.
ماشین رو ریبوت کرده و دستور virsh console رو اجرا میکنیم در این حالت باید بتونیم خروجی کنسول ماشینمجازی رو ببینم (همون خطهایی که سیستمعامل موقع بوت شدن روی صفحه مینویسه.) امّا در نهایت پس از اتمام مراحل بوت چیزی عاید ما نمیشه در حالی که باید با صفحهی ورود به ماشین مواجه میشدیم.
ایجاد این مسأله طبیعی هست، چون گفتم دوتا کار باید انجام بدیم ولی ما فقط اوّلی رو به اتمام رسوندیم.
کار دوّم این هست که باید خود سریال کنسول رو بر روی ماشینمجازی کانفیگ کنیم. برای این کار یک فایل به اسم ttyS0.conf در مسیر /etc/init میسازیم و خطوط زیر رو داخلش مینویسیم:
1 2 3 4 |
start on stopped rc RUNLEVEL=[2345] stop on runlevel [!2345] respawn exec /sbin/getty -L 115200 ttyS0 xterm |
سپس دستور زیر رو برای شروع به کار ttyS0 اجرا میکنیم:
1 |
sudo start ttyS0 |
یا ماشین رو ریبوت میکنیم.
در این مرحله پس از اینکه دستور console رو داخل virsh به همراه اسم ماشینمجازی مورد نظر اجرا کردیم پس از بوت شدن ماشین شاهد خط فرمان برای نامکاربری و رمز عبور خواهیم بود که نشوندهندهی اون هست که ماشین در حال آماده به کار است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
. . . * Starting Signal sysvinit that local filesystems are mounted [ OK ] * Starting D-Bus system message bus [ OK ] * Starting flush early job output to logs [ OK ] * Stopping Mount filesystems on boot [ OK ] * Starting SystemD login management service [ OK ] * Stopping flush early job output to logs [ OK ] * Starting system logging daemon [ OK ] * Starting Uncomplicated firewall [ OK ] * Starting configure network device security [ OK ] * Starting Bridge file events into upstart [ OK ] * Starting Mount network filesystems [ OK ] * Starting configure network device [ OK ] * Stopping Mount network filesystems [ OK ] * Starting configure network device security [ OK ] * Starting Mount network filesystems [ OK ] * Starting Failsafe Boot Delay [ OK ] * Stopping Mount network filesystems [ OK ] * Stopping Failsafe Boot Delay [ OK ] * * Starting Send an event to indicate plymouth is up [ OK ] * Stopping Send an event to indicate plymouth is up [ OK ] * Stopping userspace bootsplash [ OK ] * * Stopping System V runlevel compatibility [ OK ] Ubuntu 14.04.3 LTS ubuntu ttyS0 ubuntu login: |
منابع:
- https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/sect-Virtualization-Troubleshooting_-Troubleshooting_with_serial_consoles.html
- https://help.ubuntu.com/community/KVM/Access