VPS এ Proxmox চলবে? nested virtualization চেক করুন
অধিকাংশ VPS vmx ফ্ল্যাগ লুকিয়ে রাখে। kvm-ok দিয়ে এক মিনিটে যাচাই করুন, তারপর KVM বা Proxmox গেস্ট চালান। vmx না থাকলে যে এরর আসবে তা সহ বিস্তারিত জানুন।
সংক্ষিপ্ত উত্তর
নেস্টেড ভার্চুয়ালাইজেশন হলো একটি ভার্চুয়াল মেশিনের ভেতরে আরেকটি হাইপারভাইজার চলা। আপনার VPS নিজেই একটি গেস্ট, এবং আপনি চান এটি নিজের আরও কিছু গেস্ট হোস্ট করুক। এটি তখনই কাজ করে যখন আপনার প্রোভাইডারের হাইপারভাইজর ইচ্ছাকৃতভাবে CPU-এর ভার্চুয়ালাইজেশন এক্সটেনশনগুলো আপনার ইনস্ট্যান্সে উন্মুক্ত করে দেয়। /proc/cpuinfo চেক করুন vmx ফ্ল্যাগের জন্য (Intel) অথবা svm (AMD) এর জন্য। যদি কোনোটিই না দেখা যায়, তবে VPS-এর ভেতরে আপনি যা-ই কনফিগার করুন, তা এই সমস্যার সমাধান করবে না।
প্রথমে একটি বিষয় স্পষ্ট করা দরকার: Docker-এর এর কোনোটিরই প্রয়োজন নেই। কন্টেইনারগুলো আপনার VPS কার্নেল শেয়ার করে এবং কখনোই /dev/kvm ব্যবহার করে না। যদি আসল উদ্দেশ্য হয় "আমার সার্ভারে কয়েকটি পরিষেবা কন্টেইনারে চালানো", তবে আপনার কাছে ইতিমধ্যেই প্রয়োজনীয় সবকিছু আছে। নেস্টিং তখনই গুরুত্বপূর্ণ হয়ে দাঁড়ায় যখন আপনি একটি দ্বিতীয় কার্নেল চান — যেমন একটি Proxmox ল্যাব, একটি Windows গেস্ট, Firecracker microVM, একটি Android এমুলেটর, সত্যিকারের VM-এর সমন্বয়ে একটি Kubernetes টেস্টবেড, অথবা এমন কিছু CI রানার যা VM ইমেজ বুট করে।
আসলে কী নেস্ট করা হচ্ছে
তিনটি স্তর:
- L0 — প্রোভাইডারের হাইপারভাইজর, হার্ডওয়্যারের ওপরে। আপনার এটিতে কোনো অ্যাক্সেস নেই।
- L1 — আপনার VPS। L0-এর কাছে এটি একটি গেস্ট।
- L2 — আপনার VPS-এর ভেতরে চালাতে চাওয়া VM।
হার্ডওয়্যার ভার্চুয়ালাইজেশন হলো Intel-এ VT-x (vmx ফ্ল্যাগ) এবং EPT, AMD-তে AMD-V / SVM (svm) এবং RVI/NPT। একটি হাইপারভাইজর এই ইনস্ট্রাকশনগুলো ব্যবহার করে গেস্ট মোডে প্রবেশ করে এবং CPU-কে একসাথে দুটি পেজ টেবিল পড়তে দেয়।
কোনোটিই রি-এন্ট্র্যান্ট হওয়ার জন্য ডিজাইন করা হয়নি, তাই নেস্টিং ইমুলেট করা হয়: L1 যখন একটি VMX ইনস্ট্রাকশন এক্সিকিউট করে, তখন এটি L0-তে ট্র্যাপ করে। L0 তারপর L1-এর হয়ে L2-এর শ্যাডো স্ট্রাকচার মেইনটেইন করে। KVM এটি ভালোভাবে করে, কিন্তু প্রতিটি এক্সিটে L0 অতিরিক্ত কাজ করে — এই কারণেই প্রোভাইডারকে অপ্ট-ইন করতে হয়।
অ্যাক্সিলারেটেড L2-এর জন্য দুটি শর্ত একসাথে মানতে হবে:
- L0-এর KVM মডিউল
nested=1দিয়ে লোড করা আছে। - L0 আপনার VPS-কে এমন একটি CPU মডেল দেয় যাতে ওই ফ্ল্যাগ থাকে — libvirt-এ
<cpu mode='host-passthrough'/>, Proxmox-এcpu: host, raw QEMU-তে-cpu host। একটি জেনেরিক ইমুলেটেড মডেল (qemu64,kvm64)vmxলুকিয়ে রাখে, এমনকি গ্লোবালি নেস্টিং চালু থাকলেও।
এক মিনিটে আপনার VPS যাচাই করুন
# 1. Are you in a VM, and under what?
systemd-detect-virt # kvm, vmware, xen, microsoft, or "none" on metal
# 2. Does the CPU expose the extensions to you?
grep -o -E 'vmx|svm' /proc/cpuinfo | sort -u
lscpu | grep -i -E 'virtual|hypervisor'
# 3. The definitive check
sudo apt update && sudo apt install -y cpu-checker
kvm-ok
# 4. The device node the whole stack depends on
ls -l /dev/kvmএকটি ব্যবহারযোগ্য instance অন্তত vmx অথবা svm প্রিন্ট করে, kvm-ok বলে KVM acceleration can be used, এবং /dev/kvm এ root:kvm মোড 660 হিসেবে বিদ্যমান। ফ্ল্যাগটি থাকলেও ডিভাইস নোড না থাকলে, ম্যানুয়ালি মডিউল লোড করুন এবং কার্নেল লগ পড়ুন:
sudo modprobe kvm_intel # or kvm_amd
sudo dmesg | tail -n 20একটি ফাইল বারবার উদ্ধৃত হয় এবং প্রায়ই ভুলভাবে পড়া হয়:
cat /sys/module/kvm_intel/parameters/nested # Y or Nআপনার VPS-এর ভেতরে এটি হলো আপনার KVM মডিউলের সেটিং, যা নির্ধারণ করে একটি L2 গেস্ট তৃতীয় স্তর নেস্ট করতে পারবে কি না। এটি এ বিষয়ে কিছু বলে না যে L0 আপনার জন্য নেস্টিং চালু করেছে কি না — সেটি /proc/cpuinfo এবং kvm-ok উত্তর দেয়। nested প্যারামিটার হলো সেই কন্ট্রোল যা আপনি সম্পূর্ণ নিজের মেশিনে সেট করেন:
echo 'options kvm_intel nested=1' | sudo tee /etc/modprobe.d/kvm-nested.conf
sudo modprobe -r kvm_intel && sudo modprobe kvm_intelVM চলাকালীন মডিউল অপসারণ প্রত্যাখ্যান করা হয়, তাই প্রথমে গেস্টগুলো বন্ধ করুন।
বেশিরভাগ VPS হোস্ট কেন এটি বন্ধ রাখে
- লাইভ মাইগ্রেশন। আপনাকে
vmxদেওয়া মানে এমন একটি CPU মডেল উন্মুক্ত করা, যা এই ফ্ল্যাগ বহন করে। এই CPU ফিচারের ওপর নির্ভরশীল একটি গেস্ট ভিএম-কে নিরাপদে এমন কোনো মেশিনে মাইগ্রেট করা যায় না, যার CPU-তে সেই ফিচারগুলো নেই। গ্রাহকদের মাইগ্রেট করে যে হোস্ট নোড খালি করে, সে নেস্টিং চালু করার সাথে সাথেই এই সুবিধা হারায়। - আক্রমণের পৃষ্ঠ। নেস্টেড VMX/SVM পাথগুলো কার্নেলের ভার্চুয়ালাইজেশন স্তরের সবচেয়ে জটিল কোডের মধ্যে পড়ে, এবং এর সাথে মিল রেখে এর CVE ইতিহাসও রয়েছে।
- L0 হয়তো KVM নয়। যদি
systemd-detect-virtএর আউটপুটvmware,xenবাmicrosoftআসে, তবে নেস্টিংয়ের নিয়ম সেই স্ট্যাকের হবে, KVM-এর নয়।
আপনার ইনস্ট্যান্সে ফ্ল্যাগ নেই? সাপোর্টে যোগাযোগ করুন (কিছু হোস্ট এটি প্রতি-VM ভিত্তিতে চালু করে দেয়), এমন একটি প্ল্যান বেছে নিন যেখানে নেস্টিংয়ের কথা স্পষ্টভাবে উল্লেখ আছে, অথবা একটি ডেডিকেটেড সার্ভারে সরে যান। এই নিবন্ধের বাকি অংশটি এমন একটি মেশিনে root অ্যাক্সেস থাকার কথা ধরে নিয়ে লেখা, যা এই ফ্ল্যাগ দেখায়।
libvirt দিয়ে একটি L2 গেস্ট চালানো
sudo apt install -y qemu-system-x86 libvirt-daemon-system virtinst ovmf
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt,kvm "$USER" # log out and back in
virt-install \
--name guest1 \
--memory 2048 \
--vcpus 2 \
--cpu host-passthrough \
--disk path=/var/lib/libvirt/images/guest1.qcow2,size=20,format=qcow2,bus=virtio \
--network network=default,model=virtio \
--os-variant debian13 \
--location https://deb.debian.org/debian/dists/trixie/main/installer-amd64/ \
--graphics none \
--console pty,target_type=serial \
--extra-args 'console=ttyS0,115200n8'কোনো গ্রাফিক্যাল সেশন প্রয়োজন নেই। একটি সিরিয়াল ইনস্টল কিছুক্ষণ ধরে চলে, তাই এটি একটি স্থায়ী শেলের ভেতর শুরু করুন: একই VPS-এ Claude Code সেশন চালু রাখে এমন tmux ওয়ার্কফ্লো একটি বিচ্ছিন্ন SSH সংযোগের পরেও একটি virt-install কনসোল সংযুক্ত রাখে। যদি --os-variant debian13 প্রত্যাখ্যাত হয়, তবে আপনার osinfo-db এই রিলিজের আগের — osinfo-query os চালান এবং এমন একটি নাম বেছে নিন যা বিদ্যমান। --cpu host-passthrough ডাউন L2-এর ভেতর vmx ফরওয়ার্ড করে, এটি তখনই প্রয়োজন যদি L2-কে আবার ভার্চুয়ালাইজ করতে হয়। virsh autostart guest1 দিয়ে গেস্টটিকে বুট-সেফ করুন।
ডিস্ক এবং NIC-এ virtio বাসটি কেবল অলংকরণ নয়: এমুলেটেড IDE এবং e1000 ডিভাইসগুলি virtio সারির চেয়ে অনেক বেশি বার হাইপারভাইজারে ট্র্যাপ করে, এবং নেস্টিংয়ের অধীনে প্রতিটি ট্র্যাপের মূল্য দুইবার দিতে হয়।
নেটওয়ার্কিং: টিউটোরিয়ালগুলো যে অংশ এড়িয়ে যায়
আপনার VPS-এ একটি পাবলিক IP আছে এবং এটি এমন একটি নেটওয়ার্ক ফ্যাব্রিকের পেছনে আছে যা অজানা MAC ঠিকানাগুলো ফিল্টার করে। এর দুটি ফলাফল হয়।
L2 গেস্টদের পাবলিক নেটওয়ার্কে ব্রিজ করা সাধারণত কাজ করবে না। br0 কে পাবলিক NIC-এ বসান, গেস্টকে তার নিজস্ব MAC দিন, এরপর আপনি দেখবেন ARP বেরিয়ে যাচ্ছে কিন্তু কিছুই ফিরে আসছে না — প্রোভাইডারের সুইচ এমন একটি MAC থেকে আসা ফ্রেম ড্রপ করে যা তারা আপনাকে লিজ দেয়নি। এটি যদি আপনার সমস্যার লক্ষণ হয়, তবে ব্রিজ ডিবাগ করা বন্ধ করুন; এটিই হলো মূল কারণ।
এর পরিবর্তে NAT নেটওয়ার্ক ব্যবহার করুন। libvirt-এ default অন্তর্ভুক্ত রয়েছে: virbr0, 192.168.122.0/24, dnsmasq লিজ, এবং আউটবাউন্ড সংযোগ অবিলম্বে কাজ করবে। ইনবাউন্ডের জন্য, L1-এ TLS টার্মিনেট করুন এবং ভেতরে প্রক্সি করুন — নিচের সার্টিফিকেট পাথগুলো এখান থেকে এসেছে Certbot এবং Nginx দিয়ে একটি Let's Encrypt সার্টিফিকেট ইস্যু করা:
server {
listen 443 ssl;
server_name lab.example.com;
ssl_certificate /etc/letsencrypt/live/lab.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/lab.example.com/privkey.pem;
location / {
proxy_pass http://192.168.122.50:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}প্রথমে গেস্টকে একটি স্ট্যাটিক লিজ দিন (virsh net-edit default) যাতে সেই proxy_pass-এর ঠিকানাটি স্থির থাকে।
ম্যানেজমেন্ট ইন্টারফেসগুলো ইন্টারনেট থেকে দূরে রাখুন: 5900 পোর্টে VNC এবং 8006 পোর্টে Proxmox ওয়েব UI লুপব্যাকে রাখা উচিত, যেগুলো একটি SSH টানেলের মাধ্যমে (ssh -N -L 8006:127.0.0.1:8006 you@your-vps) অথবা একটি VPS-এ সেলফ-হোস্টেড WireGuard VPN-এর মাধ্যমে অ্যাক্সেস করা হবে, যা পুরো 192.168.122.0/24 গেস্ট রেঞ্জকে মাত্র একটি প্রাইভেট হপ দূরে নিয়ে যায়। ফায়ারওয়াল সংকীর্ণ রাখুন — sudo ufw allow 22,80,443/tcp, এছাড়া আর কিছু নয়। আপনি ufw চালু করার পর যদি গেস্টদের আউটবাউন্ড সংযোগ বিচ্ছিন্ন হয়ে যায়, তবে সাধারণ কারণ হলো /etc/default/ufw-এ DEFAULT_FORWARD_POLICY="DROP" — এটি ACCEPT এ সেট করুন এবং ufw রিলোড করুন।
VPS-এ Proxmox
Proxmox VE 9 এর ভিত্তি হলো Debian 13। তাই একটি Debian VPS-এ pve-no-subscription রিপোজিটরি এবং proxmox-ve প্যাকেজ যোগ করে এটি ইনস্টল করা যায়। রিপোজিটরি এবং keyring-এর লাইনগুলো Proxmox-এর নিজস্ব বর্তমান ডকুমেন্টেশন থেকে নিন। পুরোনো ব্লগ পোস্ট থেকে কপি করা URL ইনস্টলেশন ব্যর্থ করে দেয়।
প্যাকেজ ইনস্টল করাই মূল সমস্যা নয়। Proxmox প্রত্যাশা করে যে vmbr0 একটি ফিজিক্যাল NIC-এর সাথে ব্রিজ করা থাকবে। এটি সরাসরি উপরের MAC-filtering সমস্যার দিকে গিয়ে পড়ে। VPS-এ যে কনফিগারেশন কাজ করে তা হলো একটি NAT বা routed vmbr0, যার সাথে কোনো ফিজিক্যাল পোর্ট যুক্ত নেই। গেস্টরা থাকে একটি প্রাইভেট রেঞ্জে। পাবলিক অ্যাক্সেসের জন্য হোস্টে DNAT নিয়ম বা রিভার্স প্রক্সি ব্যবহার করুন। পাবলিক সার্ভিসগুলো যদি VM না হয়ে কন্টেইনার হয়, তাহলে একটি Docker Compose ফাইল থেকে একাধিক অ্যাপের সামনে Traefik স্বয়ংক্রিয় সার্টিফিকেট সহ একই রাউটিং কাজটি কভার করে। প্রথমে /etc/network/interfaces স্ন্যাপশট নিন: ভুল ব্রিজ কনফিগারেশন আপনাকে এমন একটি মেশিন থেকে বাইরে বন্দি করে দেয় যার কনসোল আপনার কাছে নাও থাকতে পারে।
পারফরম্যান্স, সরাসরি বিবৃতি
নেস্টেড ভার্চুয়ালাইজেশন একক-স্তরের তুলনায় ধীর। এর কারণ নির্দিষ্ট, বিক্ষিপ্ত নয়: খরচের বোঝা মেমরি অ্যাক্সেসে নয়, এক্সিটে পড়ে। EPT/NPT উপস্থিত থাকলে, L0 অনুলিপি করে L2-এর জন্য শ্যাডো পেজ টেবিল এবং সাধারণ মেমরি রিড হার্ডওয়্যার গতিতে চলে। যা ব্যয়বহুল হয়ে ওঠে তা হলো প্রতিটি অপারেশন যা গেস্ট মোড ত্যাগ করে — I/O, টাইমার ইন্টারাপ্ট, MMIO, ইন্টার-প্রসেসর ইন্টারাপ্ট — কারণ একটি L2 এক্সিট L0 দ্বারা পরিচালিত হয় এবং L1-এর মাধ্যমে ফেরত পাঠানো হতে পারে। RAM-এ উপস্থিত ডেটার ওপর CPU-নির্ভর কাজ প্রায় নেটিভ গতির কাছাকাছি; সিসকল, প্যাকেট এবং ডিস্ক I/O-প্রধান যেকোনো কাজ স্তরগুলোর অস্তিত্ব অনুভব করে।
সুতরাং: সর্বত্র virtio ডিভাইস ব্যবহার করুন। আর আপনার qcow2 ফাইলটি এমন একটি ডিস্কে অবস্থান করে যা প্রোভাইডার আগে থেকেই ভার্চুয়ালাইজ করেছে — দুটি থিন-প্রোভিশনিং স্তর স্তূপীকৃত, যেখানে গেস্ট ডিস্কে cache=none একই ব্লকগুলোর একই সময়ে দুটি পেজ ক্যাশে উপস্থিত হওয়া আটকায়। এখানে কোনো বেঞ্চমার্ক সংখ্যা নেই: আপনার নিজের ইনস্ট্যান্সে আপনার নিজের ওয়ার্কলোড পরিমাপ করুন।
ব্যর্থতার ধরন, এবং যে স্ট্রিংগুলি আপনি দেখবেন
INFO: /dev/kvm does not exist / KVM acceleration can NOT be used থেকে kvm-ok। হয় মডিউলটি লোড হয়নি, অথবা ফ্ল্যাগটি প্রকাশ করা হয়নি। প্রথমে /proc/cpuinfo দেখুন।
kvm: disabled by bios এ dmesg। বেয়ার মেটালে, ফার্মওয়্যারে VT-x/SVM টগলটি চালু করুন। একটি VPS-এর ভেতরে এর অর্থ L0 আপনাকে এক্সটেনশনগুলি দিচ্ছে না, এবং গেস্টে আপনি যা টাইপ করুন না কেন তা পরিবর্তন করবে না।
modprobe: ERROR: could not insert 'kvm_intel': Operation not supported। আপনার কার্নেল যে CPU দেখছে তাতে কোনো vmx নেই — আবার, এটি একটি L0 সিদ্ধান্ত।
Could not access KVM kernel module: Permission denied। এটি অনুমতির সমস্যা, হার্ডওয়্যারের নয়। ls -l /dev/kvm এ গ্রুপ kvm, মোড 660 দেখানো উচিত; নিজেকে সেই গ্রুপে যোগ করুন এবং একটি নতুন লগইন শেল শুরু করুন, কারণ গ্রুপ সদস্যপদ ইতিমধ্যে চলমান সেশনে প্রযোজ্য হয় না।
kvm: Device or resource busy যখন QEMU শুরু হয়। অন্য একটি হাইপারভাইজার মডিউল CPU ধরে রেখেছে: lsmod চালান, kvm_intel এর পাশে vboxdrv বা VMware মডিউলগুলি খুঁজুন, এবং আপনি যেটি চান না সেটি আনলোড করুন।
/var/run/libvirt/libvirt-sock: No such file or directory থেকে virsh। ডেমনটি বন্ধ আছে: sudo systemctl enable --now libvirtd।
Proxmox: KVM virtualisation configured, but not available. একটি গেস্টে KVM অ্যাক্সিলারেশন টিক দেওয়া আছে এমন একটি হোস্টে যা তা সরবরাহ করতে পারে না। নেস্টিং ঠিক করুন, অথবা টিক তুলে দিন এবং এমুলেশন মেনে নিন।
Android emulator: x86_64 emulation currently requires hardware acceleration! আবার /dev/kvm — সাধারণত এটি গ্রুপের ক্ষেত্রে।
কোনো ত্রুটি নেই, এবং সবকিছু অত্যন্ত ধীর। কোনো অ্যাক্সিলারেটর ফ্ল্যাগ ছাড়া QEMU তার সফটওয়্যার এমুলেটর TCG-এ ফিরে যায়। এটি সঠিক এবং এটি ধীর — সেকেন্ডে মাপা একটি বুট মিনিটে মাপা একটিতে পরিণত হয়। -accel kvm স্পষ্টভাবে পাস করুন, যাতে QEMU নীরবে এমুলেট করার পরিবর্তে একটি ত্রুটি দিয়ে থেমে যায়।
একটি গেস্ট চলাকালীন অদৃশ্য হয়ে যায়। Out of memory: Killed process ... qemu-system-x86_64 এর জন্য dmesg দেখুন। একটি L2 গেস্ট হল L1-এ একটি প্রসেস, এবং OOM কিলার এটিকে অন্য যেকোনো প্রসেসের মতো বিবেচনা করে। L2 RAM আসে L1-এর নির্দিষ্ট বরাদ্দ থেকে — হোস্ট থেকে ধার নেওয়া হয় না।
পরিচালনা: ব্যাকআপ, আপগ্রেড, সীমাবদ্ধতা
ব্যাকআপ। চলমান গেস্টের qcow2 কপি করলে একটি ক্ষতিগ্রস্ত ইমেজ পাবেন। হয় virsh shutdown guest1 করে কপি করুন, অথবা একটি বাহ্যিক স্ন্যাপশট নিন (virsh snapshot-create-as guest1 snap1 --disk-only --atomic) যাতে আপনি কপি করার সময় লেখাগুলো একটি ওভারলেতে চলে যায় এবং এখন স্থির বেসটি কপি হয়, তারপর virsh blockcommit দিয়ে সেটি ফিরিয়ে আনুন। কপিগুলো VPS থেকে বাইরে পাঠিয়ে দিন — একই ডিস্কে একটি স্ন্যাপশট কোনো কিছুরই সুরক্ষা করে না।
আপগ্রেড। apt full-upgrade নতুন kvm_intel/kvm_amd মডিউল ইনস্টল করে, কিন্তু চলমান কার্নেল আপনি রিবুট না করা পর্যন্ত পুরোনোগুলো ধরে রাখে। পূর্ববর্তী কার্নেলটি ইনস্টল করা রাখুন এবং প্রতিটি কার্নেল পরিবর্তনের পর kvm-ok পুনরায় চালান: vmx ছাড়া ফিরে আসা একটি হোস্ট তখন কাজ করার জন্য মাত্র একটি বুট এন্ট্রি দূরে থাকে।
যেখানে এটি আর স্কেল করে না। একটি পাবলিক IP মানে প্রতিটি L2 পরিষেবা একটি প্রক্সি বা L1-এ একটি DNAT নিয়মের মাধ্যমে বাইরের জগতে পৌঁছায়। লাইভ মাইগ্রেশন এই তালিকায় নেই। CPU প্রতিযোগিতার অধীনে নেস্টেড এক্সিট পাথ সবার আগে এর প্রভাব অনুভব করে। আর একাধিক গেস্ট সহ একটি হাইপারভাইজর হলো এমন একটি মেশিন যার RAM আপনি ইতিমধ্যে খরচ করে ফেলেছেন — নেস্টেড VM গুলো একটি নির্দিষ্ট বরাদ্দের বাইরে ওভারকমিট করে বেরিয়ে আসতে পারে না। যখন একটি ল্যাব এর বাইরে বড় হয়ে যায়, তখন সমাধান আরও উঁচু একটি নেস্টেড স্ট্যাক নয়; এটি একটি ডেডিকেটেড বক্স যেখানে আপনি L0 এবং এর কোনোটিই প্রযোজ্য নয়।
FAQ
একটি VPS-এ Docker চালাতে কি আমার নেস্টেড ভার্চুয়ালাইজেশন প্রয়োজন?
না। কন্টেইনারগুলো আপনার VPS কার্নেল শেয়ার করে এবং কখনো /dev/kvm খোলে না, তাই vmx বা svm ফ্ল্যাগ ছাড়া একটি সাধারণ ইনস্ট্যান্স Docker এবং Docker Compose ঠিকঠাক চালায়। নেস্টিং তখনই গুরুত্বপূর্ণ হয় যখন আপনি একটি দ্বিতীয় কার্নেল চান: একটি Proxmox ল্যাব, একটি Windows গেস্ট, Firecracker microVM, একটি Android এমুলেটর, অথবা এমন CI রানার যা VM ইমেজ বুট করে।
আমার VPS নেস্টেড ভার্চুয়ালাইজেশন সমর্থন করে কি না তা আমি কীভাবে যাচাই করব?
grep -o -E 'vmx|svm' /proc/cpuinfo | sort -u চালান, তারপর cpu-checker প্যাকেজ থেকে kvm-ok চালান। একটি ব্যবহারযোগ্য ইনস্ট্যান্স vmx (Intel) বা svm (AMD) প্রিন্ট করে, kvm-ok রিপোর্ট করে KVM acceleration can be used, এবং /dev/kvm বিদ্যমান থাকে যার গ্রুপ kvm এবং মোড 660। এই প্রশ্নের ক্ষেত্রে /sys/module/kvm_intel/parameters/nested উপেক্ষা করুন — সেই ফাইলটি আপনার নিজের KVM মডিউলের বর্ণনা দেয়, প্রোভাইডারের হাইপারভাইসর আপনাকে যা দিয়েছে তার নয়।
বেশিরভাগ VPS প্রোভাইডার কেন নেস্টেড ভার্চুয়ালাইজেশন নিষ্ক্রিয় রাখে?
vmx প্রকাশ করা মানে গেস্টকে এমন একটি CPU মডেল দেওয়া যা সেই ফ্ল্যাগ বহন করে, এবং যে গেস্ট ঐ CPU ফিচারগুলোর উপর নির্ভর করে তাকে এমন একটি মেশিনে লাইভ-মাইগ্রেট করা যায় না যার CPU-এ সেগুলো নেই — যে প্রোভাইডার গ্রাহকদের সরিয়ে নোড খালি করে সে এটি হারায়। নেস্টেড VMX/SVM কোড পাথেরও একটি দীর্ঘ CVE ইতিহাস রয়েছে। কিছু হোস্ট অনুরোধে প্রতি-VM ভিত্তিতে এটি সক্রিয় করে, এবং অন্যরা নেস্টিংকে একটি প্ল্যান ফিচার হিসেবে নথিভুক্ত করে।
আমার নেস্টেড VM-এ পাবলিক ব্রিজে কোনো নেটওয়ার্ক নেই। সমস্যা কী?
প্রোভাইডারের সুইচ এমন একটি MAC ঠিকানা থেকে আসা ফ্রেম বাতিল করে যা সে আপনাকে কখনো লিজ দেয়নি, তাই পাবলিক NIC-এ ব্রিজ করা একটি L2 গেস্ট ARP পাঠায় এবং কোনো উত্তর পায় না। br0 ডিবাগ করা বন্ধ করুন — libvirt-এর NAT default নেটওয়ার্ক ব্যবহার করুন (virbr0, 192.168.122.0/24), গেস্টকে একটি স্ট্যাটিক লিজ দিন, এবং কিছু পাবলিশ করতে হলে VPS-এ নিজেই একটি রিভার্স প্রক্সি বা DNAT নিয়ম ব্যবহার করুন।
একটি নেস্টেড VM কতটা ধীর?
খরচ পড়ে VM এক্সিটে, মেমরি অ্যাক্সেসে নয়। EPT/NPT সক্রিয় থাকলে, L2-এর ভেতরে সাধারণ রিড এবং রাইট হার্ডওয়্যার গতিতে চলে, যখন I/O, টাইমার ইন্টারাপ্ট, MMIO এবং IPI L0 দ্বারা পরিচালিত হয় এবং L1-এর মাধ্যমে ফেরত পাঠানো হতে পারে। RAM-এ উপস্থিত ডেটার উপর CPU-নির্ভর কাজ প্রায় নেটিভের কাছাকাছি মনে হয়; সিসকল-, প্যাকেট- এবং ডিস্ক-নির্ভর ওয়ার্কলোড প্রতিটি স্তর অনুভব করে। সর্বত্র virtio ডিভাইস ব্যবহার করুন এবং গেস্ট ডিস্কে cache=none, তারপর আপনার নিজের ওয়ার্কলোড পরিমাপ করুন।