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çenek | Açıklama |
|---|---|
-c, --connect URI | Belirtilen libvirt URI adresine bağlanır. |
-d, --debug LEVEL | Debug seviyesini belirler. |
-e, --escape string | Console bağlantısı için escape karakterini değiştirir. |
-h, --help | Yardım çıktısını gösterir. |
-k, --keepalive-interval | Bağlantı canlılık kontrol aralığını belirler. |
-K, --keepalive-count | Kaç cevapsız keepalive sonrası bağlantının kopmuş sayılacağını belirler. |
-l, --log FILE | Log çıktısını dosyaya yazar. |
-q, --quiet | Gereksiz bilgilendirme mesajlarını azaltır. |
-r, --readonly | Salt okunur bağlantı açar. |
-t, --timing | Her komutun çalışma süresini gösterir. |
--no-pkttyagent | Polkit kimlik doğrulama ajanını devreye sokmaz. |
-v, --version | Virsh/libvirt sürüm bilgisini gösterir. |
-V, --version=long | Sü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.
| Komut | Açıklama |
|---|---|
help | Tüm virsh komutlarını veya belirli bir komutun yardımını gösterir. |
quit, exit | Etkileşimli virsh kabuğundan çıkar. |
version | Virsh, libvirt, API ve hypervisor sürüm bilgilerini gösterir. |
cd | Virsh kabuğu içindeki mevcut dizini değiştirir. |
pwd | Mevcut çalışma dizinini gösterir. |
connect | Hypervisor bağlantısını açar veya değiştirir. |
uri | Bağlanılan hypervisor URI bilgisini gösterir. |
hostname | Hypervisor host adını gösterir. |
sysinfo | Hypervisor sistem bilgisini XML olarak gösterir. |
nodeinfo | Host CPU, bellek ve temel donanım bilgilerini gösterir. |
nodecpumap | Host üzerindeki CPU haritasını gösterir. |
nodecpustats | Host CPU istatistiklerini gösterir. |
nodememstats | Host bellek istatistiklerini gösterir. |
nodesevinfo | AMD SEV güvenlik özellikleri hakkında bilgi verir. |
nodesuspend | Host sistemi uyku moduna alır. |
node-memory-tune | Host üzerindeki KSM/shared memory parametrelerini yönetir. |
capabilities | Hypervisor ve host yeteneklerini XML olarak gösterir. |
domcapabilities | Domain oluşturma yeteneklerini XML olarak gösterir. |
pool-capabilities | Storage pool yeteneklerini gösterir. |
inject-nmi | Domain’e NMI sinyali gönderir. |
list | Domain’leri listeler. |
freecell | NUMA cell bazında boş bellek bilgisini gösterir. |
freepages | NUMA/page size bazında boş page bilgisini gösterir. |
allocpages | Hugepage/page allocation işlemleri için kullanılır. |
cpu-baseline | Birden fazla CPU tanımından ortak CPU modeli üretir. |
cpu-compare | Verilen CPU tanımını host CPU ile karşılaştırır. |
cpu-models | Belirli mimari için bilinen CPU modellerini listeler. |
hypervisor-cpu-compare | CPU uyumluluğunu hypervisor yetenekleriyle karşılaştırır. |
hypervisor-cpu-baseline | Hypervisor yeteneklerini dikkate alan baseline CPU üretir. |
hypervisor-cpu-models | Hypervisor 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
| Komut | Açıklama |
|---|---|
start | Tanımlı fakat kapalı durumda olan domain’i başlatır. |
shutdown | Guest OS ile iletişim kurarak düzgün kapatma yapmaya çalışır. |
destroy | VM’i zorla kapatır. Fiziksel power-off gibi düşünülmelidir. |
reboot | VM’i yeniden başlatır. |
reset | VM’e donanımsal reset benzeri işlem uygular. |
suspend | Çalışan domain’i bellekte duraklatır. |
resume | Suspend edilmiş domain’i devam ettirir. |
save | Çalışan VM durumunu dosyaya kaydeder. |
restore | Daha önce save ile alınmış VM durumunu geri yükler. |
managedsave | VM durumunu libvirt yönetimli şekilde kaydeder. |
managedsave-remove | Managed save imajını siler. |
managedsave-define | Managed save state XML tanımını değiştirir. |
managedsave-dumpxml | Managed save XML bilgisini gösterir. |
managedsave-edit | Managed save XML bilgisini düzenler. |
undefine | Domain tanımını libvirt’ten kaldırır. |
autostart | Host açıldığında VM’in otomatik başlamasını ayarlar. |
domrename | Kapalı 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
| Komut | Açıklama |
|---|---|
create | XML dosyasından geçici veya tek seferlik domain başlatır. |
define | XML dosyasındaki domain tanımını libvirt’e kaydeder fakat başlatmaz. |
dumpxml | Domain XML yapılandırmasını gösterir. |
edit | Domain XML yapılandırmasını editör ile düzenler. |
desc | Domain açıklamasını veya başlığını gösterir/değiştirir. |
metadata | Domain üzerinde özel XML metadata bilgisini yönetir. |
domxml-from-native | Native hypervisor formatını libvirt XML formatına dönüştürür. |
domxml-to-native | Libvirt 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ı
| Komut | Açıklama |
|---|---|
dominfo | Domain hakkında temel bilgileri gösterir. |
domstate | Domain’in durumunu gösterir. |
domstats | CPU, bellek, disk ve network istatistiklerini gösterir. |
domid | Domain adından veya UUID’den ID bilgisini bulur. |
domname | Domain ID veya UUID bilgisinden domain adını bulur. |
domuuid | Domain UUID bilgisini gösterir. |
domhostname | Domain hostname bilgisini gösterir. |
domtime | Guest zamanı ile ilgili bilgi alır veya zaman ayarı yapar. |
domcontrol | Domain kontrol arayüzünün durumunu gösterir. |
domdisplay | Grafik konsol bağlantı bilgisini gösterir. |
domdisplay-reload | Grafik display yapılandırmasını yeniler. |
ttyconsole | Domain’in TTY console cihazını gösterir. |
vncdisplay | VNC display bilgisini gösterir. |
dommemstat | Domain 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ı
| Komut | Açıklama |
|---|---|
cpu-stats | Domain CPU istatistiklerini gösterir. |
vcpucount | Domain üzerindeki vCPU sayılarını gösterir. |
vcpuinfo | vCPU detaylarını listeler. |
vcpupin | vCPU’ları belirli fiziksel CPU’lara pinler. |
setvcpus | Domain için vCPU sayısını değiştirir. |
setvcpu | Belirli vCPU’ları enable/disable eder. |
maxvcpus | Hypervisor tarafından desteklenen maksimum vCPU bilgisini gösterir. |
emulatorpin | Emulator thread’lerini belirli CPU’lara pinler. |
iothreadadd | Domain’e IOThread ekler. |
iothreaddel | Domain’den IOThread siler. |
iothreadinfo | IOThread bilgisini gösterir. |
iothreadpin | IOThread’i CPU’ya pinler. |
iothreadset | IOThread parametrelerini değiştirir. |
memtune | Domain bellek tuning parametrelerini gösterir/değiştirir. |
setmem | Domain belleğini değiştirir. |
setmaxmem | Domain maksimum bellek limitini ayarlar. |
numatune | NUMA bellek yerleşim politikasını ayarlar. |
perf | Domain performans event sayaçlarını yönetir. |
schedinfo | Scheduler 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ı
| Komut | Açıklama |
|---|---|
domblklist | Domain’e bağlı diskleri listeler. |
domblkinfo | Belirli disk hakkında kapasite/boyut bilgisi verir. |
domblkstat | Disk I/O istatistiklerini gösterir. |
domblkerror | Disk tarafında oluşan hataları gösterir. |
domblkthreshold | Block device için threshold event yapılandırır. |
blkdeviotune | Belirli block device için I/O limitlerini ayarlar. |
blkiotune | Domain 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. |
blockcommit | Backing chain içeriğini alt/üst katmana commit eder. |
blockpull | Backing chain’den veriyi aktif imaja çeker. |
blockjob | Devam eden block job’ları izler, iptal eder veya yönetir. |
domthrottlegroupset | Disk throttle group ayarı yapar. |
domthrottlegroupdel | Disk throttle group siler. |
domthrottlegroupinfo | Throttle group bilgisini gösterir. |
domthrottlegrouplist | Throttle 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ı
| Komut | Açıklama |
|---|---|
domiflist | Domain’e bağlı network interface’leri listeler. |
domifaddr | Domain interface IP/MAC adreslerini gösterir. |
domifstat | Interface trafik istatistiklerini gösterir. |
domiftune | Interface bandwidth/tuning ayarlarını yönetir. |
domif-getlink | Interface link durumunu gösterir. |
domif-setlink | Interface link durumunu up/down yapar. |
domifannounce | Interface 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
| Komut | Açıklama |
|---|---|
guestinfo | Guest agent üzerinden OS, disk, filesystem ve interface bilgilerini gösterir. |
guestvcpus | Guest OS perspektifinden vCPU durumunu gösterir/değiştirir. |
guest-agent-timeout | Guest agent komutları için timeout değerini yönetir. |
get-user-sshkeys | Guest içindeki kullanıcı SSH key bilgisini alır. |
set-user-sshkeys | Guest içindeki kullanıcı SSH key bilgisini değiştirir. |
set-user-password | Guest 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ı
| Komut | Açıklama |
|---|---|
domfsfreeze | Guest filesystem’lerini freeze eder. Backup öncesi kullanılır. |
domfsthaw | Freeze edilmiş filesystem’leri çözer. |
domfsinfo | Guest içindeki mounted filesystem listesini gösterir. |
domfstrim | Guest 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ı
| Komut | Açıklama |
|---|---|
backup-begin | Domain için backup job başlatır. |
backup-dumpxml | Devam 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ı
| Komut | Açıklama |
|---|---|
migrate | Domain’i başka bir host’a taşır. |
migrate-compcache | Migration compression cache ayarlarını yönetir. |
migrate-getmaxdowntime | Live migration için maksimum downtime bilgisini gösterir. |
migrate-setmaxdowntime | Live migration maksimum downtime değerini ayarlar. |
migrate-getspeed | Migration bandwidth/speed limitini gösterir. |
migrate-setspeed | Migration bandwidth/speed limitini ayarlar. |
migrate-postcopy | Devam 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ı
| Komut | Açıklama |
|---|---|
console | Domain serial console bağlantısı açar. |
screenshot | Domain ekran görüntüsü alır. |
send-key | Guest’e klavye tuş kombinasyonu gönderir. |
send-process-signal | Guest içindeki prosese sinyal gönderir. |
dump | Domain memory/core dump alır. |
event | Domain event’lerini izler. |
await | Domain üzerinde belirli event/durum bekler. |
domjobinfo | Domain üzerinde çalışan job bilgisini gösterir. |
domjobabort | Devam eden domain job’ını iptal eder. |
domdirtyrate-calc | Live migration için dirty page rate hesaplar. |
domlaunchsecinfo | Launch security bilgisini gösterir. |
domsetlaunchsecstate | Launch security state ayarı yapar. |
set-lifecycle-action | Domain lifecycle event davranışını değiştirir. |
dompmsuspend | Guest’i power management suspend moduna alır. |
dompmwakeup | Power 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.
| Komut | Açıklama |
|---|---|
attach-device | XML dosyasındaki device tanımını domain’e ekler. |
attach-disk | Domain’e disk ekler. |
attach-interface | Domain’e network interface ekler. |
detach-device | XML ile belirtilen device’ı domain’den çıkarır. |
detach-device-alias | Alias bilgisine göre device çıkarır. |
detach-disk | Domain’den disk çıkarır. |
detach-interface | Domain’den network interface çıkarır. |
update-device | Mevcut device yapılandırmasını XML ile günceller. |
update-memory-device | Memory device yapılandırmasını günceller. |
change-media | CD-ROM/floppy gibi removable media değiştirir. |
dom-fd-associate | Domain 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.
| Komut | Açıklama |
|---|---|
nodedev-create | XML’den transient node device oluşturur. |
nodedev-update | Node device bilgisini günceller. |
nodedev-destroy | Node device’ı durdurur/yok eder. |
nodedev-define | Node device tanımı oluşturur. |
nodedev-undefine | Node device tanımını kaldırır. |
nodedev-start | Tanımlı node device’ı başlatır. |
nodedev-detach | Host driver’dan ayırıp VM passthrough için hazırlar. |
nodedev-dumpxml | Node device XML çıktısını gösterir. |
nodedev-info | Node device hakkında bilgi verir. |
nodedev-list | Host üzerindeki node device’ları listeler. |
nodedev-reattach | Ayrılmış cihazı tekrar host driver’a bağlar. |
nodedev-reset | Node device reset işlemi yapar. |
nodedev-event | Node device event’lerini izler. |
nodedev-autostart | Node 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.
| Komut | Açıklama |
|---|---|
net-autostart | Network’ün host açılışında otomatik başlamasını ayarlar. |
net-create | XML dosyasından geçici network başlatır. |
net-define | XML dosyasından kalıcı network tanımlar. |
net-desc | Network açıklamasını veya başlığını yönetir. |
net-destroy | Aktif network’ü durdurur. |
net-dumpxml | Network XML bilgisini gösterir. |
net-edit | Network XML yapılandırmasını düzenler. |
net-event | Network event’lerini izler. |
net-info | Network hakkında temel bilgi verir. |
net-list | Network listesini gösterir. |
net-metadata | Network özel XML metadata bilgisini yönetir. |
net-name | UUID’den network adını bulur. |
net-start | Tanımlı network’ü başlatır. |
net-undefine | Network tanımını siler. |
net-uuid | Network UUID bilgisini gösterir. |
net-update | Network yapılandırmasını runtime veya config düzeyinde günceller. |
net-dhcp-leases | Network ü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.
| Komut | Açıklama |
|---|---|
net-port-list | Belirli network üzerindeki portları listeler. |
net-port-create | XML’den network port oluşturur. |
net-port-dumpxml | Network port XML çıktısını gösterir. |
net-port-delete | Network 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.
| Komut | Açıklama |
|---|---|
iface-bridge | Fiziksel interface’i bridge içine alır. |
iface-define | XML’den interface tanımlar. |
iface-destroy | Interface’i durdurur. |
iface-dumpxml | Interface XML bilgisini gösterir. |
iface-edit | Interface XML yapılandırmasını düzenler. |
iface-list | Host interface listesini gösterir. |
iface-name | MAC adresinden interface adını bulur. |
iface-mac | Interface adından MAC adresini bulur. |
iface-start | Interface’i başlatır. |
iface-unbridge | Bridge yapılandırmasını kaldırır. |
iface-undefine | Interface tanımını siler. |
iface-begin | Interface değişiklikleri için transaction başlatır. |
iface-commit | Interface transaction değişikliklerini uygular. |
iface-rollback | Interface 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.
| Komut | Açıklama |
|---|---|
find-storage-pool-sources | Belirli pool tipi için kaynakları keşfeder. |
find-pool-sources-as | Parametrelerle pool kaynaklarını arar. |
pool-autostart | Pool’un otomatik başlamasını ayarlar. |
pool-build | Pool için gerekli altyapıyı hazırlar. |
pool-create | XML’den geçici pool oluşturur ve başlatır. |
pool-create-as | Parametrelerle geçici pool oluşturur. |
pool-define | XML’den kalıcı pool tanımlar. |
pool-define-as | Parametrelerle kalıcı pool tanımlar. |
pool-destroy | Pool’u durdurur; içindeki veriyi silmez. |
pool-delete | Pool kaynaklarını siler; geri dönüşsüz olabilir. |
pool-dumpxml | Pool XML bilgisini gösterir. |
pool-edit | Pool XML yapılandırmasını düzenler. |
pool-info | Pool hakkında temel bilgi verir. |
pool-list | Pool listesini gösterir. |
pool-name | UUID’den pool adını bulur. |
pool-refresh | Pool içindeki volume listesini yeniler. |
pool-start | Tanımlı fakat pasif pool’u başlatır. |
pool-undefine | Pasif pool tanımını siler. |
pool-uuid | Pool UUID bilgisini gösterir. |
pool-event | Pool 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.
| Komut | Açıklama |
|---|---|
vol-create | XML’den volume oluşturur. |
vol-create-from | Mevcut volume’den yeni volume oluşturur. |
vol-create-as | Parametrelerle volume oluşturur. |
vol-clone | Volume klonlar. |
vol-delete | Volume siler. |
vol-upload | Dosyadan volume içine veri yükler. |
vol-download | Volume içeriğini dosyaya indirir. |
vol-wipe | Volume içeriğini güvenli şekilde temizler. |
vol-dumpxml | Volume XML bilgisini gösterir. |
vol-info | Volume hakkında bilgi verir. |
vol-list | Pool içindeki volume’leri listeler. |
vol-pool | Volume’ün ait olduğu pool’u gösterir. |
vol-path | Volume path bilgisini gösterir. |
vol-name | Volume adını gösterir. |
vol-key | Volume key bilgisini gösterir. |
vol-resize | Volume 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.
| Komut | Açıklama |
|---|---|
secret-define | XML’den secret tanımlar. |
secret-dumpxml | Secret XML bilgisini gösterir. |
secret-event | Secret event’lerini izler. |
secret-set-value | Secret değerini ayarlar. |
secret-get-value | Secret değerini gösterir. |
secret-undefine | Secret kaydını siler. |
secret-list | Secret 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.
| Komut | Açıklama |
|---|---|
snapshot-create | XML dosyasıyla snapshot oluşturur. |
snapshot-create-as | Parametrelerle snapshot oluşturur. |
snapshot-current | Mevcut/current snapshot bilgisini gösterir veya değiştirir. |
snapshot-edit | Snapshot XML bilgisini düzenler. |
snapshot-info | Snapshot hakkında bilgi verir. |
snapshot-list | Domain snapshot listesini gösterir. |
snapshot-dumpxml | Snapshot XML çıktısını gösterir. |
snapshot-parent | Snapshot parent bilgisini gösterir. |
snapshot-revert | Domain’i snapshot’a geri döndürür. |
snapshot-delete | Snapshot 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.
| Komut | Açıklama |
|---|---|
checkpoint-create | XML’den checkpoint oluşturur. |
checkpoint-create-as | Parametrelerle checkpoint oluşturur. |
checkpoint-edit | Checkpoint XML bilgisini düzenler. |
checkpoint-info | Checkpoint hakkında bilgi verir. |
checkpoint-list | Checkpoint listesini gösterir. |
checkpoint-dumpxml | Checkpoint XML çıktısını gösterir. |
checkpoint-parent | Parent checkpoint bilgisini gösterir. |
checkpoint-delete | Checkpoint 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.
| Komut | Açıklama |
|---|---|
nwfilter-define | XML’den network filter tanımlar. |
nwfilter-undefine | Network filter siler. |
nwfilter-list | Network filter listesini gösterir. |
nwfilter-dumpxml | Network filter XML çıktısını gösterir. |
nwfilter-edit | Network 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.
| Komut | Açıklama |
|---|---|
nwfilter-binding-create | Network port ile network filter arasında binding oluşturur. |
nwfilter-binding-delete | Port üzerindeki filter binding ilişkisini kaldırır. |
nwfilter-binding-list | Filter binding uygulanmış portları listeler. |
nwfilter-binding-dumpxml | Binding 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.
| Komut | Açıklama |
|---|---|
qemu-attach | Dışarıdan başlatılmış QEMU prosesini libvirt yönetimine bağlar. |
qemu-monitor-command | QEMU monitor komutu çalıştırır. |
qemu-agent-command | QEMU Guest Agent’a doğrudan komut gönderir. |
qemu-monitor-event | QEMU monitor event’lerini izler. |
lxc-enter-namespace | LXC 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.
| Komut | Risk |
|---|---|
destroy | VM’i zorla kapatır, veri kaybı riski oluşturabilir. |
undefine | Domain tanımını kaldırır; ek seçeneklerle diskleri de etkileyebilir. |
pool-delete | Storage pool kaynaklarını silebilir. |
vol-delete | Disk imajını silebilir. |
snapshot-revert | VM’i eski duruma döndürür; sonradan yapılan değişiklikler kaybolabilir. |
iface-bridge / iface-unbridge | Yanlış kullanımda host network erişimini kesebilir. |
nodedev-detach | Yanlış cihaz detach edilirse host donanım erişimi etkilenebilir. |
qemu-monitor-command | Libvirt yönetim katmanını atlayarak beklenmeyen sonuçlar doğurabilir. |
domjobabort | Devam 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.
![[TR] Virsh Nedir? KVM Tabanlı Sanallaştırma Ortamlarında Sanal Makine Yönetimi İpuçları](https://kadirkozan.com/wp-content/uploads/2026/07/logo-banner-dark-800.png)
![[EN] What Is Virsh? Tips for Managing Virtual Machines in KVM-Based Virtualization Environments](https://kadirkozan.com/wp-content/uploads/2026/07/logo-banner-dark-800-150x150.png)