
KVM Sanallaştırma Nedir? VDS'de KVM Mimarisi ve libvirt Rehberi
KVM sanallaştırma teknolojisi mimarisi: Linux kernel modülü, QEMU emülasyon, libvirt yönetim, virsh CLI, virtio paravirt, VFIO PCIe passthrough ve Buyukweb VDS bağlamında pratik kullanımı.
KVM Sanallaştırma Nedir? VDS'de KVM Mimarisi ve libvirt Rehberi
KVM (Kernel-based Virtual Machine), Linux çekirdeğinin doğrudan bir parçası haline gelmiş tam donanım destekli sanallaştırma çözümüdür. 2007 yılında Linux 2.6.20 çekirdeğine entegre edilen bu modül, bugün dünyadaki büyük hosting ve bulut altyapılarının önemli bir kısmının üzerinde döndüğü teknolojidir. Bu rehberde KVM'in mimari iç yapısını, QEMU ile ilişkisini, libvirt yönetim katmanını, virsh CLI'sını, virtio paravirtualized sürücüleri, VFIO PCIe passthrough mekaniğini, performans ayarlarını ve güvenlik modelini Linux sistem yöneticisi gözünden ele alıyoruz.
Buyukweb perspektifi: Buyukweb'in VDS sunucu altyapısı KVM üzerine kuruludur. Intel Xeon E5-v4 / E5-v2 platformları, NVMe SSD'ler ve
virtioparavirt sürücüleri ile her müşteriye garanti edilmiş vCPU, RAM, disk tahsis edilir. KVM'in donanım izolasyonu sayesinde root erişimi, kendi kernel'inizi yükleme, kendi paket yığınınızı kurma özgürlüğüne sahip olursunuz. Bursa Pendc Tier 3 veri merkezimizde barındırılan sunucularımız hakkında bilgi için 0850 302 60 70 hattı 7/24 açıktır.
KVM'in Doğuşu ve Konumlandırması
KVM, 2006 yılında Qumranet adlı İsrailli bir şirket tarafından geliştirildi ve 2008'de Red Hat tarafından satın alındı. GPL v2 lisanslıdır; geliştirme topluluğunu Red Hat sponsorluğunda Linux çekirdeği bakımcıları (kernel maintainers) yürütür. KVM, kendi başına bir hipervizör değildir; Linux kernel'ını tam donanım destekli (HVM — Hardware-assisted Virtualization) bir hipervizöre dönüştüren bir kernel modülüdür.
Mimari sınıflandırma tartışmalıdır: literatürde KVM çoğu zaman "Type 2 / hosted" olarak listelenir çünkü teknik olarak Linux host OS üzerinde modül olarak yüklenir. Pratikte ise Linux kernel'ının kendisi doğrudan donanım üzerinde çalıştığı için KVM'in performans karakteristikleri Type 1 / bare metal hipervizörlerle (VMware ESXi, Microsoft Hyper-V) eşdeğerdir. Bu nedenle bazı kaynaklar KVM'i "Type 1.5" veya "hybrid" olarak sınıflandırır. Genel sanallaştırma tipoloji karşılaştırması için ayrı sanallaştırma karşılaştırma yazımıza bakabilirsiniz.
KVM Mimari Bileşenleri
1. Linux Kernel Modülleri (kvm.ko + kvm-intel.ko / kvm-amd.ko)
KVM'in kalbi iki kernel modülünden oluşur:
kvm.ko— mimari bağımsız çekirdek modül;/dev/kvmkarakter cihazını oluşturur. Bu cihaz, userspace programlarınioctlçağrılarıyla VM oluşturmasına izin verir.kvm-intel.koveyakvm-amd.ko— CPU üreticisine özgü modül. Intel VT-x (VMX) veya AMD-V (SVM) komut setlerini sürer.
Yüklü durumu doğrulamak için:
lsmod | grep kvm
# kvm_intel 425984 4
# kvm 1191936 1 kvm_intel
# irqbypass 16384 1 kvm
ls -l /dev/kvm
# crw-rw---- 1 root kvm 10, 232 ... /dev/kvm
CPU desteğini kontrol etmek:
grep -E 'vmx|svm' /proc/cpuinfo | head -1
# vmx → Intel VT-x | svm → AMD-V
2. QEMU — Donanım Çevre Birim Emülasyonu
KVM yalnızca CPU sanallaştırmasını ve bellek yönetimini ele alır; geri kalan donanım çevre birimleri (chipset, BIOS/UEFI firmware, PCI/PCIe veriyolu, disk denetleyici, ağ kartı, USB, ses, grafik) QEMU userspace süreci tarafından emüle edilir. Her KVM sanal makinesi, host sistemde tek bir qemu-system-x86_64 (veya mimariye özgü) süreci olarak görünür.
Önemli ayrım: QEMU CPU emülasyonu yapmaz (yapabilir ama KVM ile birlikte bu kısım kapatılır); CPU komutları doğrudan host CPU'sunda VMX/SVM modunda çalıştırılır. QEMU sadece donanım çevre birimlerini emüle eder; bu yüzden VM içinde lspci çıktısında bir Intel Q35 chipset, sanal IDE/SATA denetleyici, Intel e1000 NIC görürsünüz (veya virtio kullanılıyorsa virtio-blk/virtio-net).
QEMU komut satırından bağımsız çalıştırma (manuel test):
qemu-system-x86_64 \
-enable-kvm \
-m 4096 \
-smp 2 \
-cpu host \
-drive file=disk.qcow2,if=virtio \
-netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
-cdrom ubuntu-22.04.iso \
-boot d \
-vnc :0
Pratikte bu uzun komutu manuel yazmak yerine libvirt katmanı kullanılır.
3. Donanım Sanallaştırma Eklentileri (HVM)
KVM, CPU üzerindeki donanım sanallaştırma eklentilerini olmazsa olmaz bir gereksinim olarak kullanır:
- Intel VT-x + EPT (Extended Page Tables): "Ring -1" (VMX root mode) katmanı ekler. Hipervizör (KVM) buraya oturur; guest OS normal Ring 0'da çalışmaya devam eder. EPT, ikinci aşamalı bellek adres çevirisini donanımda yapar — geleneksel "shadow page table" yaklaşımının yaklaşık %30-40 bellek overhead'ını ortadan kaldırır.
- AMD-V + RVI (Rapid Virtualization Indexing) / NPT (Nested Page Tables): Intel VT-x + EPT'nin AMD karşılığı. İşleyiş prensibi aynıdır; isimlendirme farklıdır.
Bu donanım desteği olmayan eski CPU'larda KVM kurulamaz; QEMU TCG (Tiny Code Generator) ile yazılım emülasyon kullanılabilir ama performans 10-50x daha yavaştır.
Type 1 vs Type 2 KVM Tartışması
Klasik tipoloji şöyledir:
| Boyut | Type 1 (Bare Metal) | Type 2 (Hosted) |
|---|---|---|
| Konum | Donanım üzeri | Host OS üzeri |
| Örnekler | VMware ESXi, Hyper-V, Xen | VirtualBox, VMware Workstation |
| Performans | Maksimum | Host overhead'lı |
KVM'in ilginç konumlandırması: Linux host OS kernel'ı zaten doğrudan donanım üzerinde çalışıyor ve KVM modülü o kernel'ın bir parçası. Ring -1'e (VMX root) host kernel yerleşiyor. Bu yüzden performans olarak Type 1 davranışı sergiler ama kavramsal olarak Type 2 listelenebilir. Modern tartışma çoğunlukla KVM'i Type 1 olarak kabul eder; çünkü Linux kernel zaten bir Tip 1 hipervizör çekirdeği olarak çalışmaktadır.
virtio — Paravirtualized I/O Sürücüleri
KVM'in performans avantajının kalbinde virtio standardı yatar. Tam emülasyonda guest OS, host'taki sanal donanımla "gerçek bir donanımmış gibi" konuşur — bu yaklaşım her I/O işleminde context switch ve emülasyon overhead'i yaratır. Paravirtualization yaklaşımında ise guest OS, sanallaştırıldığını bilir ve hipervizörle özel bir protokol üzerinden konuşur. virtio, bu protokolü standartlaştıran açık spesifikasyondur.
Başlıca virtio sürücüleri:
- virtio-net: Sanal ağ kartı. Çoklu kuyruk (multi-queue) desteği ile birden fazla vCPU üzerinde paralel paket işleme;
vhost-netile kernel-bypass. - virtio-blk: Sanal block storage cihazı. NVMe IOPS'unu büyük ölçüde guest'e taşır.
- virtio-scsi: Daha modern alternatif; hotplug, SCSI komut seti tam desteği, çoklu LUN.
- virtio-balloon: Memory ballooning. Hipervizör, guest'in kullanmadığı belleği geri alabilir.
- virtio-rng: Entropi kaynağı. Cryptographic operations için guest'in
/dev/random'ını host'tan besler. - virtio-fs: Host-guest dosya sistemi paylaşımı (FUSE benzeri ama daha hızlı).
- virtio-console: Seri/grafik konsol bağlantısı.
- virtio-gpu: 2D/3D grafik hızlandırma (virgl).
Performans karşılaştırması (kabaca):
| Yaklaşım | Native'e oranla |
|---|---|
| Tam emülasyon (Intel e1000, IDE) | %20-30 (büyük kayıp) |
| virtio paravirt | %95+ (yaklaşık native) |
| SR-IOV / VFIO passthrough | %99+ (neredeyse native) |
Bu nedenle Buyukweb VDS sunucularında varsayılan olarak virtio-net, virtio-blk, virtio-scsi aktiftir. Windows guest'lerde virtio sürücülerini ayrıca yüklemek gerekir (Fedora projesinin virtio-win.iso paketi).
VFIO ve SR-IOV — PCIe Passthrough
Bazı iş yükleri (GPU compute, yüksek frekanslı ağ, FPGA, RDMA NIC) için virtio bile yeterince hızlı değildir; fiziksel PCIe cihazını doğrudan VM'e bağlamak gerekir. KVM bunu VFIO (Virtual Function I/O) çerçevesi ile yapar.
VFIO PCIe Passthrough
Tam bir PCIe cihazını tek bir VM'e adamak için:
- IOMMU aktivasyonu: Intel VT-d veya AMD-Vi donanım desteği şart. Kernel parametresine
intel_iommu=on iommu=pt(veya AMD içinamd_iommu=on) eklenir. - Cihazı host sürücüsünden ayırma: Hedef PCIe cihazı
vfio-pcidriver'a bağlanır (/sys/bus/pci/drivers/vfio-pci). - IOMMU grup kontrolü:
find /sys/kernel/iommu_groups/ -type lile grup yapısı incelenir; aynı IOMMU grubundaki tüm cihazlar birlikte passthrough edilmelidir. - libvirt XML'e
<hostdev>bloğu eklenir.
GPU passthrough en yaygın senaryodur (oyun host'u, AI/ML eğitimi). Buyukweb yapay zeka sunucu paketleri CPU-yoğun ML workload odaklıdır; GPU passthrough barındırılan paketler arasında değildir — GPU gerektiren projeler için ayrıca GPU VDS seçeneği değerlendirilebilir.
SR-IOV (Single Root I/O Virtualization)
Yüksek hızlı ağ (40G/100G) ve aşırı paket-per-second iş yükleri için, tek bir fiziksel ağ kartı PF (Physical Function) + birden çok VF (Virtual Function) olarak görünür hale getirilir. Her VF, ayrı bir VM'e VFIO ile bağlanır. Sonuç: kernel-bypass + paralel donanım kuyrukları + her VM neredeyse hat hızında ağ kapasitesi.
Tipik etkinleştirme:
# 8 sanal fonksiyon oluştur
echo 8 > /sys/class/net/ens2f0/device/sriov_numvfs
lspci | grep -i ethernet
# ...Virtual Function görünür
libvirt — KVM Yönetim Katmanı
libvirt, KVM (ve diğer birçok hipervizörün) üstüne oturan soyutlama ve yönetim API'sıdır. C, Python, Go, Java istemcileri vardır. libvirtd daemon'ı (modern dağıtımlarda modüler: virtqemud, virtnetworkd, virtstoraged) host üzerinde çalışır ve sanal makineleri yönetir.
libvirt XML — Domain Tanımı
Bir KVM VM'i, libvirt XML dosyasıyla tanımlanır. Tipik bir VM XML'i:
<domain type='kvm'>
<name>ubuntu-vm</name>
<memory unit='KiB'>4194304</memory>
<vcpu placement='static'>2</vcpu>
<cpu mode='host-passthrough' check='none'/>
<os>
<type arch='x86_64' machine='pc-q35-7.0'>hvm</type>
<boot dev='hd'/>
</os>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none' io='native'/>
<source file='/var/lib/libvirt/images/ubuntu-vm.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<graphics type='vnc' port='-1'/>
</devices>
</domain>
XML'i virsh edit <vm-name> ile düzenleyebilir veya virsh dumpxml <vm-name> ile alabilirsiniz.
virsh CLI — Günlük Komutlar
virsh libvirt'in komut satırı arayüzüdür. En sık kullanılan komutlar:
# VM'leri listele
virsh list --all
# VM başlat / durdur / askıya al
virsh start ubuntu-vm
virsh shutdown ubuntu-vm # graceful (ACPI)
virsh destroy ubuntu-vm # forced (power off)
virsh suspend ubuntu-vm
virsh resume ubuntu-vm
# Seri konsol bağlantısı (SSH yoksa kurtarma)
virsh console ubuntu-vm
# XML düzenle / dump
virsh edit ubuntu-vm
virsh dumpxml ubuntu-vm > ubuntu-vm.xml
# Otomatik başlatma (host boot'unda)
virsh autostart ubuntu-vm
# Snapshot
virsh snapshot-create-as ubuntu-vm snap-1 "ilk durum"
virsh snapshot-list ubuntu-vm
virsh snapshot-revert ubuntu-vm snap-1
# Kaynak değişimi (çalışırken / kapalıyken)
virsh setmem ubuntu-vm 8G --config
virsh setvcpus ubuntu-vm 4 --config
# Disk ekle
virsh attach-disk ubuntu-vm /var/lib/libvirt/images/extra.qcow2 vdb --driver qemu --subdriver qcow2 --persistent
virt-manager — GUI ve Diğer Yardımcı Araçlar
virt-manager: GTK tabanlı grafik arayüz; KVM/QEMU VM'leri görsel olarak yönetir.virt-install: Komut satırından yeni VM oluşturma.virt-clone: Mevcut VM'i klonlama (UUID, MAC adresleri sıfırlanır).virt-sysprep: VM şablonu hazırlama (host-specific bilgi temizleme).virt-customize: Disk imajına SSH key, paket, kullanıcı enjekte etme.virt-viewer: Uzaktan VNC/SPICE konsol bağlantısı.
Pratik VM Oluşturma (Ubuntu 22.04 host)
Bir Ubuntu LTS host üzerinde KVM stack kurulumu ve ilk VM:
# Bağımlılıklar
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system virtinst bridge-utils virt-manager
# libvirt grubuna kullanıcı ekle
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
# libvirtd başlat
sudo systemctl enable --now libvirtd
# Sistem doğrulama
virt-host-validate
# QEMU: Checking for hardware virtualization : PASS
# QEMU: Checking if device /dev/kvm exists : PASS
# QEMU: Checking if IOMMU is enabled by kernel : PASS
# Ubuntu Server 22.04 VM kurulumu (network install)
virt-install \
--name ubuntu-test \
--ram 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu-test.qcow2,size=20,format=qcow2 \
--os-variant ubuntu22.04 \
--network bridge=br0,model=virtio \
--graphics vnc \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/'
VM kurulumdan sonra:
virsh list
virsh console ubuntu-test # konsola bağlan
Disk Format Seçimi: qcow2 vs raw
KVM'de iki temel disk formatı kullanılır:
| Özellik | qcow2 | raw |
|---|---|---|
| Sparse (thin provisioning) | Evet | Evet (filesystem desteğine bağlı) |
| Snapshot | Yerleşik | Hayır (LVM gerekir) |
| Copy-on-write | Evet | Hayır |
| Sıkıştırma | Evet | Hayır |
| Şifreleme | Evet (LUKS) | Hayır (LUKS host seviyesinde) |
| Performans | Hafif overhead | Maksimum |
| Backing chain | Evet (template + delta) | Hayır |
Pratik öneri:
- Genel kullanım:
qcow2(snapshot ve thin provisioning değerli). - Yüksek I/O yoğun veritabanı:
rawveya LVM logical volume. - VM şablonu zincirleri (CI/CD):
qcow2backing chain ile her yeni VM dakikalar yerine saniyeler.
# qcow2 oluştur
qemu-img create -f qcow2 ubuntu.qcow2 20G
# Format dönüştür
qemu-img convert -O raw ubuntu.qcow2 ubuntu.raw
# Backing chain (template'den child)
qemu-img create -f qcow2 -b base.qcow2 -F qcow2 child.qcow2
Storage Pool'lar ve Ağ Modları
Storage Pool
libvirt birden fazla depolama backend'i destekler:
- dir: Yerel dosya sistemi dizini (varsayılan
/var/lib/libvirt/images). - logical: LVM volume group; her VM bir logical volume.
- iscsi: Uzak iSCSI hedefi.
- nfs: NFS shared storage (live migration için gerekli).
- rbd: Ceph RADOS Block Device (dağıtık depolama).
- zfs: OpenZFS pool üzerinde zvol.
Storage pool tanımlama örneği:
virsh pool-define-as vm-storage dir --target /data/vms
virsh pool-build vm-storage
virsh pool-start vm-storage
virsh pool-autostart vm-storage
Ağ Modları
- NAT (varsayılan):
virbr0köprüsü +dnsmasqDHCP + iptables MASQUERADE. VM'ler dışarı çıkar, dışarıdan VM'lere doğrudan erişim için port-forward gerekir. - Bridge: Linux bridge (
br0) veya Open vSwitch üzerinden fiziksel ağa katılım. VM'in IP'si LAN'da görünür. Üretim VDS senaryosunun standardıdır. - Routed: Host, VM'ler için router gibi davranır; NAT yok, MASQUERADE yok, statik routing.
- Isolated: VM'ler birbiriyle konuşur, dış dünyaya çıkışı yok. Lab senaryoları için.
- macvtap: VM'in MAC'i fiziksel NIC'e doğrudan asılır; bridge'den hafif ama host-VM iletişimi kısıtlı.
Snapshot ve Live Migration
Snapshot
Disk + bellek + cihaz durumunu donduran nokta. Test senaryolarında, kernel yükseltmeden önce, riskli güncelleme öncesi vazgeçilmezdir.
virsh snapshot-create-as ubuntu-vm pre-upgrade "Kernel öncesi"
# güncelleme yapılır
# beklenmedik problem olursa:
virsh snapshot-revert ubuntu-vm pre-upgrade
Live Migration
Çalışan VM'i (durduramadan) başka bir host'a taşıma. Shared storage (NFS, Ceph, iSCSI) ve aynı CPU ailesi gereklidir.
virsh migrate --live --persistent ubuntu-vm qemu+ssh://host2/system
Senaryoları: donanım bakımı, host yük dengeleme, datacenter taşıması. Buyukweb VDS altyapısında planlı bakım operasyonları için kullanılan tekniktir.
Nested Virtualization
KVM içinde KVM çalıştırmak — "nested" sanallaştırma — eğitim, CI/CD test ve sanallaştırma lab senaryolarında işe yarar. Intel platformunda etkinleştirmek için:
# Host kernel parametresi
echo "options kvm_intel nested=1" | sudo tee /etc/modprobe.d/kvm.conf
# Modül yeniden yükle
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel
# Doğrulama
cat /sys/module/kvm_intel/parameters/nested
# Y
Guest VM XML'inde CPU modeli host-passthrough ya da <feature policy='require' name='vmx'/> eklenmelidir.
Performans uyarısı: Nested VM tipik olarak %10-25 CPU degradation yaşar. Üretim iş yükü için uygun değildir; eğitim/test/lab için tolere edilebilir. Buyukweb nested sunucu paketleri bu senaryo için tasarlanmıştır; VT-x geçişi açık gelir.
Cloud-init ile Otomatik VM Provisioning
Yeni VM'leri elle kurmak yerine, cloud-init ile otomatik konfigürasyon (kullanıcı, SSH anahtarı, paket, network) yapmak modern uygulamadır.
# cloud-init user-data örneği
cat > user-data <<'YAML'
#cloud-config
hostname: web-01
users:
- name: deploy
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-ed25519 AAAA...
packages:
- nginx
- postgresql
runcmd:
- systemctl enable --now nginx
YAML
# Seed ISO oluştur
cloud-localds seed.iso user-data
# Cloud image (Ubuntu 22.04 cloud-img)
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
# VM oluştur
virt-install \
--name web-01 --memory 4096 --vcpus 2 \
--disk path=jammy-server-cloudimg-amd64.img,format=qcow2 \
--disk path=seed.iso,device=cdrom \
--import --os-variant ubuntu22.04 \
--network bridge=br0,model=virtio \
--graphics none
VM boot ettiğinde cloud-init seed ISO'sundaki yapılandırmayı okuyup uygular. CI/CD pipeline'larında dakikalar içinde tekrarlanabilir VM dağıtımı.
Performans Tuning
KVM'in varsayılan yapılandırması iyi başlangıç verir; üretim için aşağıdaki ince ayarlar fark yaratır.
1. CPU Pinning ve NUMA Farkındalığı
vCPU'ları belirli fiziksel CPU'lara sabitlemek (cache locality, NUMA boundary). XML:
<vcpu placement='static'>4</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='2'/>
<vcpupin vcpu='1' cpuset='3'/>
<vcpupin vcpu='2' cpuset='4'/>
<vcpupin vcpu='3' cpuset='5'/>
</cputune>
<numatune>
<memory mode='strict' nodeset='0'/>
</numatune>
2. Hugepages (1GB)
TLB miss oranını düşürür; bellek-yoğun iş yüklerinde %10-20 hız.
# Sistemde 16 adet 1GB hugepage rezerve et
echo 16 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
# Kalıcı: kernel cmdline
# default_hugepagesz=1G hugepagesz=1G hugepages=16
VM XML'de:
<memoryBacking>
<hugepages>
<page size='1048576' unit='KiB'/>
</hugepages>
</memoryBacking>
3. virtio-net Multi-Queue
Yüksek paket-per-second iş yüklerinde paralel kuyruk:
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
<driver name='vhost' queues='4'/>
</interface>
VM içinde:
ethtool -L eth0 combined 4
4. QEMU IOThread
Disk I/O'yu vCPU thread'inden ayrı bir kernel thread'e atar:
<iothreads>2</iothreads>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none' io='native' iothread='1'/>
...
</disk>
5. vhost-net ve vhost-user
vhost-net ağ veri yolunu kernel space'e taşır (userspace QEMU bypass). vhost-user ise DPDK/OVS-DPDK gibi userspace ağ stack'leriyle entegrasyon için kullanılır.
6. Memory Ballooning
Belleği VM'ler arasında dinamik tahsis için virtio-balloon driver. Oversubscription dürüstlüğü kritik: Buyukweb VDS paketlerinde garanti edilmiş RAM tahsisi vardır; balloon driver kapasite mühendisliği için kullanılır, müşteriye taahhüt edilen RAM her zaman korunur.
Güvenlik Modeli
KVM'in güvenlik tasarımı çok katmanlıdır.
sVirt — SELinux ile VM İzolasyonu
sVirt, her KVM/QEMU sürecini ayrı bir SELinux MCS (Multi-Category Security) etiketiyle çalıştırır. Bir VM diğerinin disk imajına ulaşamaz; QEMU sürecinin host dosya sistemindeki erişim yetkisi sıkı şekilde sınırlandırılır.
# QEMU sürecinin SELinux context'i
ps -eZ | grep qemu
# system_u:system_r:svirt_t:s0:c123,c456 qemu...
# Disk imajının context'i
ls -lZ /var/lib/libvirt/images/
# system_u:object_r:svirt_image_t:s0:c123,c456 ubuntu-vm.qcow2
Aynı MCS kategori kümesi olmayan iki süreç birbirinin dosyalarına erişemez — bu, qcow2 dosyalarının VM'ler arası izolasyonunu donanım izolasyona ek olarak güçlendirir.
libvirt Dynamic Ownership
libvirt, VM başladığında disk dosyalarının sahipliğini qemu:qemu (veya yapılandırmaya göre başka bir UID/GID) olarak ayarlar; VM durduğunda eski sahipliği geri yükler. Bu mekanizma, disk dosyalarının yanlışlıkla geniş izinli durumda kalmasını engeller.
cgroup ile Kaynak Limitleri
Her libvirt VM kendi cgroup hiyerarşisine yerleştirilir. CPU shares, memory limit, block I/O bandwidth (blkio.throttle) gibi kısıtlar tanımlanabilir.
Spectre / Meltdown / L1TF / MDS
Modern KVM'de speculative execution side-channel açıkları için mikrokod güncellemeleri, kernel mitigation'ları (spec_store_bypass_disable, l1tf=full, mds=full,nosmt) ve guest CPU özellik kontrolü yapılır.
# Host'taki aktif mitigation'lar
grep . /sys/devices/system/cpu/vulnerabilities/*
Live migration sırasında kaynak ve hedef CPU'ların aynı mitigation seviyesine sahip olması gerekir.
KVM ve Alternatif Hipervizör Karşılaştırması
| Özellik | KVM | VMware ESXi | Microsoft Hyper-V | Xen | Proxmox VE |
|---|---|---|---|---|---|
| Tür | Type 1.5 (Linux kernel modülü) | Type 1 | Type 1 | Type 1 (dom0) | Type 1 (KVM + LXC) |
| Lisans | GPL v2 | Ticari abonelik | Windows Server dahili | GPL | AGPLv3 + abonelik |
| Yönetim | libvirt CLI / virt-manager | vSphere Client | Hyper-V Manager | xl/xen-tools | Web GUI (8006) |
| Container | Hayır (ayrı LXC/Docker) | Hayır | Hayır | Hayır | Yerleşik LXC |
| Live Migration | libvirt + shared storage | vMotion | Live Migration | xl migrate | Yerleşik |
| HCL | Çok geniş (Linux desteği) | Sertifikalı liste | Windows-odaklı | Daralan | KVM'inkiyle aynı |
| Olgunluk | 2007+ (kernel) | 2001+ | 2008+ | 2003+ | 2008+ |
Önemli not: Proxmox VE'nin hipervizörü KVM'dir. Proxmox, KVM + LXC + Web GUI + cluster yönetim + Ceph entegrasyonunu tek paket halinde sunar. Yani "Proxmox kullanıyorum" demek aslında "KVM kullanıyorum + Proxmox yönetim katmanı" anlamına gelir.
oVirt (Red Hat Virtualization upstream'i) kurumsal KVM yönetim platformudur: SPM (Storage Pool Manager), HA, live migration, web portal, REST API ile büyük ortamlar için tasarlanmıştır.
Buyukweb VDS Altyapısında KVM
Buyukweb'in VDS sunucu altyapısı KVM üzerine kuruludur. Tercih nedenleri:
- Tam izolasyon: sVirt + IOMMU + dedicated vCPU tahsisi ile müşteriler arası hipervizör seviyesinde izolasyon.
- Root erişim: Müşteri kendi kernel, kendi paket yığınını kurar; cPanel paylaşımlı modelden tamamen farklı tam yönetim özgürlüğü.
- Garanti edilmiş kaynak: vCPU, RAM, NVMe disk her VM'e tahsis edilmiştir. Oversubscription dürüstlüğü ile makul değerler tutulur.
- virtio paravirt: NVMe SSD IOPS'u
virtio-blkile guest'e taşınır; ağ tarafındavirtio-netile gigabit-class throughput. - Bursa Pendc Tier 3 datacenter: Yedekli elektrik, soğutma, ağ; KVM live migration imkanıyla bakım operasyonlarında VM'ler kesintisiz taşınır.
- cloud-init desteği: Paket karşılaştırma sayfasındaki tüm VDS paketlerinde modern Linux imajları cloud-init ile otomatik provision edilebilir.
- Web konsol: SSH erişimi kapanırsa müşteri panelinden tarayıcı üzerinden VM konsoluna erişip kurtarma yapılabilir —
virsh consolebenzeri out-of-band kanal.
E5V4 VDS paketleri Intel Xeon E5-v4 (Broadwell-EP) işlemcili sunucularda barındırılır; AES-NI, AVX2, VT-x + EPT desteği ile KVM'in tüm modern özellikleri kullanılabilir.
Nested KVM — Müşteri Tarafında
Buyukweb VDS müşterileri kendi VM'i içinde başka bir KVM ortamı kurmak isteyebilir mi? Teknik olarak nested sunucu paketlerinde VT-x geçişi açıktır; standart E5V4 VDS paketlerinde nested kullanım performans baskısı yarattığı için sınırlandırılmıştır. Lab/eğitim/öğrenme amaçlı KVM senaryoları için Nested VDS doğru seçenektir; üretim iş yükü VM içinde sanallaştırma yerine ayrı VDS olarak konumlandırılmalıdır.
Sorun Giderme
"Could not access KVM kernel module"
/dev/kvm üzerinde izin sorunu. Kullanıcı kvm grubunda olmalıdır:
ls -l /dev/kvm
# crw-rw---- 1 root kvm
groups | grep kvm
# eksikse:
sudo usermod -aG kvm $USER
# logout / login
Windows Guest Yavaş Disk I/O
Sebebi muhtemelen virtio-blk yerine emülasyon IDE/SATA kullanılıyor. Fedora'nın virtio-win.iso'sundan virtio driver yüklenmeli, disk virtio-scsi bus'a alınmalıdır.
Bridge Network Çalışmıyor
# IP forward kontrol
sysctl net.ipv4.ip_forward
# 1 olmalı
# Geçici
sudo sysctl -w net.ipv4.ip_forward=1
# Kalıcı
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-kvm.conf
virbr0 köprüsünde iptables MASQUERADE kuralları doğrulanmalı.
GPU Passthrough Hatası
IOMMU aktif değil veya cihaz IOMMU grubu paylaşılıyor. Kernel cmdline'a intel_iommu=on iommu=pt eklenip reboot edilmelidir. Aynı IOMMU grubundaki tüm cihazların birlikte passthrough edilmesi gerekir.
VM Boot Etmiyor — "qemu-kvm: KVM not supported"
Host CPU'da VT-x/AMD-V kapalı (BIOS) veya KVM modülü yüklü değil:
grep -E 'vmx|svm' /proc/cpuinfo
# çıktı yoksa BIOS'tan VT-x / AMD-V aktif edilmeli
Sık Sorulan Sorular
KVM ve QEMU arasındaki fark nedir?
KVM, Linux kernel'ı bir hipervizöre dönüştüren kernel modülüdür; CPU sanallaştırma + bellek yönetimini ele alır. QEMU ise userspace bir program olarak çevre birim donanımı (disk denetleyici, NIC, chipset, BIOS) emüle eder. qemu-kvm paketi, QEMU'nun KVM hızlandırması ile derlenmiş halidir. İkisi birlikte çalışarak tam bir sanallaştırma yığını oluşturur.
libvirt yerine doğrudan QEMU komut satırı yeterli mi?
Tek bir test VM için evet. Üretimde değil: libvirt, XML domain tanımı, virsh CLI, snapshot yönetimi, ağ ve depolama soyutlamaları, REST API ve grafik yönetim araçları (virt-manager) gibi onlarca özelliği bir arada sunar. Çıplak QEMU komutu, libvirt'in tek bir komutla yaptığını 20-30 parametrelik komut satırlarıyla yönetmenizi gerektirir.
KVM Windows guest'leri destekliyor mu?
Evet. Windows 7'den Windows Server 2022'ye kadar tüm modern Windows sürümleri KVM altında çalışır. Sürücü tarafında Fedora'nın virtio-win.iso'su kullanılarak virtio-net, virtio-scsi, virtio-balloon, virtio-rng driver'ları yüklenir; aksi takdirde tam emülasyon kullanılır ve performans %20-30 kayıp yaşar. Buyukweb VDS paketlerinde Windows Server kurulumu için bu paravirt sürücü desteği ile başlangıç imajları hazır gelir.
KVM'de canlı yedekleme (live backup) nasıl yapılır?
qemu-guest-agent guest içinde çalışıyorsa, libvirt virsh dompmsuspend --target disk veya snapshot tabanlı yaklaşımlarla dosya sistemini bir anlığına dondurup tutarlı bir disk imajı alabilirsiniz. Yaygın akış: snapshot oluştur → qemu-img convert ile snapshot diski yedek depoya kopyala → snapshot'ı merge et. Üretim ortamlarında bu zinciri otomatize eden araçlar (virt-backup, bareos, borgbackup) kullanılır.
KVM Type 1 mi Type 2 mi?
Tartışmalı bir sınıflandırma. Klasik kitap tanımıyla Type 2'dir (Linux host OS üzerinde modül olarak çalışır). Performans karakteristikleri ise Type 1'dir; çünkü Linux kernel zaten doğrudan donanım üzerinde çalışır, KVM modülü kernel'in bir uzantısıdır. Pratik karşılaştırmalarda KVM, VMware ESXi ve Hyper-V ile aynı performans sınıfında değerlendirilir. Bazı kaynaklar bu hibrit durumu "Type 1.5" olarak nitelendirir.
KVM, modern Linux-tabanlı sanallaştırma altyapısının fiili standardıdır. Açık kaynak doğası, geniş guest OS desteği, virtio paravirt performansı, VFIO/SR-IOV passthrough esnekliği ve libvirt yönetim ekosistemi ile hem küçük lab senaryolarında hem de hyperscale bulut platformlarında kendine yer bulur. Buyukweb VDS müşterilerine sunulan root erişim + garanti edilmiş kaynak + NVMe SSD + Bursa Pendc Tier 3 datacenter kombinasyonu, KVM hipervizörünün özelliklerinden tam olarak yararlanır. Sanallaştırma çözümleri ile ilgili sorularınız için 0850 302 60 70 numaralı destek hattımız 7/24 hizmetinizdedir.
İlgili Büyükweb Hizmetleri
Türkiye Tier 3 veri merkezinde KVM tabanlı VDS ve özel paketler:
- VDS Sunucu (KVM tabanlı)
- E5V4 VDS (Xeon E5-v4 Broadwell-EP)
- E5V2 VDS
- Nested Sunucu (VT-x geçişli, nested KVM)
- VPS Sunucu
- Türkiye VDS
- Ucuz VDS Paketleri
- Paket Karşılaştırma
Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.
VDS & VPS Rehberi İlgili Hizmetlerimiz
Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin
Etiketler:


