پرش به محتویات

۱۷. مجازی‌سازی

لایهٔ مجازی‌سازی دو چیز را پنهان می‌کند: منابع واقعی (overcommit، steal) و ریسک عملیات (یک destroy معادل کشیدن برق است). این فصل KVM/libvirt، Proxmox و VMware را از دید لینوکس پوشش می‌دهد.

راهنمای سریع

فرمان کاربرد ریسک
virsh list --all / dominfo / domstate / dumpxml مشاهده (KVM) بدون تغییر
qm list / qm config ID / pct list (Proxmox) مشاهده بدون تغییر
systemd-detect-virt / lscpu این سرور مجازی است؟ بدون تغییر
virsh start / shutdown / reboot عملیات VM تغییر
virsh snapshot-create-as snapshot تغییر
virsh destroy قطع اجباری (قطع برق) مخرب
virsh undefine --remove-all-storage حذف VM و دیسک مخرب

KVM / libvirt

virsh list --all
virsh dominfo VM_NAME
virsh domstate VM_NAME
virsh domiflist VM_NAME
virsh domblklist VM_NAME
virsh dumpxml VM_NAME | less
virsh console VM_NAME
virsh domblkstat VM_NAME vda
virsh autostart VM_NAME            # شروع خودکار با میزبان
virsh list --autostart

برای خروج از کنسول متنی libvirt معمولاً Ctrl+] (Ctrl+]) استفاده می‌شود. قبل از هر کار، مطمئن شوید روی میزبان درست هستید و نام VM را با virsh list --all تأیید کنید.

منابع میزبان

lscpu | grep -iE 'virtualization|model name'
ls -l /dev/kvm
virt-host-validate
free -h
lsblk
virsh nodeinfo
virsh pool-list --all
virsh vol-list POOL
virsh net-list --all
df -hT /var/lib/libvirt/images

overcommit و thin disk

دیسک‌های qcow2 thin یا RAM overcommit شده یعنی مجموع «اختصاص‌یافته» می‌تواند از ظرفیت واقعی بیشتر باشد. پر شدن datastore/pool، همهٔ VM ها را متوقف می‌کند. فضای واقعی را مانیتور کنید، نه فقط فضای اختصاص‌یافته.

عملیات ماشین مجازی

virsh shutdown VM_NAME
virsh reboot VM_NAME
virsh start VM_NAME

shutdown به ACPI/guest agent نیاز دارد و ممکن است نتیجه ندهد؛ داخل مهمان وضعیت را ببینید. خاموش‌کردن اجباری یا destroy معادل قطع برق است و می‌تواند به فایل‌سیستم یا دیتابیس مهمان آسیب بزند؛ فقط در شرایط اضطراری و پس از بررسی استفاده کنید. virsh undefine VM --remove-all-storage VM و دیسک‌هایش را پاک می‌کند.

snapshot

virsh snapshot-list VM_NAME
virsh snapshot-create-as VM_NAME pre-upgrade --description "قبل از ارتقا"
virsh snapshot-revert VM_NAME pre-upgrade
virsh snapshot-delete VM_NAME pre-upgrade
qemu-img info --backing-chain /var/lib/libvirt/images/vm.qcow2

snapshot بکاپ نیست: روی همان ذخیره‌ساز است، زنجیرهٔ طولانی کارایی را می‌کشد و حذف‌نشده فضا می‌خورد. قبل از تغییر پرریسک بگیرید و بعد از تأیید حذف کنید.

Proxmox VE

pveversion -v | head -3
qm list                      # VM ها (KVM)
qm status 101
qm config 101
pct list                     # کانتینرهای LXC
pvesm status                 # ذخیره‌سازها و فضای آزاد
pvecm status                 # کلاستر و quorum
sudo qm shutdown 101         # تمیز؛ qm stop = قطع اجباری
sudo qm unlock 101           # قفل گیرکردهٔ ناشی از عملیات نیمه‌کاره (فقط پس از اطمینان که کاری در جریان نیست)
journalctl -u pvedaemon -u pveproxy --since today
vzdump 101 --storage backup-store --mode snapshot --compress zstd   # بکاپ

وضعیت quorum را قبل از خاموش‌کردن یک نود بررسی کنید؛ از دست دادن quorum فایل‌سیستم کلاستر را فقط‌خواندنی می‌کند.

VMware ESXi / vCenter

از سیستم لینوکس می‌توان وضعیت دسترسی شبکه و DNS را بررسی کرد:

nc -vz VCENTER_HOST 443
curl -kI https://VCENTER_HOST/       # -k فقط برای تست دسترسی؛ نه اتصال واقعی
getent hosts VCENTER_HOST

در محیط VMware از ابزارها و APIهای رسمی همان نسخه (vSphere Client، govc، esxcli) برای مدیریت VM، datastore، snapshot و host استفاده کنید. snapshot جایگزین پشتیبان‌گیری مستقل نیست و نگهداری طولانی آن می‌تواند مصرف datastore را افزایش دهد (و consolidate را سنگین کند).

از داخل مهمان

systemd-detect-virt              # kvm / vmware / microsoft ...
lscpu | grep -i hypervisor
systemctl status qemu-guest-agent --no-pager     # یا open-vm-tools
vmstat 1 5                       # ستون st (steal)
timedatectl                      # ساعت مهمان همگام با NTP؟
  • st بالا = میزبان مشغول است؛ مشکل داخل مهمان نیست.
  • guest agent برای shutdown تمیز و snapshot سازگار لازم است.
  • بعد از بزرگ‌کردن دیسک در hypervisor، داخل مهمان باید پارتیشن/LVM/فایل‌سیستم را هم بزرگ کنید (دیسک).
  • ساعت مهمان: NTP داخل مهمان یا همگام‌سازی hypervisor را یکی کنید، نه هر دو.

خطاهای رایج

نشانه علت احتمالی روش بررسی
VM بالا نمی‌آید: «no space» pool/datastore پر df ، virsh pool-list ، pvesm status
Cannot access storage file مجوز/مسیر/AppArmor ls -l ، journalctl -u libvirtd
shutdown اثر ندارد بدون agent/ACPI داخل مهمان؛ guest agent
VM کند ولی داخلش بیکار steal / overcommit میزبان vmstat (st) ، میزبان top
دیسک VM بعد از snapshot کند زنجیرهٔ طولانی qemu-img info --backing-chain
Proxmox: cluster not ready - no quorum نود کم / شبکه pvecm status
qm قفل گیرکرده عملیات قطع شده qm unlock (بعد از بررسی)

نکات امنیتی و عملیاتی

  • دسترسی به hypervisor = دسترسی به همهٔ مهمان‌ها؛ آن را مثل بالاترین سطح حفاظت کنید (شبکهٔ مدیریت جدا، MFA).
  • بکاپ مستقل از snapshot (vzdump/ابزار بکاپ)، با تست بازیابی.
  • قبل از به‌روزرسانی میزبان: تخلیهٔ VM ها یا مهاجرت، پنجرهٔ تغییر.

خلاصهٔ اجرایی

  1. فضا (واقعی) pool/datastore را مانیتور کنید؛ thin = خطر.
  2. shutdown ← صبر ← فقط در اضطرار destroy/stop.
  3. snapshot موقت است، بکاپ نیست؛ حذفش کنید.
  4. steal (st) را قبل از دنبال‌کردن مشکل داخل مهمان بخوانید.