KVM (Kernel-based Virtual Machine) فناوری مجازیسازی داخلی هسته لینوکس است. روی یک VPS Linux Infrawire یعنی سرور شما مانند یک ماشین واقعی با هسته مخصوص خودش رفتار میکند، نه مانند یک پوشه ساده که درون سیستم دیگری ایزوله شده است. این راهنما تفاوت آن با فناوریهای کانتینری را توضیح میدهد و نشان میدهد چگونه خودتان آن را بررسی کنید.
📋 پیشنیازها
- یک VPS لینوکس (Ubuntu 24.04، Debian 12، AlmaLinux 9 یا Rocky Linux 9)
- دسترسی SSH با کاربر root یا کاربری دارای
sudo - آشنایی پایه با خط فرمان
1. KVM چگونه کار میکند
KVM هسته لینوکس میزبان فیزیکی را به یک هایپروایزر تبدیل میکند. هر ماشین مجازی یک فرایند معمولی است که QEMU مدیریت میکند، اما سختافزار شبیهسازیشده میبیند: پردازنده، حافظه، دیسک و کارت شبکه. به لطف افزونههای مجازیسازی پردازنده (Intel VT-x و AMD-V) کد مهمان تقریباً با سرعت بومی اجرا میشود.
درون ماشین مجازی یک سیستمعامل کامل با هسته، سیستم init و فرایندهای مخصوص خودش نصب میکنید. از دید شما این یک سرور اختصاصی است.
2. KVM در برابر OpenVZ و LXC
فناوریهای کانتینری متفاوت کار میکنند:
- OpenVZ و LXC: همه کانتینرها هسته میزبان را به اشتراک میگذارند. فقط یک فضای کاربر ایزوله دریافت میکنید. نمیتوانید هسته را عوض کنید، ماژول بارگذاری کنید یا نسخه هسته را انتخاب کنید.
- KVM: مجازیسازی کامل. هر VPS هسته خودش را بوت میکند و حافظه و دیسک اختصاصی دارد.
کانتینر سبکتر است اما به آنچه هسته میزبان اجازه میدهد محدود است. VPS مبتنی بر KVM در ازای مصرف حافظه کمی بیشتر، آزادی عمل میدهد.
3. چرا روی VPS مهم است
با هسته مخصوص خودتان میتوانید:
- ماژولهای هسته مانند WireGuard،
br_netfilterیاnf_conntrackرا بارگذاری کنید - Docker و سایر موتورهای کانتینر را بدون محدودیت اجرا کنید (cgroups، سیستم فایل overlay، iptables)
- سیستم را با
sysctlتنظیم کنید (بافرهای شبکه، IP forwarding، کنترل ازدحام BBR) - از فایروال، فایل swap و هر سیستم فایلی که میخواهید استفاده کنید
- نسخه دیگری از هسته توزیع خود را نصب کنید
Bash# نمایش هسته در حال اجرا uname -r # نمایش پارامترهای هسته که میتوانید تغییر دهید sudo sysctl net.ipv4.ip_forward net.ipv4.tcp_congestion_control
4. بررسی کنید که روی KVM هستید
سادهترین راه systemd-detect-virt است:
Bashsystemd-detect-virt # خروجی مورد انتظار: kvm
اگر دستور openvz، lxc یا docker نشان داد، درون یک کانتینر هستید. مقدار none یعنی ماشین فیزیکی.
میتوانید با lscpu تأیید کنید:
Bashlscpu | grep -iE 'hypervisor|virtualization type' # Hypervisor vendor: KVM # Virtualization type: full
و با پیامهای بوت هسته:
Bashsudo dmesg | grep -i -E 'kvm|hypervisor' # Hypervisor detected: KVM
در نهایت hostnamectl یک خط Virtualization: kvm نمایش میدهد.
5. آنچه KVM به شما میدهد را آزمایش کنید
بررسی کنید که میتوانید ماژول بارگذاری کنید و کانتینر اجرا کنید:
Bash# Ubuntu 24.04 / Debian 12: ماژول WireGuard sudo modprobe wireguard lsmod | grep wireguard # Docker را از مخزن توزیع نصب کنید و یک کانتینر آزمایشی اجرا کنید sudo apt update && sudo apt install -y docker.io sudo docker run --rm hello-world
روی AlmaLinux 9 یا Rocky 9 ابزارها را با sudo dnf install -y wireguard-tools نصب کنید و برای نصب موتور از مستندات رسمی Docker (docs.docker.com) پیروی کنید.
🔧 عیبیابی
dmesg: read kernel buffer failed: Operation not permitted
هسته استفاده از dmesg را به root محدود میکند. آن را با sudo اجرا کنید یا از sudo journalctl -k استفاده کنید.
modprobe: FATAL: Module wireguard not found
در برخی ایمیجهای حداقلی ماژولهای اضافی وجود ندارند. در Ubuntu بسته linux-modules-extra-$(uname -r) را نصب کنید. اگر تازه هسته را بهروز کردهاید، ابتدا ریبوت کنید تا uname -r با ماژولهای نصبشده مطابقت کند.
systemd-detect-virt: command not found
ایمیج systemd ندارد یا بسیار حداقلی است. به جای آن از lscpu یا dmesg استفاده کنید، یا بسته systemd را نصب کنید.
Docker درباره cgroups یا iptables خطا میدهد
با systemctl status docker بررسی کنید که سرویس در حال اجراست و در پیکربندی سفارشی فایروال، nf_tables یا iptables را غیرفعال نکردهاید.
🚀 اکنون میدانید KVM چه چیزی به VPS شما میدهد: هسته واقعی، کنترل کامل و بدون محدودیت پنهان از سوی میزبان.