[TR] Virsh Nedir? KVM Tabanlı Sanallaştırma Ortamlarında Sanal Makine Yönetimi İpuçları

[TR] Virsh Nedir? KVM Tabanlı Sanallaştırma Ortamlarında Sanal Makine Yönetimi İpuçları

Linux tabanlı sanallaştırma altyapılarında KVM/QEMU kullanıyorsanız sistem yönetimi tarafında en sık karşılaşacağınız araçlardan biri virsh komutudur.

Virsh, libvirt altyapısı üzerinden sanal makineleri, sanal ağları, storage pool’ları, disk volume’lerini, snapshot’ları, checkpoint’leri, host cihazlarını ve hypervisor bağlantılarını yönetmek için kullanılan güçlü bir komut satırı aracıdır.

Virsh’i yalnızca “sanal makine açma kapatma komutu” olarak düşünmek doğru değildir. Bu araç sanal makinenin yaşam döngüsünden CPU ve bellek yapılandırmasına, disk yönetiminden network interface kontrolüne, backup ve migration süreçlerinden QEMU Guest Agent komutlarına kadar oldukça geniş bir yönetim alanı sunar.

Resmi libvirt dokümantasyonunda virsh, guest domain’leri yönetmek için kullanılan ana arayüz olarak tanımlanır. Buradaki domain ifadesi pratik kullanımda çoğu zaman sanal makine anlamına gelir. Bir domain adı, ID değeri veya UUID bilgisiyle yönetilebilir.

Genel kullanım yapısı şöyledir:

virsh [OPTION]... <command> <domain> [ARG]...

Örneğin:

virsh list --all
virsh dominfo web01
virsh shutdown web01

Bu komutlarda web01 yönetilecek sanal makinenin adıdır.

Virsh ve Libvirt İlişkisi

Virsh’in arka planında libvirt bulunur. Libvirt; KVM/QEMU, Xen, LXC, OpenVZ, VirtualBox, HPE Morpheus VM Essentials ve VMware ESX gibi farklı sanallaştırma teknolojileriyle ortak bir API üzerinden iletişim kurmayı sağlayan bir yönetim katmanıdır.

Bu yapı sayesinde sistem yöneticisi tek bir komut aracı olan virsh ile farklı sanallaştırma altyapılarını yönetebilir. KVM/QEMU ortamlarında virsh çoğunlukla libvirt daemon servisleri üzerinden hypervisor ile konuşur.

Basit akış şu şekildedir;

Kullanıcı -> virsh -> libvirt -> QEMU/KVM -> Sanal Makine

Bu nedenle virsh komutlarının çalışabilmesi için sistemde libvirt servislerinin çalışır durumda olması gerekir. Resmi notlarda da virsh işlemlerinin çoğunun çalışan bir libvirtd servisine bağlanmayı gerektirdiği birçok komutun da hypervisor ile iletişim kanalları nedeniyle root yetkisi gerektirebileceği belirtilir.

Virsh Kullanım Şekilleri

Virsh iki farklı şekilde kullanılabilir.

Birinci yöntem doğrudan shell üzerinden tek komut çalıştırmaktır.

virsh list --all

Bu kullanım script otomasyon ve hızlı kontrol işlemleri için idealdir.

İkinci yöntem ise virsh etkileşimli kabuğuna girmektir.

virsh

Ardından komutlar virsh prompt’u içerisinde çalıştırılır.

virsh # list --all
virsh # nodeinfo
virsh # quit

Etkileşimli moddan çıkmak için quit veya exit komutu kullanılır.

Virsh Bağlantı URI’leri

Virsh farklı hypervisor bağlantılarına URI yapısı ile bağlanabilir. KVM/QEMU ortamlarında en sık kullanılan bağlantılar şunlardır.

virsh -c qemu:///system

Bu bağlantı sistem genelindeki QEMU/KVM domain’lerini yönetmek için kullanılır. Genellikle sunucu ortamlarında tercih edilir ve root veya yetkili kullanıcı erişimi gerektirir.

virsh -c qemu:///session

Bu bağlantı ise normal kullanıcı oturumundaki QEMU/KVM domain’leri içindir.

Bağlı olunan URI’yi görmek için:

virsh uri

Resmi manpage’de yaygın bağlantı örnekleri arasında xen:///system, qemu:///system, qemu:///session ve lxc:///system yer alır.

Virsh Global Seçenekleri

Virsh çalıştırılırken bazı global seçenekler kullanılabilir:

SeçenekAçıklama
-c, --connect URIBelirtilen libvirt URI adresine bağlanır.
-d, --debug LEVELDebug seviyesini belirler.
-e, --escape stringConsole bağlantısı için escape karakterini değiştirir.
-h, --helpYardım çıktısını gösterir.
-k, --keepalive-intervalBağlantı canlılık kontrol aralığını belirler.
-K, --keepalive-countKaç cevapsız keepalive sonrası bağlantının kopmuş sayılacağını belirler.
-l, --log FILELog çıktısını dosyaya yazar.
-q, --quietGereksiz bilgilendirme mesajlarını azaltır.
-r, --readonlySalt okunur bağlantı açar.
-t, --timingHer komutun çalışma süresini gösterir.
--no-pkttyagentPolkit kimlik doğrulama ajanını devreye sokmaz.
-v, --versionVirsh/libvirt sürüm bilgisini gösterir.
-V, --version=longSürümle birlikte derleme seçeneklerini ve driver bilgilerini gösterir.

Örnek:

virsh -c qemu:///system list --all
virsh -r list --all
virsh -t dominfo web01
virsh --version
virsh -V

Generic Commands – Genel Virsh Komutları

Bu komutlar doğrudan tek bir sanal makineye bağlı değildir. Genellikle bağlantı, host bilgisi, CPU uyumluluğu, NUMA, hypervisor yetenekleri ve genel virsh oturumu için kullanılır.

Resmi manpage’de bu komut grubu “Generic Commands” olarak ayrılmıştır.

KomutAçıklama
helpTüm virsh komutlarını veya belirli bir komutun yardımını gösterir.
quit, exitEtkileşimli virsh kabuğundan çıkar.
versionVirsh, libvirt, API ve hypervisor sürüm bilgilerini gösterir.
cdVirsh kabuğu içindeki mevcut dizini değiştirir.
pwdMevcut çalışma dizinini gösterir.
connectHypervisor bağlantısını açar veya değiştirir.
uriBağlanılan hypervisor URI bilgisini gösterir.
hostnameHypervisor host adını gösterir.
sysinfoHypervisor sistem bilgisini XML olarak gösterir.
nodeinfoHost CPU, bellek ve temel donanım bilgilerini gösterir.
nodecpumapHost üzerindeki CPU haritasını gösterir.
nodecpustatsHost CPU istatistiklerini gösterir.
nodememstatsHost bellek istatistiklerini gösterir.
nodesevinfoAMD SEV güvenlik özellikleri hakkında bilgi verir.
nodesuspendHost sistemi uyku moduna alır.
node-memory-tuneHost üzerindeki KSM/shared memory parametrelerini yönetir.
capabilitiesHypervisor ve host yeteneklerini XML olarak gösterir.
domcapabilitiesDomain oluşturma yeteneklerini XML olarak gösterir.
pool-capabilitiesStorage pool yeteneklerini gösterir.
inject-nmiDomain’e NMI sinyali gönderir.
listDomain’leri listeler.
freecellNUMA cell bazında boş bellek bilgisini gösterir.
freepagesNUMA/page size bazında boş page bilgisini gösterir.
allocpagesHugepage/page allocation işlemleri için kullanılır.
cpu-baselineBirden fazla CPU tanımından ortak CPU modeli üretir.
cpu-compareVerilen CPU tanımını host CPU ile karşılaştırır.
cpu-modelsBelirli mimari için bilinen CPU modellerini listeler.
hypervisor-cpu-compareCPU uyumluluğunu hypervisor yetenekleriyle karşılaştırır.
hypervisor-cpu-baselineHypervisor yeteneklerini dikkate alan baseline CPU üretir.
hypervisor-cpu-modelsHypervisor tarafından bilinen CPU modellerini listeler.

Örnekler:

virsh help
virsh version --daemon
virsh uri
virsh hostname
virsh nodeinfo
virsh capabilities
virsh list --all
virsh cpu-models x86_64

Domain Commands – Sanal Makine Yönetim Komutları

Virsh’in en yoğun kullanılan bölümü Domain Commands grubudur. Libvirt terminolojisinde domain, çoğu pratik kullanımda sanal makine anlamına gelir. Bu komutlarla VM başlatma, kapatma, kaynak değiştirme, disk ve network bilgisi alma, snapshot, backup, migration, guest agent, event ve debug işlemleri yapılabilir.

Resmi manpage’de domain komutları oldukça geniş bir liste halinde verilir; bu bölümde tamamı işlevlerine göre gruplanmıştır.

1) Yaşam Döngüsü ve Temel VM Yönetimi

KomutAçıklama
startTanımlı fakat kapalı durumda olan domain’i başlatır.
shutdownGuest OS ile iletişim kurarak düzgün kapatma yapmaya çalışır.
destroyVM’i zorla kapatır. Fiziksel power-off gibi düşünülmelidir.
rebootVM’i yeniden başlatır.
resetVM’e donanımsal reset benzeri işlem uygular.
suspendÇalışan domain’i bellekte duraklatır.
resumeSuspend edilmiş domain’i devam ettirir.
saveÇalışan VM durumunu dosyaya kaydeder.
restoreDaha önce save ile alınmış VM durumunu geri yükler.
managedsaveVM durumunu libvirt yönetimli şekilde kaydeder.
managedsave-removeManaged save imajını siler.
managedsave-defineManaged save state XML tanımını değiştirir.
managedsave-dumpxmlManaged save XML bilgisini gösterir.
managedsave-editManaged save XML bilgisini düzenler.
undefineDomain tanımını libvirt’ten kaldırır.
autostartHost açıldığında VM’in otomatik başlamasını ayarlar.
domrenameKapalı domain’in adını değiştirir.

Örnekler:

virsh start web01
virsh shutdown web01
virsh destroy web01
virsh reboot web01
virsh suspend web01
virsh resume web01
virsh autostart web01
virsh autostart web01 --disable

shutdown düzgün kapatma yapmaya çalışır; destroy ise zorla kapatır. Bu nedenle production sistemlerde önce shutdown, son çare olarak destroy tercih edilmelidir.

2) Domain Oluşturma ve XML Yönetimi

KomutAçıklama
createXML dosyasından geçici veya tek seferlik domain başlatır.
defineXML dosyasındaki domain tanımını libvirt’e kaydeder fakat başlatmaz.
dumpxmlDomain XML yapılandırmasını gösterir.
editDomain XML yapılandırmasını editör ile düzenler.
descDomain açıklamasını veya başlığını gösterir/değiştirir.
metadataDomain üzerinde özel XML metadata bilgisini yönetir.
domxml-from-nativeNative hypervisor formatını libvirt XML formatına dönüştürür.
domxml-to-nativeLibvirt XML formatını native hypervisor formatına dönüştürür.

Örnekler:

virsh dumpxml web01 > web01.xml
virsh define web01.xml
virsh create web01.xml
virsh edit web01
virsh desc web01

define komutu kalıcı tanım oluşturur; create ise XML’den domain başlatır. Çalışan domain üzerinde XML değişikliği yapıldığında bazı ayarlar ancak bir sonraki açılışta etkili olur.

3) Domain Bilgi ve Durum Komutları

KomutAçıklama
dominfoDomain hakkında temel bilgileri gösterir.
domstateDomain’in durumunu gösterir.
domstatsCPU, bellek, disk ve network istatistiklerini gösterir.
domidDomain adından veya UUID’den ID bilgisini bulur.
domnameDomain ID veya UUID bilgisinden domain adını bulur.
domuuidDomain UUID bilgisini gösterir.
domhostnameDomain hostname bilgisini gösterir.
domtimeGuest zamanı ile ilgili bilgi alır veya zaman ayarı yapar.
domcontrolDomain kontrol arayüzünün durumunu gösterir.
domdisplayGrafik konsol bağlantı bilgisini gösterir.
domdisplay-reloadGrafik display yapılandırmasını yeniler.
ttyconsoleDomain’in TTY console cihazını gösterir.
vncdisplayVNC display bilgisini gösterir.
dommemstatDomain bellek istatistiklerini gösterir.

Örnekler:

virsh dominfo web01
virsh domstate web01 --reason
virsh domstats web01
virsh domuuid web01
virsh dommemstat web01
virsh vncdisplay web01

4) CPU, Bellek, NUMA ve Performans Komutları

KomutAçıklama
cpu-statsDomain CPU istatistiklerini gösterir.
vcpucountDomain üzerindeki vCPU sayılarını gösterir.
vcpuinfovCPU detaylarını listeler.
vcpupinvCPU’ları belirli fiziksel CPU’lara pinler.
setvcpusDomain için vCPU sayısını değiştirir.
setvcpuBelirli vCPU’ları enable/disable eder.
maxvcpusHypervisor tarafından desteklenen maksimum vCPU bilgisini gösterir.
emulatorpinEmulator thread’lerini belirli CPU’lara pinler.
iothreadaddDomain’e IOThread ekler.
iothreaddelDomain’den IOThread siler.
iothreadinfoIOThread bilgisini gösterir.
iothreadpinIOThread’i CPU’ya pinler.
iothreadsetIOThread parametrelerini değiştirir.
memtuneDomain bellek tuning parametrelerini gösterir/değiştirir.
setmemDomain belleğini değiştirir.
setmaxmemDomain maksimum bellek limitini ayarlar.
numatuneNUMA bellek yerleşim politikasını ayarlar.
perfDomain performans event sayaçlarını yönetir.
schedinfoScheduler parametrelerini gösterir veya değiştirir.

Örnekler:

virsh vcpuinfo web01
virsh vcpucount web01
virsh setvcpus web01 4 --config
virsh setmem web01 8G --config
virsh setmaxmem web01 16G --config
virsh vcpupin web01 0 0-3
virsh numatune web01
virsh perf web01

CPU ve bellek değişikliklerinde --live, --config ve --current parametrelerinin etkisi iyi bilinmelidir. --live çalışan VM’i, --config kalıcı yapılandırmayı etkiler.

5) Disk, Block Device ve I/O Komutları

KomutAçıklama
domblklistDomain’e bağlı diskleri listeler.
domblkinfoBelirli disk hakkında kapasite/boyut bilgisi verir.
domblkstatDisk I/O istatistiklerini gösterir.
domblkerrorDisk tarafında oluşan hataları gösterir.
domblkthresholdBlock device için threshold event yapılandırır.
blkdeviotuneBelirli block device için I/O limitlerini ayarlar.
blkiotuneDomain seviyesinde block I/O tuning yapar.
blockresizeÇalışan domain diskini yeniden boyutlandırır.
blockcopyÇalışan domain diskini başka bir hedefe kopyalar.
blockcommitBacking chain içeriğini alt/üst katmana commit eder.
blockpullBacking chain’den veriyi aktif imaja çeker.
blockjobDevam eden block job’ları izler, iptal eder veya yönetir.
domthrottlegroupsetDisk throttle group ayarı yapar.
domthrottlegroupdelDisk throttle group siler.
domthrottlegroupinfoThrottle group bilgisini gösterir.
domthrottlegrouplistThrottle group listesini gösterir.

Örnekler:

virsh domblklist web01
virsh domblklist web01 --details
virsh domblkinfo web01 vda
virsh domblkstat web01 vda
virsh domblkerror web01
virsh blockresize web01 vda 100G --extend
virsh blockjob web01 vda --info

blockresize ile disk büyütüldüğünde guest OS içinde partition ve filesystem genişletme işlemleri ayrıca yapılmalıdır. --extend kullanımı, yanlışlıkla küçültme kaynaklı veri kaybını önlemek için önemlidir.

6) Network Interface Komutları

KomutAçıklama
domiflistDomain’e bağlı network interface’leri listeler.
domifaddrDomain interface IP/MAC adreslerini gösterir.
domifstatInterface trafik istatistiklerini gösterir.
domiftuneInterface bandwidth/tuning ayarlarını yönetir.
domif-getlinkInterface link durumunu gösterir.
domif-setlinkInterface link durumunu up/down yapar.
domifannounceInterface bilgisini ağda duyurmak için kullanılır.

Örnekler:

virsh domiflist web01
virsh domifaddr web01
virsh domifstat web01 vnet0
virsh domif-getlink web01 vnet0
virsh domif-setlink web01 vnet0 down
virsh domif-setlink web01 vnet0 up

domifaddr komutu IP bilgisini DHCP lease, ARP veya QEMU Guest Agent gibi kaynaklardan alabilir. Bu nedenle bazı ortamlarda doğru sonuç için guest agent kurulu olmalıdır.

7) Guest Agent ve Guest İçinden Bilgi Alma

KomutAçıklama
guestinfoGuest agent üzerinden OS, disk, filesystem ve interface bilgilerini gösterir.
guestvcpusGuest OS perspektifinden vCPU durumunu gösterir/değiştirir.
guest-agent-timeoutGuest agent komutları için timeout değerini yönetir.
get-user-sshkeysGuest içindeki kullanıcı SSH key bilgisini alır.
set-user-sshkeysGuest içindeki kullanıcı SSH key bilgisini değiştirir.
set-user-passwordGuest içindeki kullanıcı parolasını değiştirir.

Örnekler:

virsh guestinfo web01
virsh guestvcpus web01
virsh guest-agent-timeout web01
virsh get-user-sshkeys web01 root
virsh set-user-password web01 root 'YeniParola'

Bu komutların önemli bir kısmı guest içinde QEMU Guest Agent kurulu ve çalışır durumda olduğunda anlamlı sonuç verir.

8) Filesystem Komutları

KomutAçıklama
domfsfreezeGuest filesystem’lerini freeze eder. Backup öncesi kullanılır.
domfsthawFreeze edilmiş filesystem’leri çözer.
domfsinfoGuest içindeki mounted filesystem listesini gösterir.
domfstrimGuest filesystem üzerinde TRIM/discard işlemi çalıştırır.

Örnekler:

virsh domfsfreeze web01
virsh domfsthaw web01
virsh domfsinfo web01
virsh domfstrim web01

Backup ve snapshot işlemlerinde filesystem tutarlılığı açısından domfsfreeze ve domfsthaw komutları önemlidir.

9) Backup ve Checkpoint ile İlgili Domain Komutları

KomutAçıklama
backup-beginDomain için backup job başlatır.
backup-dumpxmlDevam eden veya oluşturulan backup job XML bilgisini gösterir.

Örnekler:

virsh backup-begin web01 backup.xml
virsh backup-dumpxml web01

Bu komutlar genellikle incremental backup, checkpoint tabanlı yedekleme ve otomasyon senaryolarında kullanılır.

10) Migration Komutları

KomutAçıklama
migrateDomain’i başka bir host’a taşır.
migrate-compcacheMigration compression cache ayarlarını yönetir.
migrate-getmaxdowntimeLive migration için maksimum downtime bilgisini gösterir.
migrate-setmaxdowntimeLive migration maksimum downtime değerini ayarlar.
migrate-getspeedMigration bandwidth/speed limitini gösterir.
migrate-setspeedMigration bandwidth/speed limitini ayarlar.
migrate-postcopyDevam eden migration’ı post-copy moduna geçirir.

Örnekler:

virsh migrate --live web01 qemu+ssh://kvm02/system
virsh migrate-getspeed web01
virsh migrate-setspeed web01 100
virsh migrate-getmaxdowntime web01
virsh migrate-setmaxdowntime web01 500
virsh migrate-postcopy web01

Migration işlemlerinde CPU uyumluluğu, storage mimarisi, network bandwidth, libvirt/QEMU sürüm uyumluluğu ve shared storage durumu dikkatle değerlendirilmelidir.

11) Konsol, Event, Debug ve Gelişmiş Domain Komutları

KomutAçıklama
consoleDomain serial console bağlantısı açar.
screenshotDomain ekran görüntüsü alır.
send-keyGuest’e klavye tuş kombinasyonu gönderir.
send-process-signalGuest içindeki prosese sinyal gönderir.
dumpDomain memory/core dump alır.
eventDomain event’lerini izler.
awaitDomain üzerinde belirli event/durum bekler.
domjobinfoDomain üzerinde çalışan job bilgisini gösterir.
domjobabortDevam eden domain job’ını iptal eder.
domdirtyrate-calcLive migration için dirty page rate hesaplar.
domlaunchsecinfoLaunch security bilgisini gösterir.
domsetlaunchsecstateLaunch security state ayarı yapar.
set-lifecycle-actionDomain lifecycle event davranışını değiştirir.
dompmsuspendGuest’i power management suspend moduna alır.
dompmwakeupPower management suspend durumundaki guest’i uyandırır.

Örnekler:

virsh console web01
virsh screenshot web01 /tmp/web01.ppm
virsh send-key web01 KEY_LEFTCTRL KEY_LEFTALT KEY_DELETE
virsh event web01 --loop
virsh domjobinfo web01
virsh domjobabort web01
virsh domdirtyrate-calc web01

Device Commands – Sanal Makine Cihaz Yönetimi

Device komutları VM’e disk, network interface, CD-ROM, PCI device veya XML ile tanımlanmış başka cihazları eklemek, çıkarmak ve güncellemek için kullanılır. Resmi manpage’de bu grup ayrı başlık altında listelenmiştir.

KomutAçıklama
attach-deviceXML dosyasındaki device tanımını domain’e ekler.
attach-diskDomain’e disk ekler.
attach-interfaceDomain’e network interface ekler.
detach-deviceXML ile belirtilen device’ı domain’den çıkarır.
detach-device-aliasAlias bilgisine göre device çıkarır.
detach-diskDomain’den disk çıkarır.
detach-interfaceDomain’den network interface çıkarır.
update-deviceMevcut device yapılandırmasını XML ile günceller.
update-memory-deviceMemory device yapılandırmasını günceller.
change-mediaCD-ROM/floppy gibi removable media değiştirir.
dom-fd-associateDomain ile file descriptor ilişkilendirir.

Örnekler:

virsh attach-disk web01 /var/lib/libvirt/images/data.qcow2 vdb --persistent
virsh detach-disk web01 vdb --persistent
virsh attach-interface web01 network default --model virtio --persistent
virsh detach-interface web01 network --mac 52:54:00:aa:bb:cc --persistent
virsh change-media web01 hdc /iso/ubuntu.iso

Nodedev Commands – Host Donanım Cihazları

Nodedev komutları host üzerindeki fiziksel veya sanal cihazları yönetmek için kullanılır. PCI passthrough, SR-IOV ve mediated device gibi senaryolarda önemlidir.

KomutAçıklama
nodedev-createXML’den transient node device oluşturur.
nodedev-updateNode device bilgisini günceller.
nodedev-destroyNode device’ı durdurur/yok eder.
nodedev-defineNode device tanımı oluşturur.
nodedev-undefineNode device tanımını kaldırır.
nodedev-startTanımlı node device’ı başlatır.
nodedev-detachHost driver’dan ayırıp VM passthrough için hazırlar.
nodedev-dumpxmlNode device XML çıktısını gösterir.
nodedev-infoNode device hakkında bilgi verir.
nodedev-listHost üzerindeki node device’ları listeler.
nodedev-reattachAyrılmış cihazı tekrar host driver’a bağlar.
nodedev-resetNode device reset işlemi yapar.
nodedev-eventNode device event’lerini izler.
nodedev-autostartNode device autostart ayarını yönetir.

Örnekler:

virsh nodedev-list
virsh nodedev-dumpxml pci_0000_03_00_0
virsh nodedev-info pci_0000_03_00_0
virsh nodedev-detach pci_0000_03_00_0
virsh nodedev-reattach pci_0000_03_00_0
virsh nodedev-reset pci_0000_03_00_0

Yanlış cihazın detach edilmesi host erişimini veya storage/network bağlantısını etkileyebilir. Bu komutlar dikkatli kullanılmalıdır.

Virtual Network Commands – Sanal Ağ Yönetimi

Libvirt, sanal makineler için NAT, routed, isolated veya bridge tabanlı sanal network yapıları oluşturabilir. Bu yapılar virsh ile yönetilebilir.

KomutAçıklama
net-autostartNetwork’ün host açılışında otomatik başlamasını ayarlar.
net-createXML dosyasından geçici network başlatır.
net-defineXML dosyasından kalıcı network tanımlar.
net-descNetwork açıklamasını veya başlığını yönetir.
net-destroyAktif network’ü durdurur.
net-dumpxmlNetwork XML bilgisini gösterir.
net-editNetwork XML yapılandırmasını düzenler.
net-eventNetwork event’lerini izler.
net-infoNetwork hakkında temel bilgi verir.
net-listNetwork listesini gösterir.
net-metadataNetwork özel XML metadata bilgisini yönetir.
net-nameUUID’den network adını bulur.
net-startTanımlı network’ü başlatır.
net-undefineNetwork tanımını siler.
net-uuidNetwork UUID bilgisini gösterir.
net-updateNetwork yapılandırmasını runtime veya config düzeyinde günceller.
net-dhcp-leasesNetwork üzerindeki DHCP lease kayıtlarını gösterir.

Örnekler:

virsh net-list --all
virsh net-info default
virsh net-start default
virsh net-autostart default
virsh net-dumpxml default
virsh net-edit default
virsh net-dhcp-leases default

net-dhcp-leases, NAT network kullanan yapılarda VM’lerin aldığı IP adreslerini görmek için oldukça kullanışlıdır.

Network Port Commands – Network Port Yönetimi

Bu komutlar libvirt network port nesnelerini yönetmek için kullanılır.

KomutAçıklama
net-port-listBelirli network üzerindeki portları listeler.
net-port-createXML’den network port oluşturur.
net-port-dumpxmlNetwork port XML çıktısını gösterir.
net-port-deleteNetwork port siler.

Örnekler:

virsh net-port-list default
virsh net-port-dumpxml default <PORT_UUID>
virsh net-port-delete default <PORT_UUID>

Interface Commands – Host Network Interface Yönetimi

Bu komutlar host üzerindeki network interface yapılandırmalarını yönetmek için kullanılır. Yanlış bridge veya interface işlemleri host erişimini kesebilir.

KomutAçıklama
iface-bridgeFiziksel interface’i bridge içine alır.
iface-defineXML’den interface tanımlar.
iface-destroyInterface’i durdurur.
iface-dumpxmlInterface XML bilgisini gösterir.
iface-editInterface XML yapılandırmasını düzenler.
iface-listHost interface listesini gösterir.
iface-nameMAC adresinden interface adını bulur.
iface-macInterface adından MAC adresini bulur.
iface-startInterface’i başlatır.
iface-unbridgeBridge yapılandırmasını kaldırır.
iface-undefineInterface tanımını siler.
iface-beginInterface değişiklikleri için transaction başlatır.
iface-commitInterface transaction değişikliklerini uygular.
iface-rollbackInterface transaction değişikliklerini geri alır.

Örnekler:

virsh iface-list --all
virsh iface-dumpxml eno1
virsh iface-bridge eno1 br0
virsh iface-unbridge br0
virsh iface-begin
virsh iface-commit
virsh iface-rollback

Uzak bağlantı ile yönetilen production sunucularda bu komutlar bakım penceresi dışında kullanılmamalıdır.

Storage Pool Commands – Storage Pool Yönetimi

Storage pool, libvirt’in disk imajlarını veya volume’leri tuttuğu mantıksal depolama alanıdır. Directory, filesystem, iSCSI, LVM, RBD, ZFS veya Gluster gibi farklı pool tipleri kullanılabilir.

KomutAçıklama
find-storage-pool-sourcesBelirli pool tipi için kaynakları keşfeder.
find-pool-sources-asParametrelerle pool kaynaklarını arar.
pool-autostartPool’un otomatik başlamasını ayarlar.
pool-buildPool için gerekli altyapıyı hazırlar.
pool-createXML’den geçici pool oluşturur ve başlatır.
pool-create-asParametrelerle geçici pool oluşturur.
pool-defineXML’den kalıcı pool tanımlar.
pool-define-asParametrelerle kalıcı pool tanımlar.
pool-destroyPool’u durdurur; içindeki veriyi silmez.
pool-deletePool kaynaklarını siler; geri dönüşsüz olabilir.
pool-dumpxmlPool XML bilgisini gösterir.
pool-editPool XML yapılandırmasını düzenler.
pool-infoPool hakkında temel bilgi verir.
pool-listPool listesini gösterir.
pool-nameUUID’den pool adını bulur.
pool-refreshPool içindeki volume listesini yeniler.
pool-startTanımlı fakat pasif pool’u başlatır.
pool-undefinePasif pool tanımını siler.
pool-uuidPool UUID bilgisini gösterir.
pool-eventPool event’lerini izler.

Örnekler:

virsh pool-list --all
virsh pool-info default
virsh pool-refresh default
virsh pool-start default
virsh pool-autostart default
virsh pool-dumpxml default
virsh pool-edit default

pool-destroy yalnızca pool’u durdurur; pool-delete ise pool kaynaklarını silebilir. Bu ayrım veri kaybını önlemek açısından kritiktir.

Volume Commands – Disk İmajı ve Volume Yönetimi

Volume, storage pool içinde bulunan disk imajı veya block aygıtıdır.

KomutAçıklama
vol-createXML’den volume oluşturur.
vol-create-fromMevcut volume’den yeni volume oluşturur.
vol-create-asParametrelerle volume oluşturur.
vol-cloneVolume klonlar.
vol-deleteVolume siler.
vol-uploadDosyadan volume içine veri yükler.
vol-downloadVolume içeriğini dosyaya indirir.
vol-wipeVolume içeriğini güvenli şekilde temizler.
vol-dumpxmlVolume XML bilgisini gösterir.
vol-infoVolume hakkında bilgi verir.
vol-listPool içindeki volume’leri listeler.
vol-poolVolume’ün ait olduğu pool’u gösterir.
vol-pathVolume path bilgisini gösterir.
vol-nameVolume adını gösterir.
vol-keyVolume key bilgisini gösterir.
vol-resizeVolume boyutunu değiştirir.

Örnekler:

virsh vol-list default
virsh vol-info web01.qcow2 --pool default
virsh vol-path web01.qcow2 --pool default
virsh vol-create-as default data01.qcow2 100G --format qcow2
virsh vol-clone web01.qcow2 web01-clone.qcow2 --pool default
virsh vol-delete data01.qcow2 --pool default

vol-delete doğrudan disk imajını silebileceği için çalıştırmadan önce pool adı, volume adı ve path bilgisi mutlaka doğrulanmalıdır.

Secret Commands – Gizli Veri Yönetimi

Libvirt secret yapısı; Ceph/RBD, iSCSI CHAP, disk encryption ve benzeri senaryolarda kimlik bilgilerini saklamak için kullanılır.

KomutAçıklama
secret-defineXML’den secret tanımlar.
secret-dumpxmlSecret XML bilgisini gösterir.
secret-eventSecret event’lerini izler.
secret-set-valueSecret değerini ayarlar.
secret-get-valueSecret değerini gösterir.
secret-undefineSecret kaydını siler.
secret-listSecret listesini gösterir.

Örnekler:

virsh secret-list
virsh secret-dumpxml <SECRET_UUID>
virsh secret-set-value <SECRET_UUID> --file secret.txt
virsh secret-get-value <SECRET_UUID>

Parola veya anahtar gibi hassas değerlerin doğrudan komut satırında verilmesi güvenlik açısından önerilmez. Dosya üzerinden değer vermek daha sağlıklı bir yaklaşımdır.

Snapshot Commands – Snapshot Yönetimi

Snapshot, domain’in disk, bellek ve cihaz durumunu belirli bir anda kaydetmek için kullanılır. Güncelleme öncesi geri dönüş noktası oluşturma veya test ortamlarında hızlı geri alma işlemleri için kullanışlıdır.

KomutAçıklama
snapshot-createXML dosyasıyla snapshot oluşturur.
snapshot-create-asParametrelerle snapshot oluşturur.
snapshot-currentMevcut/current snapshot bilgisini gösterir veya değiştirir.
snapshot-editSnapshot XML bilgisini düzenler.
snapshot-infoSnapshot hakkında bilgi verir.
snapshot-listDomain snapshot listesini gösterir.
snapshot-dumpxmlSnapshot XML çıktısını gösterir.
snapshot-parentSnapshot parent bilgisini gösterir.
snapshot-revertDomain’i snapshot’a geri döndürür.
snapshot-deleteSnapshot siler.

Örnekler:

virsh snapshot-create-as web01 before-update "Patch öncesi snapshot"
virsh snapshot-list web01
virsh snapshot-info web01 before-update
virsh snapshot-dumpxml web01 before-update
virsh snapshot-revert web01 before-update
virsh snapshot-delete web01 before-update

snapshot-revert, snapshot sonrası yapılan değişiklikleri kaybettirebilir. Production sistemlerde dikkatli kullanılmalıdır.

Checkpoint Commands – Incremental Backup İçin Checkpoint Yönetimi

Checkpoint, özellikle incremental backup senaryolarında hangi blokların değiştiğini takip etmek için kullanılır.

KomutAçıklama
checkpoint-createXML’den checkpoint oluşturur.
checkpoint-create-asParametrelerle checkpoint oluşturur.
checkpoint-editCheckpoint XML bilgisini düzenler.
checkpoint-infoCheckpoint hakkında bilgi verir.
checkpoint-listCheckpoint listesini gösterir.
checkpoint-dumpxmlCheckpoint XML çıktısını gösterir.
checkpoint-parentParent checkpoint bilgisini gösterir.
checkpoint-deleteCheckpoint siler.

Örnekler:

virsh checkpoint-create-as web01 backup-checkpoint-01
virsh checkpoint-list web01
virsh checkpoint-info web01 backup-checkpoint-01
virsh checkpoint-dumpxml web01 backup-checkpoint-01
virsh checkpoint-delete web01 backup-checkpoint-01

Snapshot geri dönüş noktası mantığıyla kullanılırken, checkpoint daha çok incremental backup ve değişen blok takibi için önemlidir.

NWFilter Commands – Network Filter Yönetimi

NWFilter, sanal makinelerin ağ trafiği üzerinde filtreleme kuralları uygulamak için kullanılır. MAC spoofing veya IP spoofing engelleme gibi güvenlik senaryolarında tercih edilebilir.

KomutAçıklama
nwfilter-defineXML’den network filter tanımlar.
nwfilter-undefineNetwork filter siler.
nwfilter-listNetwork filter listesini gösterir.
nwfilter-dumpxmlNetwork filter XML çıktısını gösterir.
nwfilter-editNetwork filter XML bilgisini düzenler.

Örnekler:

virsh nwfilter-list
virsh nwfilter-dumpxml clean-traffic
virsh nwfilter-edit clean-traffic
virsh nwfilter-define filter.xml
virsh nwfilter-undefine filter-name

Yanlış NWFilter kuralı VM’in network erişimini kesebilir. Değişiklik öncesi XML çıktısı yedeklenmelidir.

NWFilter Binding Commands – Network Filter Bağlantıları

Bu komutlar network port ile network filter arasındaki binding ilişkilerini yönetir.

KomutAçıklama
nwfilter-binding-createNetwork port ile network filter arasında binding oluşturur.
nwfilter-binding-deletePort üzerindeki filter binding ilişkisini kaldırır.
nwfilter-binding-listFilter binding uygulanmış portları listeler.
nwfilter-binding-dumpxmlBinding XML bilgisini gösterir.

Örnekler:

virsh nwfilter-binding-list
virsh nwfilter-binding-dumpxml <PORT_DEVICE>
virsh nwfilter-binding-create binding.xml
virsh nwfilter-binding-delete <PORT_DEVICE>

Bu komutlar genellikle gelişmiş network güvenliği ve özel TAP/port filtreleme senaryolarında kullanılır.

Hypervisor-Specific Commands – Hypervisor’a Özel Komutlar

Bu komutlar doğrudan QEMU veya LXC gibi hypervisor seviyesine müdahale eder. Günlük kullanım için değil, ileri seviye troubleshooting ve özel senaryolar için düşünülmelidir.

KomutAçıklama
qemu-attachDışarıdan başlatılmış QEMU prosesini libvirt yönetimine bağlar.
qemu-monitor-commandQEMU monitor komutu çalıştırır.
qemu-agent-commandQEMU Guest Agent’a doğrudan komut gönderir.
qemu-monitor-eventQEMU monitor event’lerini izler.
lxc-enter-namespaceLXC domain namespace içine girer.

Örnekler:

virsh qemu-monitor-command web01 --hmp "info block"
virsh qemu-agent-command web01 '{"execute":"guest-info"}'
virsh qemu-monitor-event web01 --loop
virsh lxc-enter-namespace container01 -- /bin/bash

Bu komutlar libvirt’in normal yönetim katmanını atlayabilecek davranışlara neden olabilir. Bu yüzden yalnızca uzman seviyede ve zorunlu durumlarda kullanılmalıdır.

Günlük Kullanımda En Çok İşe Yarayan Virsh Komutları

Bir KVM/libvirt yöneticisinin günlük operasyonlarda en sık kullanacağı komutlar şunlardır:

virsh list --all
virsh dominfo VM_ADI
virsh domstate VM_ADI --reason
virsh start VM_ADI
virsh shutdown VM_ADI
virsh reboot VM_ADI
virsh destroy VM_ADI
virsh dumpxml VM_ADI > VM_ADI.xml
virsh edit VM_ADI
virsh autostart VM_ADI
virsh domiflist VM_ADI
virsh domifaddr VM_ADI
virsh domblklist VM_ADI
virsh domblkinfo VM_ADI vda
virsh vcpuinfo VM_ADI
virsh setvcpus VM_ADI 4 --config
virsh setmem VM_ADI 8G --config
virsh console VM_ADI
virsh snapshot-list VM_ADI
virsh net-list --all
virsh pool-list --all
virsh vol-list default

Bu komutlar VM durumu, kaynak kullanımı, disk, network, snapshot ve storage kontrolleri için temel araç setini oluşturur.

Troubleshooting İçin Pratik Virsh Akışı

Bir VM ile ilgili sorun yaşandığında aşağıdaki sırayla kontrol yapılabilir:

virsh list --all

VM çalışıyor mu, kapalı mı, paused mı kontrol edilir.

virsh dominfo VM_ADI

Temel VM bilgileri alınır.

virsh domstate VM_ADI --reason

VM durumunun sebebi kontrol edilir.

virsh domblklist VM_ADI --details

Diskler ve bağlı block device’lar kontrol edilir.

virsh domblkerror VM_ADI

Disk tarafında hata olup olmadığına bakılır.

virsh domiflist VM_ADI

Network interface bağlantıları incelenir.

virsh domifaddr VM_ADI

VM IP adresi öğrenilmeye çalışılır.

virsh pool-list --all

Storage pool durumu kontrol edilir.

virsh vol-list default

Disk volume’leri incelenir.

virsh dumpxml VM_ADI > VM_ADI.xml

VM XML yapılandırması yedeklenir.

Bu akış, çoğu temel KVM/libvirt sorununun ilk analizinde oldukça faydalıdır.

Dikkat Edilmesi Gereken Kritik Komutlar

Virsh çok güçlü bir araçtır. Bu nedenle bazı komutlar veri kaybı, servis kesintisi veya yönetim erişimi kaybı oluşturabilir.

KomutRisk
destroyVM’i zorla kapatır, veri kaybı riski oluşturabilir.
undefineDomain tanımını kaldırır; ek seçeneklerle diskleri de etkileyebilir.
pool-deleteStorage pool kaynaklarını silebilir.
vol-deleteDisk imajını silebilir.
snapshot-revertVM’i eski duruma döndürür; sonradan yapılan değişiklikler kaybolabilir.
iface-bridge / iface-unbridgeYanlış kullanımda host network erişimini kesebilir.
nodedev-detachYanlış cihaz detach edilirse host donanım erişimi etkilenebilir.
qemu-monitor-commandLibvirt yönetim katmanını atlayarak beklenmeyen sonuçlar doğurabilir.
domjobabortDevam eden kritik job işlemini yarıda kesebilir.

Bu komutlar çalıştırılmadan önce mümkünse XML yedekleri alınmalı, storage path’leri doğrulanmalı ve production ortamlarında bakım penceresi tercih edilmelidir.

Virsh, libvirt tabanlı sanallaştırma ortamlarında en kapsamlı ve esnek komut satırı yönetim araçlarından biridir. KVM/QEMU altyapısında sanal makineleri yalnızca başlatmak veya kapatmak için değil; CPU, bellek, disk, network, storage pool, volume, snapshot, checkpoint, backup, migration, guest agent ve hypervisor seviyesinde birçok işlemi yönetmek için kullanılır.

Küçük ortamlarda birkaç temel komut yeterli olabilir. Ancak büyük KVM altyapılarında virsh; otomasyon, troubleshooting, migration, backup entegrasyonu, performans yönetimi ve günlük operasyonların vazgeçilmez bir parçasıdır.

Doğru kullanıldığında hızlı ve güçlüdür. Yanlış kullanıldığında ise çalışan sistemlerde kesinti, veri kaybı veya yönetim erişimi sorunlarına neden olabilir. Bu nedenle özellikle destroy, undefine, pool-delete, vol-delete, snapshot-revert, iface-*, nodedev-* ve hypervisor-specific komutlar dikkatle kullanılmalıdır.

Özetle virsh, KVM/libvirt dünyasında komut satırından tam kontrol sağlayan profesyonel bir yönetim aracıdır. Sanallaştırma altyapısını daha iyi anlamak, sorunları daha hızlı çözmek ve operasyonları otomasyonla güçlendirmek isteyen herkes için virsh komutlarını öğrenmek ciddi bir avantaj sağlar.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *