Tüm eğitimler
TEKNİK REHBER GÖMÜLÜ LİNUX KVM 2026

KVM Sanallaştırma
Linux Hypervisor

Linux kernel içindeki Type-1 hypervisor — QEMU/KVM, virtio sürücüleri, libvirt, PCIe passthrough ve otomotiv IVI platformlarında gerçek zamanlı guest.

00 KVM mimarisi

KVM (Kernel-based Virtual Machine), Linux kernel'ını tam teşekküllü bir hypervisor'a dönüştüren bir çekirdek modülüdür. Intel VT-x ve AMD-V donanım sanallaştırma uzantılarını kullanır.

Type-1 vs Type-2 hypervisor

TürTanımÖrnekPerformans
Type-1 (bare-metal)Doğrudan donanım üzerinde çalışır; OS yokturVMware ESXi, Xen (dom0), Hyper-VYüksek — doğrudan donanım erişimi
Type-2 (hosted)Var olan OS üzerinde çalışırVirtualBox, VMware WorkstationDüşük — host OS overhead'ı
KVM (hybrid)Linux kernel modülü; host OS = hypervisorKVM + QEMUType-1'e yakın — HW sanallaştırma

KVM, Linux kernel'ını Type-1 hypervisor'a dönüştürür. kvm.ko modülü yüklendikten sonra Linux hem normal OS görevi görür hem de VM'leri çalıştırır. Her VM, kernel tarafından özel izinlerle yönetilen bir process olarak görünür.

/dev/kvm arayüzü

bash — KVM varlığını doğrula
# Intel VT-x / AMD-V desteğini kontrol et
egrep -c '(vmx|svm)' /proc/cpuinfo
# 0: sanallaştırma yok, >0: destekli

# kvm-ok aracı (cpu-checker paketi)
sudo apt install cpu-checker
kvm-ok
# INFO: /dev/kvm exists
# KVM acceleration can be used

# KVM modülünü yükle
sudo modprobe kvm
sudo modprobe kvm_intel    # Intel için
sudo modprobe kvm_amd      # AMD için

# /dev/kvm yetki kontrolü
ls -la /dev/kvm
# crw-rw---- 1 root kvm 10, 232 ...
sudo usermod -aG kvm $USER   # kullanıcıyı kvm grubuna ekle

KVM mimarisi — VM çalıştırma akışı

QEMU (userspace) → /dev/kvm ioctl → kvm.ko → VT-x VMLAUNCH → Guest code → VM-exit → kvm.ko handler → QEMU emulation → tekrar
VMX root mode (host)Normal kernel + userspace modu; VMLAUNCH/VMRESUME ile guest'e geçilir
VMX non-root mode (guest)Guest OS ve uygulamaları bu modda çalışır; bazı işlemler VM-exit tetikler
VM-exitPrivileged instruction, I/O, interrupt gibi durumlar guest'ten host'a geçişe neden olur
VMCS (VM Control Structure)Her vCPU için donanım state machine — register'lar, I/O bitmap, MSR bitmap

ARM v8 EL2 (KVM/ARM)

ARM mimarisinde sanallaştırma EL2 (Exception Level 2) ile sağlanır. KVM/ARM, Cortex-A ve server sınıfı ARM64 işlemcilerinde çalışır. QEMU ile -M virt -cpu cortex-a57 kombinasyonu ARM64 guest'leri çalıştırır.

Bu bölümde

  • KVM: Linux modülü olarak Type-1 hypervisor — host OS = hypervisor
  • /dev/kvm: QEMU → kernel arasındaki ioctl arayüzü
  • Intel VT-x: vmx; AMD-V: svm — /proc/cpuinfo ile kontrol
  • ARM EL2: ARM64 sunucularda KVM; QEMU -M virt ile kullanım

01 QEMU + KVM

QEMU, cihaz emülasyonu ve VM yaşam döngüsü yönetimi yapan userspace programdır. KVM ile birlikte CPU işlemleri donanım hızında çalışır; yalnızca I/O emüle edilir.

Temel QEMU + KVM kullanımı

bash — QEMU KVM kurulumu ve ilk VM
# QEMU kurulumu
sudo apt install qemu-kvm qemu-utils virtinst

# Hızlı Alpine VM başlat (ISO ile)
qemu-system-x86_64 \
  -enable-kvm \
  -m 1024 \
  -smp 2 \
  -cdrom alpine-virt-3.19.0-x86_64.iso \
  -nographic

# Disk imajı oluştur ve VM başlat
qemu-img create -f qcow2 vm.qcow2 20G

qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 \
  -smp 4 \
  -drive file=vm.qcow2,format=qcow2,if=virtio \
  -cdrom ubuntu-22.04-server.iso \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2222-:22 \
  -nographic

# Kurulu sistemi başlat
qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 \
  -smp 4 \
  -drive file=vm.qcow2,format=qcow2,if=virtio \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2222-:22 \
  -nographic \
  -serial mon:stdio

KVM hızlandırmasını doğrulama

bash — KVM performans doğrulama
# Guest içinde: sanallaştırma tespit
systemd-detect-virt
# kvm

# CPUID kontrol (guest içinde)
cpuid | grep -i hypervisor

# dmesg'de KVM hypervisor mesajı
dmesg | grep -i kvm
# [    0.000000] Hypervisor detected: KVM

# KVM paravirt clock (yüksek çözünürlüklü zaman)
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
# kvm-clock

Önemli QEMU bayrakları

BayrakAçıklamaÖrnek
-enable-kvmKVM hızlandırmasını etkinleştir-enable-kvm
-cpuvCPU modeli-cpu host (host özelliklerini aktar)
-smpvCPU sayısı ve topoloji-smp 4,sockets=1,cores=2,threads=2
-mRAM miktarı-m 2G veya -m 2048M
-driveDisk bağlantısı-drive file=disk.qcow2,if=virtio
-netAğ adaptörü-net nic,model=virtio -net bridge,br=br0
-nographicGrafik yok, konsol STDIOHeadless server
-daemonizeArka planda çalış-daemonize -pidfile /run/vm.pid
-monitorQEMU monitor bağlantısı-monitor unix:/tmp/qemu.sock,server

Bu bölümde

  • QEMU + -enable-kvm: CPU işlemleri donanım hızında; I/O emüle edilir
  • -cpu host: host CPU özelliklerini guest'e geç — performans için önerilir
  • qemu-img create: qcow2 format — thin-provisioned, snapshot destekli
  • systemd-detect-virt: guest'te KVM'i doğrula; kvm-clock: yüksek çözünürlüklü saat

02 Virtio sürücüleri

Virtio, hypervisor ile guest arasında yüksek performanslı I/O için tasarlanmış paravirtualization standardıdır. Tam emülasyon yerine guest ve host arasında protokol düzeyinde işbirliği yapar.

Paravirtualization vs tam emülasyon

YaklaşımNasıl çalışırPerformansUyumluluk
Tam emülasyon (e1000, IDE)QEMU gerçek donanım davranışını taklit ederDüşük — her I/O VM-exit + emülasyonYüksek — modifiye edilmemiş OS
Paravirtualization (virtio)Guest, hypervisor'ı biliyor; özel driver kullanırYüksek — optimize edilmiş I/O yoluOrta — guest'te virtio driver gerekli

Temel virtio cihazları

bash — virtio cihaz örnekleri
# virtio-blk: disk (en yüksek I/O throughput)
qemu-system-x86_64 \
  -drive file=disk.qcow2,format=qcow2,if=virtio \
  ...

# virtio-scsi: çok disk, SCSI komutları
qemu-system-x86_64 \
  -device virtio-scsi-pci \
  -drive file=disk.qcow2,if=none,id=disk0 \
  -device scsi-hd,drive=disk0 \
  ...

# virtio-net: ağ adaptörü
qemu-system-x86_64 \
  -device virtio-net-pci,netdev=net0 \
  -netdev bridge,id=net0,br=br0 \
  ...

# virtio-console: seri konsol
qemu-system-x86_64 \
  -device virtio-serial \
  -device virtconsole,chardev=con0 \
  -chardev socket,id=con0,server=on,wait=off,path=/tmp/console.sock \
  ...

# virtio-balloon: dinamik bellek
qemu-system-x86_64 \
  -device virtio-balloon \
  ...

vhost-net — kernel bypass

vhost-net, virtio-net'in kernel içi implementasyonudur. Ağ paketleri QEMU userspace'ten geçmez; kernel doğrudan guest ring buffer'ını işler. Özellikle yüksek paket hızı (10G+) uygulamalarında kritik fark yaratır.

bash — vhost-net etkinleştirme
# vhost-net kernel modülünü yükle
sudo modprobe vhost-net
ls /dev/vhost-net

# QEMU'da vhost-net kullan
qemu-system-x86_64 \
  -device virtio-net-pci,netdev=net0 \
  -netdev bridge,id=net0,br=br0,vhost=on \
  ...

# Guest içinde virtio sürücüleri doğrula
lspci | grep -i virtio
# 00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
# 00:04.0 SCSI storage controller: Red Hat, Inc. Virtio block device

Bu bölümde

  • Virtio: paravirtualization — guest hypervisor'ı biliyor, optimize I/O yolu
  • virtio-blk: disk; virtio-net: ağ; virtio-console: seri port; virtio-balloon: RAM
  • vhost-net: ağ işlemlerini kernel'a taşır — QEMU bypass, düşük latency
  • Linux guest'te virtio driver'lar kernel'da mevcut — ekstra kurulum gerekmez

03 libvirt ve virsh

libvirt, KVM/QEMU'nun üzerinde oturan VM yönetim katmanıdır. virsh komut satırı aracı, libvirt API'sini kullanarak VM'leri XML ile tanımlar ve yönetir.

libvirt kurulumu

bash — libvirt kurulumu
# Ubuntu/Debian
sudo apt install libvirt-daemon-system libvirt-clients virt-manager

# Servis başlat
sudo systemctl enable --now libvirtd

# Kullanıcıyı libvirt grubuna ekle
sudo usermod -aG libvirt $USER

# Bağlantıyı doğrula
virsh -c qemu:///system version
# Compiled against library: libvirt 8.0.0

Domain XML anatomisi

xml — domain tanımı (özet)
<domain type='kvm'>
  <name>alpine-test</name>
  <memory unit='MiB'>1024</memory>
  <currentMemory unit='MiB'>1024</currentMemory>
  <vcpu placement='static'>2</vcpu>

  <os>
    <type arch='x86_64' machine='pc-q35-6.2'>hvm</type>
    <boot dev='hd'/>
  </os>

  <features>
    <acpi/> <apic/>
  </features>

  <cpu mode='host-passthrough' check='none'/>

  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>

  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none' io='native'/>
      <source file='/var/lib/libvirt/images/alpine.qcow2'/>
      <target dev='vda' bus='virtio'/>
    </disk>

    <interface type='bridge'>
      <source bridge='br0'/>
      <model type='virtio'/>
    </interface>

    <serial type='pty'>
      <target port='0'/>
    </serial>

    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
  </devices>
</domain>

virsh temel komutları

bash — virsh komutları
# VM tanımla (XML dosyasından)
virsh define alpine.xml

# VM başlat
virsh start alpine-test

# Tüm VM'leri listele
virsh list --all

# VM konsola bağlan
virsh console alpine-test   # Ctrl+] ile çık

# Düzgün kapat
virsh shutdown alpine-test

# Zorla kapat
virsh destroy alpine-test

# VM sil (disk dahil)
virsh undefine alpine-test --remove-all-storage

# Anlık görüntü (snapshot)
virsh snapshot-create-as alpine-test snap1 "Temiz kurulum" --disk-only
virsh snapshot-list alpine-test
virsh snapshot-revert alpine-test snap1

# Canlı göç (live migration) — iki host arasında
virsh migrate --live alpine-test qemu+ssh://host2/system

Bu bölümde

  • libvirt: KVM/QEMU yönetim API'si; virsh CLI, virt-manager GUI
  • Domain XML: VM'nin tüm konfigürasyonu — CPU, RAM, disk, ağ, cihazlar
  • virsh define/start/shutdown/destroy: VM yaşam döngüsü
  • snapshot-create-as: anlık görüntü; migrate --live: sıcak göç

04 vCPU pinning ve NUMA

Gerçek zamanlı ve yüksek performanslı VM'lerde vCPU'ları belirli fiziksel CPU'lara sabitlemek (pinning) ve NUMA topolojisine uygun bellek tahsisi kritik öneme sahiptir.

vCPU pinning — XML ile

xml — vCPU pinning konfigürasyonu
<domain type='kvm'>
  <vcpu placement='static'>4</vcpu>

  <!-- vCPU'ları fiziksel CPU'lara sabitle -->
  <cputune>
    <vcpupin vcpu='0' cpuset='2'/>   <!-- vCPU 0 → pCPU 2 -->
    <vcpupin vcpu='1' cpuset='3'/>   <!-- vCPU 1 → pCPU 3 -->
    <vcpupin vcpu='2' cpuset='4'/>
    <vcpupin vcpu='3' cpuset='5'/>
    <emulatorpin cpuset='0-1'/>       <!-- QEMU emulator thread'leri için -->
  </cputune>

  <!-- Hugepage backed memory -->
  <memoryBacking>
    <hugepages>
      <page size='2048' unit='KiB'/>   <!-- 2 MB hugepage -->
    </hugepages>
    <nosharepages/>
    <locked/>
  </memoryBacking>

  <numatune>
    <memory mode='strict' nodeset='0'/>   <!-- NUMA node 0'dan bellek -->
  </numatune>
</domain>

Hugepage hazırlığı

bash — hugepage konfigürasyonu
# 2MB hugepage sayısını ayarla (1024 * 2MB = 2GB)
sudo sysctl vm.nr_hugepages=1024

# Kalıcı konfigürasyon
echo "vm.nr_hugepages=1024" | sudo tee /etc/sysctl.d/99-hugepages.conf

# Hugepage durumunu kontrol et
cat /proc/meminfo | grep -i huge
# HugePages_Total:    1024
# HugePages_Free:     1024
# Hugepagesize:       2048 kB

# 1GB hugepage (NUMA destekli sistemlerde)
sudo sysctl vm.nr_hugepages=2   # 2 * 1GB = 2GB
# ya da kernel parametresi:
# hugepagesz=1G hugepages=2

# NUMA topolojisini incele
numactl --hardware
numactl --show

Runtime CPU pinning

bash — virsh CPU pinning
# Çalışan VM'in vCPU'larını sabitle
virsh vcpupin alpine-test 0 2    # vCPU 0 → pCPU 2
virsh vcpupin alpine-test 1 3    # vCPU 1 → pCPU 3

# Mevcut CPU pinning'i göster
virsh vcpuinfo alpine-test

# numactl ile process bağla (QEMU süreci)
QEMU_PID=$(virsh dominfo alpine-test | grep "CPU time" | ...)
numactl --cpubind=0 --membind=0 qemu-system-x86_64 ...

# CPU izolasyonu (isolcpus) — kernel parametresi
# GRUB_CMDLINE_LINUX="isolcpus=2,3,4,5 nohz_full=2,3,4,5 rcu_nocbs=2,3,4,5"

Bu bölümde

  • vCPU pinning: vCPU N → pCPU M; NUMA-aware düzenle — cache thrash önlenir
  • Hugepages: TLB miss azaltır — 2MB veya 1GB; VM için locked memory
  • numatune strict: belleği tek NUMA node'a kısıtla — cross-NUMA gecikmeyi önler
  • isolcpus kernel parametresi: pCPU'ları OS zamanlayıcısından ayır

05 PCIe passthrough — VFIO

VFIO (Virtual Function I/O), PCIe cihazlarını (GPU, NIC, NVMe) doğrudan guest'e geçirmeyi sağlar. Guest, cihaza neredeyse bare-metal performansıyla erişir.

IOMMU etkinleştirme

bash — IOMMU konfigürasyonu
# GRUB kernel parametreleri ekle:
# Intel: intel_iommu=on iommu=pt
# AMD:   amd_iommu=on iommu=pt

sudo vim /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt"
sudo update-grub
sudo reboot

# IOMMU aktif olduğunu doğrula
dmesg | grep -e DMAR -e IOMMU
# [    0.000000] ACPI: DMAR 0x00000000BFAF1890 000088 (v01 ...)
# [    0.326874] Intel-IOMMU: enabled

# IOMMU gruplarını listele
for g in /sys/kernel/iommu_groups/*; do
    echo "Group $(basename $g):"
    ls $g/devices/
done

VFIO ile cihaz ayırma

bash — GPU passthrough örneği
# Passthrough yapılacak cihazı bul (örnek: GPU)
lspci -nn | grep NVIDIA
# 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation [10de:2204]
# 01:00.1 Audio device [0403]: NVIDIA Corporation [10de:1aef]

# VFIO modüllerini yükle
sudo modprobe vfio-pci

# Cihazı VFIO'ya bağla (GPU+Audio — aynı IOMMU grubunda)
echo "10de 2204" | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id
echo "10de 1aef" | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id

# Ya da mevcut sürücüyü önce ayır
echo "0000:01:00.0" | sudo tee /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/bind

# QEMU'da GPU passthrough
qemu-system-x86_64 \
  -enable-kvm \
  -m 8G \
  -device vfio-pci,host=01:00.0,multifunction=on \
  -device vfio-pci,host=01:00.1 \
  ...

NIC passthrough (SR-IOV)

bash — SR-IOV sanal fonksiyon
# SR-IOV destekli NIC'de sanal fonksiyon oluştur
echo 4 | sudo tee /sys/class/net/eth0/device/sriov_numvfs

# VF'leri listele
lspci | grep "Virtual Function"

# VF'yi VFIO'ya bağla ve VM'e geç
echo "0000:00:10.1" | sudo tee /sys/bus/pci/drivers/vfio-pci/bind

qemu-system-x86_64 \
  -enable-kvm \
  -device vfio-pci,host=00:10.1 \
  ...

Bu bölümde

  • IOMMU: intel_iommu=on veya amd_iommu=on kernel parametresi — temel gereksinim
  • IOMMU grubu: aynı gruptaki tüm cihazlar birlikte geçirilmeli
  • vfio-pci: cihazı host sürücüsünden ayır, guest'e geç — neredeyse native performans
  • SR-IOV: tek fiziksel NIC'den çok sayıda sanal fonksiyon — her VM'e ayrı VF

06 Nested virtualization

Nested KVM, bir VM içinde başka VM çalıştırmayı sağlar. L0 (bare-metal host), L1 (nested hypervisor) ve L2 (guest içi guest) katmanlarından oluşur.

Nested KVM etkinleştirme

bash — nested virtualization
# Intel için nested etkinleştir
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel nested=1

# Kalıcı konfigürasyon
echo "options kvm_intel nested=1" | sudo tee /etc/modprobe.d/kvm-intel.conf

# AMD için
echo "options kvm_amd nested=1" | sudo tee /etc/modprobe.d/kvm-amd.conf

# Etkin olduğunu doğrula
cat /sys/module/kvm_intel/parameters/nested
# Y

# L1 VM'i nested özelliğiyle başlat
qemu-system-x86_64 \
  -enable-kvm \
  -cpu host \
  -m 4G \
  -drive file=nested-host.qcow2,if=virtio \
  ...

L0/L1/L2 katmanları

KatmanTanımRol
L0Bare-metal Linux hostGerçek donanım, kvm.ko modülü, VMCS sahibi
L1İlk seviye VM (nested hypervisor)L0'ın guest'i; kendi içinde KVM çalıştırır
L2İkinci seviye VML1'in guest'i; çift sanallaştırma katmanı
bash — L1 içinde L2 VM başlatma
# L1 VM içinde (nested hypervisor)
egrep '(vmx|svm)' /proc/cpuinfo
# vmx: host -cpu host ile aktarıldı

kvm-ok
# INFO: /dev/kvm exists — nested çalışıyor

# L1 içinde L2 VM başlat
qemu-system-x86_64 \
  -enable-kvm \
  -m 512M \
  -cdrom alpine.iso \
  -nographic

Kullanım senaryoları

CI/CD test altyapısıVM içinde VM testi — kuberentes node simülasyonu, hypervisor geliştirme, Vagrant içi KVM
Güvenlik araştırmasıKötü amaçlı yazılım analizi — iç içe izole ortam; L1 şüpheli, L0 gözlemci
Bulut geliştirmeAWS/GCP/Azure VM'lerinde KVM geliştirme — cloud provider'lar nested sanallaştırmayı destekler

Bu bölümde

  • options kvm_intel nested=1: L1'de /dev/kvm aktif — tek parametre
  • -cpu host: VMCS özelliklerini L1'e aktar — nested için zorunlu
  • L0/L1/L2: her geçiş ek VM-exit overhead'ı — üretim için kaçınılabilir
  • CI/CD ve güvenlik araştırması: nested KVM'in pratik kullanım alanları

07 Otomotif / embedded IVI

Automotive Grade Linux (AGL) ve benzeri platformlarda KVM, araç içi bilgi-eğlence sistemlerinde (IVI) izolasyon ve güvenlik için kullanılır. Gerçek zamanlı guest ve virtio-vsock önemli role sahiptir.

Otomotif KVM kullanım senaryosu

VMİşlevGereksinim
Guest 1 (Android Auto)Navigasyon, medya, sesYüksek performans GPU, latency tolerant
Guest 2 (RT Guest)CAN/LIN bus, ADAS, araç kontrolPREEMPT_RT, determinizm, watchdog
Guest 3 (Güvenlik)Firmware imza, TPM, HSMTrustZone / TEE izolasyonu
Host (AGL/Yocto)Donanım yönetimi, hypervisorKararlı, minimal yüzey

PREEMPT_RT guest konfigürasyonu

bash — RT guest için QEMU
# RT guest için vCPU pinning + realtime öncelik
qemu-system-x86_64 \
  -enable-kvm \
  -cpu host \
  -smp 2 \
  -m 1G \
  -realtime mlock=on \
  -drive file=rt-guest.qcow2,if=virtio,cache=none \
  -device virtio-serial \
  -device virtio-rng-pci \
  -nographic

# QEMU thread'lerini RT sched politikasıyla çalıştır
sudo chrt -f 80 -p $(pgrep -f "qemu-system-x86_64")

virtio-vsock — VM'ler arası iletişim

bash — vsock konfigürasyonu
# Host: vhost-vsock modülü
sudo modprobe vhost-vsock

# QEMU'da vsock ekle (her VM'in benzersiz CID'i olmalı)
qemu-system-x86_64 \
  -enable-kvm \
  -device vhost-vsock-pci,guest-cid=5 \
  ...

# Guest içinde vsock server (Python)
# import socket
# s = socket.socket(socket.AF_VSOCK, socket.SOCK_STREAM)
# s.bind((socket.VMADDR_CID_ANY, 1234))
# s.listen(1)

# Host'tan guest'e bağlan (CID 5, port 1234)
socat - VSOCK-CONNECT:5:1234

Bu bölümde

  • AGL + KVM: IVI sistemi — medya VM + RT kontrol VM + güvenlik VM izolasyonu
  • RT guest: PREEMPT_RT kernel + -realtime mlock=on + vCPU pinning
  • virtio-vsock: VM'ler arası lightweight socket — TCP/IP yok, overhead düşük
  • chrt -f ile QEMU thread'lerine SCHED_FIFO: RT host-guest iletişimi

08 Pratik uygulamalar

Üç senaryo: minimal Alpine VM, bridge ağ, cloud-init ile hızlı deploy ve ARM64 QEMU KVM.

Minimal Alpine VM

bash — Alpine Linux VM
# Alpine ISO indir
wget https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-virt-3.19.0-x86_64.iso

# Disk imajı oluştur
qemu-img create -f qcow2 alpine.qcow2 4G

# Kurulum
qemu-system-x86_64 \
  -enable-kvm \
  -m 512M \
  -smp 2 \
  -drive file=alpine.qcow2,format=qcow2,if=virtio \
  -cdrom alpine-virt-3.19.0-x86_64.iso \
  -boot d \
  -net nic,model=virtio \
  -net user \
  -nographic

# Kurulum tamamlandıktan sonra:
qemu-system-x86_64 \
  -enable-kvm \
  -m 512M \
  -smp 2 \
  -drive file=alpine.qcow2,format=qcow2,if=virtio \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2222-:22 \
  -nographic

# SSH bağlantısı
ssh -p 2222 root@localhost

Bridge ağ kurulumu

bash — br0 bridge konfigürasyonu
# Bridge oluştur
sudo ip link add br0 type bridge
sudo ip link set br0 up
sudo ip link set eth0 master br0
sudo ip addr add 192.168.1.1/24 dev br0

# Kalıcı (Netplan — Ubuntu)
# /etc/netplan/00-bridge.yaml:
# network:
#   ethernets:
#     eth0: {dhcp4: false}
#   bridges:
#     br0:
#       interfaces: [eth0]
#       dhcp4: true

# VM'i bridge'e bağla
qemu-system-x86_64 \
  -enable-kvm \
  -m 512M \
  -net nic,model=virtio,macaddr=52:54:00:12:34:56 \
  -net bridge,br=br0 \
  ...

cloud-init ile hızlı VM deploy

bash — cloud-init ile Ubuntu Server
# Ubuntu cloud image indir (cloud-init destekli)
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

# Disk imajını genişlet
qemu-img resize jammy-server-cloudimg-amd64.img +10G

# cloud-init user-data hazırla
cat > user-data <<'EOF'
#cloud-config
users:
  - name: ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-ed25519 AAAA... user@host
packages:
  - htop
  - vim
runcmd:
  - systemctl enable --now ssh
EOF

# cloud-init ISO oluştur
cloud-localds seed.img user-data

# VM başlat (cloud-init ilk boot'ta çalışır)
qemu-system-x86_64 \
  -enable-kvm \
  -m 2G \
  -smp 2 \
  -drive file=jammy-server-cloudimg-amd64.img,if=virtio \
  -drive file=seed.img,if=virtio \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2222-:22 \
  -nographic

ARM64 KVM — qemu-system-aarch64

bash — ARM64 VM (x86 host üzerinde)
# ARM64 QEMU (ARM host'ta KVM, x86'da emülasyon)
sudo apt install qemu-system-arm

# ARM64 cloud image indir
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img

# UEFI firmware (ARM64 için gerekli)
sudo apt install qemu-efi-aarch64

# ARM64 VM başlat
qemu-system-aarch64 \
  -M virt \
  -cpu cortex-a57 \
  -m 2G \
  -smp 4 \
  -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
  -drive file=jammy-server-cloudimg-arm64.img,if=virtio \
  -drive file=seed.img,if=virtio \
  -net nic,model=virtio \
  -net user,hostfwd=tcp::2223-:22 \
  -nographic

# ARM64 host'ta KVM hızlandırma ile:
qemu-system-aarch64 \
  -M virt \
  -enable-kvm \
  -cpu host \
  -m 2G \
  ...

Bu bölümde

  • Alpine: en küçük footprint — kurulum ~5 dk, 4GB disk yeterli
  • bridge br0: VM'ler gerçek ağa katılır — DHCP sunucu gerekebilir
  • cloud-init: ilk boot'ta user/ssh/package otomasyonu — sıfır elle müdahale
  • qemu-system-aarch64 -M virt -cpu cortex-a57: ARM64 emülasyon; ARM host'ta -enable-kvm