PVE প্রক্সমক্স বাংলা ডকুমেন্টেশন

ফেজ ৩ — ভার্চুয়ালাইজেশন ধারণা (Virtualization Concepts)#

৭টি লেসন · আনুমানিক ৫ ঘণ্টা ৩০ মিনিট · লেভেল: শুরুর

প্রক্সমক্স ভেতরে ভেতরে আসলে কী করে — হাইপারভাইজার, KVM, QEMU, LXC — এই ফেজে সেটাই।


লেসন ১ — হাইপারভাইজার: Type 1 বনাম Type 2 (৩৫ মিনিট)#

সহজ ভাষায়#

হাইপারভাইজার হলো সেই সফটওয়্যার স্তর, যা ভার্চুয়াল মেশিন তৈরি ও চালায়। এটি হার্ডওয়্যার আর গেস্ট অপারেটিং সিস্টেমের মাঝখানে বসে CPU, RAM, ডিস্ক ও নেটওয়ার্ক ভাগ করে দেয়।

Type 1 — বেয়ার-মেটাল#

সরাসরি হার্ডওয়্যারের উপরে চলে, নিচে কোনো হোস্ট OS নেই। হাইপারভাইজার নিজেই OS।

  • Proxmox VE / KVM — লিনাক্স কার্নেলই হাইপারভাইজার (ফ্রি, ওপেন সোর্স)
  • VMware ESXi — এন্টারপ্রাইজ মান, প্রোপ্রাইটারি, দামি
  • Microsoft Hyper-V — Windows Server-এর ভেতরে
  • Xen — AWS ব্যবহার করত

ওভারহেড: ২–৫% মাত্র। আইসোলেশন শক্ত।

Type 2 — হোস্টেড#

হোস্ট OS-এর ভেতরে একটি সাধারণ অ্যাপ্লিকেশন হিসেবে চলে।

  • VirtualBox, VMware Workstation/Fusion, Parallels, QEMU (user-mode)
  • ওভারহেড: ১০–৩০%, কারণ দুইবার শিডিউলিং হয়
  • ব্যবহার: ডেভেলপারের ল্যাপটপ, টেস্টিং

KVM কেন বিশেষ#

KVM হলো লিনাক্স কার্নেলের একটি মডিউল, যা কার্নেলকেই হাইপারভাইজার বানিয়ে ফেলে। ফলে Type 1-এর গতি আর Type 2-এর সুবিধা (apt, পূর্ণ লিনাক্স টুলস) — দুইটাই পাওয়া যায়।

বিষয়Type 1Type 2
পারফরম্যান্স ওভারহেড২–৫%১০–৩০%
আইসোলেশনশক্তদুর্বল
প্রোডাকশনের উপযোগীহ্যাঁনা
ইনস্টল করা সহজকমবেশি

টিপ: সার্ভারে Proxmox VE (Type 1) ব্যবহার করুন। ল্যাপটপে কনফিগ পরীক্ষা করতে VirtualBox বা VMware Workstation ব্যবহার করুন।


লেসন ২ — KVM ও QEMU: প্রতিটি VM-এর ইঞ্জিন (৪৫ মিনিট)#

সহজ ভাষায়#

KVM আর QEMU দুইজন মিলে একটি VM বানায়।

  • KVM (কার্নেল মডিউল): CPU ও মেমরি ভার্চুয়ালাইজেশন করে, হার্ডওয়্যার এক্সটেনশন

(Intel VT-x / AMD-V) ব্যবহার করে।

  • QEMU (userspace প্রোগ্রাম): বাকি সব — ভার্চুয়াল NIC, ডিস্ক, USB, VGA, BIOS/UEFI।

ফলাফল: এমন একটি ভার্চুয়াল কম্পিউটার, যা প্রায় আসল হার্ডওয়্যারের গতিতে চলে।

ভেতরে কী হয়#

  • KVM /dev/kvm নামে একটি ডিভাইস দেয়। QEMU সেটি খুলে VM তৈরি করে।
  • গেস্টের ring 0 কোড সরাসরি CPU-তে চলে — অনুবাদ লাগে না।
  • গেস্ট যখন বিশেষ কিছু করতে চায় (I/O, ইন্টারাপ্ট), তখন "VM exit" হয় এবং হাইপারভাইজার সামলায়।
  • qm টুল কনফিগ ফাইল পড়ে QEMU-এর কমান্ড লাইন বানিয়ে দেয়।
BASH
egrep -c "(vmx|svm)" /proc/cpuinfo   # ০-এর বেশি হলে হার্ডওয়্যার সাপোর্ট আছে
lsmod | grep kvm                     # kvm_intel বা kvm_amd লোড আছে কি
ls -la /dev/kvm
kvm-ok

প্রতিটি VM একটি প্রসেস#

BASH
qm list                     # VMID, নাম, স্ট্যাটাস, PID
ps -p 1452 -o pid,cmd       # ওই PID আসলে qemu-system-x86_64
qm config 100               # VM-এর কনফিগ ফাইল

কনফিগ থাকে /etc/pve/nodes/<নোড>/qemu-server/100.conf ফাইলে।

VM চালানোর কমান্ড#

BASH
qm create 100 --name test-vm --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
qm start 100
qm status 100        # running / stopped / paused
qm shutdown 100      # ভদ্রভাবে বন্ধ (ACPI)
qm stop 100          # প্লাগ খুলে ফেলার মতো
qm reset 100         # হার্ড রিসেট
qm suspend 100       # থামিয়ে ডিস্কে রাখা
qm destroy 100       # VM ও ডিস্ক মুছে ফেলা
qm terminal 100      # সিরিয়াল কনসোল

CPU টাইপ#

টাইপমানে
hostহোস্টের সব CPU ফিচার দেয় — দ্রুততম, কিন্তু ভিন্ন CPU-তে লাইভ মাইগ্রেশন আটকায়
kvm64নিরাপদ বেসলাইন — Intel/AMD-এর মধ্যে মাইগ্রেশন চলে
x86-64-v2/v3/v4ধাপে ধাপে নতুন ইনস্ট্রাকশন সেট

সতর্কতা: --cpu host শুধু তখনই দিন, যখন ক্লাস্টারের সব নোডের CPU একই প্রজন্মের। ভিন্ন CPU-এর মধ্যে লাইভ মাইগ্রেশন করতে হলে kvm64 বা কোনো x86-64 বেসলাইন দিন।


লেসন ৩ — LXC কন্টেইনার: হালকা লিনাক্স আইসোলেশন (৪৫ মিনিট)#

সহজ ভাষায়#

LXC আসলে ভার্চুয়ালাইজেশন নয় — এটি OS পর্যায়ের বিচ্ছিন্নকরণ। কন্টেইনার হোস্টের কার্নেলই ব্যবহার করে, কিন্তু তার নিজের ফাইল সিস্টেম, প্রসেস তালিকা, নেটওয়ার্ক ও হোস্টনেম থাকে।

পেছনের প্রযুক্তি#

প্রযুক্তিকাজ
Namespacesপ্রসেস, নেটওয়ার্ক, মাউন্ট, হোস্টনেম, ইউজার আলাদা করে
cgroupsCPU, মেমরি, I/O-এর সীমা বেঁধে দেয়
seccompকোন সিস্টেম কল করা যাবে, তা সীমিত করে
AppArmor/SELinuxকোন ফাইলে হাত দেওয়া যাবে, তা নিয়ন্ত্রণ করে

VM নাকি LXC?#

LXCVM
চালু হতে~১০০ মিলিসেকেন্ড৫০০–২০০০ মিলিসেকেন্ড
বাড়তি RAM২০–৫০ MB২৫৬ MB+
OSশুধু লিনাক্সযেকোনো (Windows, BSD)
কার্নেলহোস্টেরটি ভাগ করেনিজস্ব
উপযুক্তNginx, PostgreSQL, Redis, Node.jsWindows, অবিশ্বস্ত কোড, শক্ত আইসোলেশন

Privileged বনাম Unprivileged — সবচেয়ে গুরুত্বপূর্ণ নিরাপত্তা বিষয়#

  • Privileged: ভেতরের root = হোস্টের root। কন্টেইনার থেকে বের হতে পারলে পুরো সার্ভার শেষ।
  • Unprivileged: ভেতরের root = হোস্টের UID 100000। বের হলেও সাধারণ ইউজারের ক্ষমতা।

সবসময় --unprivileged 1 ব্যবহার করুন। Docker চালাতে হলে --features nesting=1 দিন, privileged বানাবেন না।

BASH
pveam update
pveam available | grep -E "debian|ubuntu"
pveam download local debian-13-standard_13.0-1_amd64.tar.zst

pct create 200 local:vztmpl/debian-13-standard_13.0-1_amd64.tar.zst \
  --hostname web01 \
  --unprivileged 1 \
  --features nesting=1 \
  --memory 1024 --swap 1024 --cores 2 \
  --rootfs local-lvm:20 \
  --net0 name=eth0,bridge=vmbr0,ip=192.168.1.200/24,gw=192.168.1.1 \
  --nameserver 1.1.1.1

pct start 200
pct enter 200                       # ভেতরে শেল
pct exec 200 -- apt install nginx -y
pct snapshot 200 before-nginx
pct rollback 200 before-nginx

টিপ: কন্টেইনারে ঢুকতে ssh-এর বদলে pct enter <id> ব্যবহার করুন। কন্টেইনারে SSH না থাকলেও, নেটওয়ার্ক না থাকলেও এটি কাজ করে।


লেসন ৪ — স্ন্যাপশট, ক্লোন ও টেমপ্লেট (৪০ মিনিট)#

স্ন্যাপশট — অবস্থা জমিয়ে রাখা#

স্ন্যাপশট এক মুহূর্তের পুরো অবস্থা ধরে রাখে: ডিস্ক, ইচ্ছা করলে RAM, CPU অবস্থা। রোলব্যাক করলে ঠিক ওই মুহূর্তে ফিরে যায়।

স্টোরেজস্ন্যাপশটের গতি
ZFSপ্রায় সঙ্গে সঙ্গে, জায়গা লাগে না
LVM-thinপ্রায় সঙ্গে সঙ্গে
QCOW2একটু ধীর, তবে বহনযোগ্য
rawনিজে স্ন্যাপশট পারে না — নিচে ZFS/LVM লাগে
BASH
qm snapshot 100 pre-kernel-update --description "কার্নেল আপগ্রেডের আগে" --vmstate 1
qm listsnapshot 100
qm stop 100 && qm rollback 100 pre-kernel-update
qm delsnapshot 100 pre-kernel-update

pct snapshot 200 before-nginx      # কন্টেইনারেও একই নিয়ম

সতর্কতা: অনেকগুলো স্ন্যাপশট একটার পর একটা জমলে ডিস্ক পড়ার গতি কমে যায়। কাজ শেষে স্ন্যাপশট মুছে ফেলুন।

ক্লোন — VM নকল করা#

ধরনগতিনির্ভরতা
Linked cloneসেকেন্ডে তৈরি, ছোটউৎস VM মুছে ফেলা যায় না
Full cloneডিস্কের আকার অনুযায়ী সময় লাগেসম্পূর্ণ স্বাধীন
BASH
qm clone 100 101 --name web-clone-1 --full false        # linked
qm clone 100 200 --name web-prod --full true --storage local-lvm   # full
pct clone 200 201 --hostname db-clone --full true

টেমপ্লেট — গোল্ডেন ইমেজ#

টেমপ্লেট হলো read-only মাস্টার VM। এটি চালু করা যায় না, শুধু ক্লোন করা যায়।

BASH
# ১. VM বানান, OS বসান, আপডেট দিন
qm create 9000 --name debian13-template --memory 1024 --cores 2 \
  --net0 virtio,bridge=vmbr0 --virtio0 local-lvm:20 --ostype l26

# ২. VM-এর ভেতরে পরিষ্কার করুন
apt update && apt dist-upgrade -y
apt install qemu-guest-agent cloud-init -y
cloud-init clean --logs
truncate -s 0 /etc/machine-id
history -c && rm -f ~/.bash_history

# ৩. টেমপ্লেটে রূপান্তর (এটি ফেরানো যায় না)
qm shutdown 9000
qm template 9000

# ৪. ক্লোন করুন
qm clone 9000 100 --name web-01 --full true

সতর্কতা: টেমপ্লেট বানানোর আগে cloud-init clean চালান এবং /etc/machine-id খালি করুন। না করলে সব ক্লোনের machine ID এক হবে — DHCP-তে IP সংঘাত হবে।


লেসন ৫ — CPU ও মেমরি ভার্চুয়ালাইজেশন (৪৫ মিনিট)#

সহজ ভাষায়#

VM-এর পারফরম্যান্স ও হোস্টের স্থিতিশীলতা সবচেয়ে বেশি নির্ভর করে CPU ও মেমরি সেটিংয়ের উপর।

CPU#

আধুনিক CPU-তে VMX (Intel) বা SVM (AMD) মোড আছে, যেখানে গেস্টের কোড সরাসরি হার্ডওয়্যারে চলে। হাইপারভাইজার শুধু বিশেষ কাজগুলো (I/O, বিশেষ রেজিস্টার) মাঝপথে ধরে। তাই KVM প্রায় নেটিভ গতি পায়।

  • EPT/NPT: গেস্টের মেমরি ঠিকানা থেকে হোস্টের মেমরি ঠিকানা — হার্ডওয়্যারই করে দেয়।
  • হার্ডওয়্যার সাপোর্ট না থাকলে প্রতিটি নির্দেশ সফটওয়্যারে নকল করতে হয় — প্রায় ১০০ গুণ ধীর।

মেমরি#

VM-কে ৪ GB দিলে হোস্ট সঙ্গে সঙ্গে ৪ GB আটকে রাখে না।

কৌশলকী করে
Overcommitহোস্টের চেয়ে বেশি RAM বরাদ্দ দেওয়া — সবাই একসাথে পূর্ণ ব্যবহার না করলে নিরাপদ
KSMএকই রকম মেমরি পেজ খুঁজে এক করে দেয় — একই ধরনের অনেক VM থাকলে বড় সাশ্রয়
Ballooningগেস্টের অব্যবহৃত মেমরি হোস্ট ফেরত নিতে পারে
SwapRAM শেষ হলে ডিস্কে যায় — পারফরম্যান্স মারাত্মক পড়ে, এড়িয়ে চলুন
BASH
qm set 100 --memory 4096 --balloon 1024
# --memory: সর্বোচ্চ, --balloon: সর্বনিম্ন নিশ্চিত

cat /sys/kernel/mm/ksm/run          # KSM চালু আছে?
echo 1 > /sys/kernel/mm/ksm/run
cat /sys/kernel/mm/ksm/pages_shared # কত পেজ শেয়ার হলো

free -h
cat /proc/meminfo | grep -E "MemAvailable|SwapUsed|Committed"

# ডাটাবেসের মতো লেটেন্সি-সংবেদনশীল কাজে hugepages
qm set 100 --hugepages 2048

NUMA — একাধিক সকেটের সার্ভারে#

দুই সকেটের সার্ভারে RAM কোন সকেটের সাথে লাগানো, তার উপর গতি নির্ভর করে। VM যদি দুই সকেটে ছড়িয়ে যায়, গতি কমে।

BASH
numactl --hardware      # কয়টি NUMA নোড, কোন CPU কোন নোডে

qm set 100 --numa 1 --numa0 cpus=0-7,hostnodes=0,memory=16384

টিপ: দুই সকেটের সার্ভারে VM এমন মাপে বানান, যাতে একটি NUMA নোডের ভেতরেই থাকে।


লেসন ৬ — VirtIO: প্যারাভার্চুয়ালাইজড ডিভাইস (৪০ মিনিট)#

সহজ ভাষায়#

হার্ডওয়্যার নকল করা ধীর। VM যখন নকল করা e1000 NIC-এ লেখে, QEMU-কে আসল কার্ডের প্রতিটি রেজিস্টার ও ইন্টারাপ্ট নকল করতে হয় — প্রতি প্যাকেটে হাজার হাজার অপারেশন।

VirtIO সেই নকল বাদ দেয়। গেস্ট আর হোস্ট শেয়ার করা মেমরির রিং বাফার দিয়ে সরাসরি কথা বলে। ফলাফল: প্রায় নেটিভ গতি।

VirtIO ডিভাইস পরিবার#

ডিভাইসকাজ
virtio-netভার্চুয়াল NIC — ১০ Gbps+ সম্ভব
virtio-blkএকক-কিউ ব্লক ডিভাইস — এক ডিস্কের VM-এ ভালো
virtio-scsiমাল্টি-কিউ SCSI — হটপ্লাগ, TRIM, অনেক ডিস্ক
virtio-balloonমেমরি ফেরত দেওয়ার ড্রাইভার
virtio-rngহোস্ট থেকে এলোমেলো সংখ্যা দেয়
virtio-serialগেস্ট এজেন্টের যোগাযোগ চ্যানেল
virtio-gpuভালো ডিসপ্লে পারফরম্যান্স

পার্থক্য কতটা#

ডিভাইসফলাফল
e1000 (নকল)~৯০০ Mbps, ~১৫% CPU
virtio-net~৯৫০০ Mbps, ~৫% CPU
IDE (নকল)~৫,০০০ IOPS
SATA (নকল)~২৫,০০০ IOPS
virtio-blk / virtio-scsi~৮০,০০০ IOPS

QEMU গেস্ট এজেন্ট#

গেস্ট এজেন্ট VM-এর ভেতরে চলে এবং virtio-serial দিয়ে হোস্টের সাথে কথা বলে।

  • ফাইল সিস্টেম freeze/thaw: স্ন্যাপশট নেওয়ার আগে ডাটা লিখে থামিয়ে দেয় — ফলে

চালু ডাটাবেসেরও সঠিক স্ন্যাপশট হয়।

  • IP জানানো: ওয়েব UI-তে VM-এর IP দেখা যায়।
  • ভদ্র শাটডাউন, ফাইল আদান-প্রদান, OS তথ্য
BASH
qm set 100 --agent enabled=1,fstrim_cloned_disks=1

# VM-এর ভেতরে
apt install qemu-guest-agent
systemctl enable --now qemu-guest-agent

# হোস্ট থেকে পরীক্ষা
qm agent 100 ping
qm agent 100 network-get-interfaces
qm agent 100 get-osinfo

টিপ: একাধিক ডিস্কের VM-এ virtio-blk-এর বদলে virtio-scsi নিন। এটি এক কন্ট্রোলারে ২৫৫টি ডিস্ক, হটপ্লাগ এবং TRIM সাপোর্ট করে।

Windows-এ VirtIO#

Windows-এ VirtIO ড্রাইভার থাকে না। ড্রাইভার ছাড়া ইনস্টলের সময় Windows কোনো ডিস্ক দেখে না। তাই virtio-win.iso দ্বিতীয় CD হিসেবে যুক্ত করতে হয় এবং সেটআপে "Load driver" চাপতে হয়।


লেসন ৭ — PCIe পাসথ্রু, SR-IOV ও GPU (৫০ মিনিট)#

সহজ ভাষায়#

PCIe পাসথ্রু (VFIO) একটি ফিজিক্যাল ডিভাইস সরাসরি VM-কে দিয়ে দেয় — মাঝখানে কোনো নকল নেই। GPU তার পুরো গতিতে চলে, NVMe তার পুরো IOPS দেয়। ক্লাউড GPU ইনস্ট্যান্স এভাবেই কাজ করে।

IOMMU কেন দরকার#

PCIe ডিভাইস সরাসরি RAM-এ লিখতে পারে (DMA)। IOMMU (Intel VT-d / AMD-Vi) হার্ডওয়্যার পাহারাদার হিসেবে ঠিক করে দেয় কোন ডিভাইস RAM-এর কোন অংশে হাত দিতে পারবে। এটি BIOS এবং কার্নেল — দুই জায়গাতেই চালু করতে হয়।

ধাপে ধাপে#

BASH
# ১. BIOS-এ VT-d (Intel) বা IOMMU/AMD-Vi (AMD) চালু করুন

# ২. কার্নেলে চালু করুন — /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"   # Intel
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"     # AMD
update-grub && reboot

# ৩. চালু হয়েছে কি না দেখুন
dmesg | grep -e DMAR -e IOMMU

# ৪. VFIO মডিউল লোড করুন
echo "options vfio_pci ids=10de:2786" > /etc/modprobe.d/vfio.conf
echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
update-initramfs -u && reboot

# ৫. ডিভাইস ও তার IOMMU গ্রুপ খুঁজুন
lspci -nn | grep -i nvidia
find /sys/kernel/iommu_groups -type l | grep "01:00"
# একই গ্রুপের সব ডিভাইস একসাথে দিতে হয় (GPU + তার অডিও)

# ৬. VM-এ যুক্ত করুন
qm set 100 --hostpci0 01:00,pcie=1,x-vga=1 --vga none
qm start 100

SR-IOV — এক ডিভাইস অনেক VM-এ#

SR-IOV একটি ফিজিক্যাল কার্ড (PF) থেকে অনেকগুলো ভার্চুয়াল ফাংশন (VF) বানায়। প্রতিটি VF আলাদা VM-কে দেওয়া যায়। ফলে একটি 25GbE NIC আটটি VM-কে পূর্ণ গতিতে সেবা দিতে পারে।

BASH
cat /sys/bus/pci/devices/0000:03:00.0/sriov_totalvfs   # সর্বোচ্চ কয়টি VF
echo 4 > /sys/bus/pci/devices/0000:03:00.0/sriov_numvfs
lspci | grep "Virtual Function"

qm set 101 --hostpci0 03:10.0,pcie=1
qm set 102 --hostpci0 03:10.1,pcie=1

ফেজ ৩ শেষে আপনি যা পারবেন#

  • হাইপারভাইজারের ধরন ও KVM-এর অবস্থান বোঝা
  • CLI দিয়ে VM-এর পুরো জীবনচক্র চালানো
  • LXC আর VM-এর মধ্যে সঠিকটি বেছে নেওয়া
  • unprivileged কন্টেইনার বানানো
  • স্ন্যাপশট, ক্লোন ও টেমপ্লেট ব্যবহার করা
  • CPU টাইপ, ballooning ও NUMA ঠিক করা
  • VirtIO ও গেস্ট এজেন্ট চালু করা
  • GPU/NIC পাসথ্রু ও SR-IOV সেটআপ করা

পরবর্তী: ফেজ ৪ — স্টোরেজ