Hyper-V Sanal Makine Export ve Import

06.07.2010
18

ⓘ  Dikkat: Uzun süredir yayında olan bu yazıdaki bazı bilgiler zaman içerisinde değişmiş veya geçerliliğini yitirmiş olabilir.

Bir sanal makineyi tüm sanal donanımları ve konfigürasyonu ile birlikte çalıştığı host üzerinden alıp başka bir host’a taşımak için kullanabileceğiniz en basit ve konfigürasyon ihtiyacın en az olan yöntem Export/Import yöntemidir. Virtualization Infrastructure’ınıza göre farklı topolojilere, farklı hardware/storage ürünlerine sahip olabilirsiniz. Örneğin cluster ortamında çalışan node’larınız ya da standalone çalışan host’larınız olabilir. Ne şekilde olursa olsun, Hyper-V üzerinde çalışan bir VM’i export ederek farklı bir Hyper-V Host üzerine import etmek gerçekten çok zahmetsiz bir işlemdir çünkü Hyper-V kurulumu ile gelen default bir özelliktir ve herhangi bir ek konfigürasyona ihtiyaç duymaz. Hyper-V kurulumundan sonra örneğin Hyper-V Manager konsolu üzerinden bu işi rahatlıkla gerçekleştirebilirsiniz.

Aslında Export/Import kavramına yabancı olmadığınızı düşünüyorum çünkü IT’de sıkça karşılaştığımız ayrılmaz iki kavramdır. Mesela Internet Explorer ayarlarınızı export edebilir, daha sonra oluşan dosyayı başka bir sistemde çalışan Internet Explorer’a import ederek ayarlarınızın o sisteme taşınmasını sağlayabilirsiniz. Ya da bu export dosyasını hemen import etmeyip daha sonra kullanmak üzere saklayabilirsiniz. Buradaki temel amaç, belirli bir efor ve zaman harcanarak tanımlanmış olan bir takım ayarların, bu ayarlara sahip olmayan başka bir sistem üzerine (veya aynı sistem üzerine) yine minimum efor ile aktarılmasıdır. Eğer bu ayarları export etme şansınız olmasaydı tamamını yeniden tanımlamak durumunda kalacaktınız. Hyper-V tarafındaki export/import işlemleri de bu kolaylığı sanal mekine seviyesinde sağlıyor ve temelde kopyalama (clone), taşıma (migration) ve bazı durumlarda offline yedekleme (offline backup) gibi senaryolar için kullanabiliyoruz.

  • Clone: Bir VM’in kopyasını oluşturmak ve bu kopyayı aynı host ya da başka bir host üzerinde çoğaltmak için kullandığımız senaryo.
  • Migration: Bir VM’i çalıştığı host üzerinden alıp var olan konfigürasyonu ile birlikte -ancak genelde eski kopyayı ortadan kaldırarak- başka bir host üzerine aktarmak için kullandığımız senaryo.
  • Offline Backup: Bir VM’in yedeğini almak ve gerektiğinde yedek alınan tarihteki kopyayı tekrar çalışır hale getirmek için kullandığımız senaryo.

Export Nasıl Yapılır?

Bir VM’i import edebilmek için önce export etmiş olmanız gerekir çünkü export işlemi ile daha sonra import edilebilecek bir takım dosyalar yaratılır ve ancak bu dosyaları tekrar import edebilirsiniz. Örneğin çalışan bir VM’in dosyalarını manual olarak bir yerlere kopyalayıp başka bir host üzerine taşıyabilirsiniz. Ama bu dosyaları import menüsü ile host’a gösteremezsiniz çünkü bu dosyalar Hyper-V için importable değildir. Bu manual kopyalanmış/taşınmış VM dosyalarını yine manual ve bir miktar daha fazla efor gerektiren bir dizi konfigürasyon ile çalışır hale getirebilirsiniz ama bir çok durumda özellikle VM GUID açısından eski VM’in bire bir kopyasını elde edemeyebilirsiniz.

Bir VM’i Hyper-V Manager konsolu kullanarak export etmek için ilgili VM seçiliyken Actions bölümündeki Export…’u yada VM’in name’inin üzerine sağ tıklayarak ulaşacağınız Export…‘u kullanabilirsiniz.

Hyper-V Sanal Makine Export

Bu noktada dikkat edilmesi gereken bir durum söz konusu. Running state yani çalışan bir VM’i seçtiğiniz zaman Export… komutunun yerinde olmadığını göreceksiniz. Çünkü çalışır (running) durumda olan bir VM’i export edemezsiniz.

Hyper-V Sanal Makine Export 2

Bir VM’in export edilebilmesi için kapalı (turned off) yada kayıtlı (saved) durumda olması gerekir.

Turned Off State

Saved State

VM’i seçip Export… komutunu verdikten sonra gelen pencerede Browse butonu ile export edilecek path’i gösteriyoruz (location). Bu path sisteme local olarak mounth edilmiş bir disk olmalı (örneğin DAS ya da USB bağlantılı bir external disk). Bu sırada export path olarak network üzerindeki bir paylaşımı da kullanma şansınız var. Ama bunu yapabilmek için paylaşım üzerinde Hyper-V sunucusunun computer account’una full control yetkisi verilmeli (bu durumda sistemler aynı domain altında olmalı) ve export işlemini local bir Hyper-V Manager üzerinden yapıyor olmalısınız (full kurulum bir WS08+Hyper-V gibi). Yani remote bir Hyper-V Manager ile network üzerine export ederken başarısız olma ihtimaliniz yüksek çünkü arka planda shared folder’a ulaşımda bazı özel durumlar söz konusu. Önce local diske export edip sonra manual olarak network üzerinden taşımak kesin sonuç olacaktır. Ben örnek senaryoda C:\ üzerinde local bir path gösterdim. Export diyerek işlemi başlatıyoruz.

Sanal Makine Export Path

Export süresince yine aynı konsol üzerinden işlemin tamamlanma durumunu % olarak takip edebilirsiniz.

Sanal Makine Exporting

Bu süreye etki eden en temel faktör export ettiğiniz VM üzerindeki virtual disklerin sayısı ve size’larıdır. VM’iniz ne kadar büyük disklere sahipse export süresi de o derece uzun olacaktır. Ama genel anlamda süre local disk üzerindeki bir datayı aynı ya da başka bir disk üzerine kopyalamak ile yakındır. Bu arada export edeceğiniz dizin (dolayısı ile disk) üzerinde yeteri kadar boş alan olduğundan emin olun. Aksi taktirde işlem hata verecektir. Gerekli boş alan ihtiyacı export edeceğiniz VM’in gerçek disk boyutu ile aynıdır (yani üzerindeki virtual disk dosyaları, eğer vm saved durumdaysa vsv ve bin dosyaları, varsa snapshot dosyaları ve konfigürasyon dosyalarının toplam boyutu…) Export tamamlandığında ilgili VM export öncesi durumunda beklemeye devam eder.

Sanal Makine Export Sonucu

Export ettiğimiz dizin içinde neler var bir göz atalım. Ben C:\Source\w7 altına gidiyorum.

Sanal Makine Export Dosyaları

Snapshot, Virtual Hard Disks, Virtual Machines, alsında dizinler pek de yabancı değil. Normal bir VM’e ait dizinler ile hemen hemen aynı. Farklı olarak config isimli bir dosya görüyorsunuz. İçinde ilgili dizinler, dosyalar ile ilgili path ve state bilgileri yer alıyor. Bu dosya export sırasında oluşur ve import sonrasında kullanıldıktan sonra otomatik olarak silinir.

config dosya içeriği

Virtual Machine dizininde ise EXP uzantılı bir dosya göreceksiniz.

EXP dosyası

Bu dosya içerisinde ise VM’in export edilmeden önceki virtual hardware ve diğer konfigürasyon bilgileri bulunur. Yine sistem tarafından otomatik olarak yaratılır ve import sonrasında tanıdık bildik XML file’a dönüşür. Bu XML, Hyper-V Manager konsolunda yer alan VM’in konfigürasyon bilgisinin tutulduğu dosyadır.

XML Dosyası

Export etmediğiniz bir VM’i Import edemezsiniz. Import öncesinde gösterdiğiniz path’te import’a uygun bir içerik olup olmadığı yukarıda bahsettiğim dosyalar ile kontrol edilmektedir. Ayrıca aklınızda bulunsun: Bir VM üzerindeki virtual diskleri (eğer snapshot yoksa) export etmeden kopyalayıp başka bir host üzerine taşıdıktan sonra yeni bir VM create edip bu diskleri bağlayabilir, VM’i aynı içerik ile start edebilirsiniz. Ama bu işlem sırasında eski VM’in sanal donanım ve diğer konfigürasyon bilgisini kaybetmiş, bir noktada makineye yeni donanımlar eklemiş olursunuz. Bu da guest os üzerinde bazı değişikliklere neden olur. Örneğin sistem üzerindeki eski NIC’i remove edip yeni bir NIC eklediğinizde TCP/IP ayarlarınızı yeniden yapılandırmak zorunda kalırsınız. Bu gibi durumları önlemek adına taşıma işlemleri için Export/Import veya diğer yöntemini tercih etmenizi tavsiye ederim.

Import Nasıl Yapılır?

Export dosyalarını herhangi bir yöntem ile diğer host üzerine taşıyın. Taşıdığınız path’in eskisi ile aynı olma gibi bir zorunluluk yok. Herhangi bir yere alabilirsiniz ama unutmayın, import edip start ettikten sonra VM o dosyaları kullanmaya başlayacak yani VM artık oraya yerleşmiş olacak. Bu nedenle konumu doğru seçin, aksi durumda taşımak için yeni bir operasyon gerekebilir. Ben yine C:\Source diye bir dizin içine taşıdım. Import işlemini başlatmak için ilgili host’u yöneten Hyper-V Manager üzerinde Import Virtual Machine… komutunu kullanıyoruz.

Import Virtual Machine

Import Virtual Machine… dedikten sonra export edip taşıdığımız dosyaların bulunduğu dizini göstermelisiniz.

Import Location

Bu pencerede Import demeden önce settings’te neler var bir göz atalım.

Eğer VM’i export edip eskisini ortadan kaldırarak başka bir host’a taşırken ya da VM’in başına bir şey geldi ve yine eskisini ortadan kaldırarak aynı host üzerine daha önceden export edilmiş kopyayı import ederken Move or restore the virtual machine (use the existing unique ID) seçeneğini kullanmak uygundur. Bu seçenek VM’e yeni bir ID atamaz, eski ID ile devam etmesini sağlar çünkü biz zaten eski VM’i kullanmayı amaçlıyoruz. Bu nedenle eski ID’si ile gelmesi doğru olandır.

Eğer VM’i copy ile çoğaltmak istiyorsak; yani aslı kopya çalışmaya devam edecek ve biz export ettiğimiz kopyayı ayrı bir VM olarak kullanmayı planlıyorsak bu durumda Copy the virtual machine (create a new unique ID) seçeneği ile devam edebiliriz. Bu seçenek VM’e yeni bir unique ID atar ve onun eski kopyadan ayrılmasını sağlar.

Senaryoya göre uygun seçimi yaptıktan sonra Import diyerek işlemi başlatıyoruz. Import işlemi hemen gerçekleşir çünkü biz zaten gerekli datayı uygun path’e kopyaladığımız için export’ta olduğu gibi arka planda kopyalanması gereken data yoktur. Birkaç saniye içinde VM konsoldaki yerini alır ve artık start edilmek için hazırdır.

Hyper-V Sanal Makine Import Sonrası

Export edilmiş bir VM’i bir defa import edebilirsiniz. Ama eğer import penceresinde Duplicate all files so the same virtual machine can be imported again kutucuğunu işaretlerseniz, export edilmiş dosyalar olduğu path’te aynı şekilde kalır. Bir kopyası Hyper-V Settings bölümünde belirtilen default path’ler üzerine alınarak import işlemi gerçekleştirilir ve VM o path’ler üzerinde çalışmaya başlar. Export edilen kopya ise daha sonra yine export edilebilir halde beklemeye devam eder. Bu işlemde de arka planda gerçekleşen bir copy/paste olduğu için operasyon süresi veri boyutu ile doğru orantılıdır. Özetle bu seçenekte bir kez export ediyoruz ve o VM’i Duplicate all files so the same virtual machine can be imported again seçeneği ile birden fazla kez import edebiliyoruz.

Saved State Sanal Makine Export-Import

Son olarak saved durumdaki bir VM’in export/import’una bakalım. Aslında yöntemin hiç bir farkı yok. Sadece export edilen içerikte göstermek istediğim iki dosya var. Export process’i bire bir aynıdır.

Saved State Sanal Makine Export-Import 1

Export sonrası oluşan içerikte vsv ve bin uzantılı iki dosya yer alır.

Saved State Sanal Makine Export-Import 2

Bu iki dosya VM’i saved durumda export ettiğimiz için ordadır ve içlerinde VM’in saved anına dair bazı bilgileri yer alır. Örneğin VM üzerinde bir uygulama kurulumu yaparken save etmek durumunda kaldınız ve bu VM’i export edip başka bir Hyper-V host üzerine import ettiğiniz. Bu VM açıldığında kuruluma kaldığınız yerden devam edebilirsiniz.

Yorumlar (18)

  1. Lütfü

    Merhabalar,

    Ben eski sürüm vmware kullanmaktayım. Evde kullandığım sanal bilgisayarı çalıştığım yerde kullandığımda oradaki bilgisayarın özelliklerini alıyor. Yukarıda verdiğiniz özelliği evdeki bilgisayarın özelliklerini istediğim bilgisayarda simule edebilirmiyim.

    İyi çalışmalar.

  2. serkan

    Merhaba Hocam,
    hyperv cluster ortamı için bu işlemler hakkında bilgi almak istiyorduk. Ayrı bir makaleniz var mıydı ?

    İyi çalışmalar..

  3. Serhat AKINCI

    Lütfü: Sormak istediğini tam olarak anlamadım?

    Serkan: Hyper-V Cluster ortamı için operasyonel süreç bu makalede yer aldığı gibi. Değişebilecek tek şey, import ederken VM importable source’u CSV yani C:\ClusterStorage\ altında bir Volume klasörüne attıktan sonra import edin. Bu sayede VM’i cluster’a dahil etmek mümkün olur.

  4. Bilal Murat

    Hocam Selam
    export işlemini başarıyla gerçekleştiriyorum ama import yaparken hata vermektedir acaba exportdaki bilgisyarda cluster var importtaki makinada yok ondan olabilirmi
    saygılarıma

  5. Serhat AKINCI

    Bilal selam, Cluster ortamına da import edebilirsin, problem olmaz. Eğer import sırasında aldığın hatayı buraya yazarsan yardımcı olabilirim.

  6. Anıl ERDURAN

    Non_Cluster’dan Cluster’a Import sırasında configuration hatası verebilir. Bilginize.

    http://blogs.technet.com/b/askcore/archive/2011/05/26/how-to-export-non-clustered-vm-s-and-import-them-to-csv-shares-on-2008-r2-cluster.aspx

  7. Alper AK

    Merhaba Serhat Bey
    hyperv üzerinde kurulu bir elastix centos um var. onu export import yaparak çoğalttım. Ağ da sorun çıktı onu hallettim. Ama sanırım diğer donanımlarda da bir çakışma oluyor. Santral sistemi olduğundan ses gelip gitmiyor. Acaba ses driverının hardware idsini flnmı değiştirmem gerekir. Kopyasını aldığım sorunsuz çalışıyor.

  8. Serhat AKINCI

    Merhaba,

    Export/Import ile çoğalttığınız VM’lere ait network adapter’lerin MAC adresleri çakışıyor olabilir. Ayrıca “Legacy Network Adapter” yerine, Linux Integration Components ile “Synthetic Network Adapter” kullanmanızı öneririm.

  9. Yasin Aydın

    Merhaba Serhat Bey,

    Öncelikle Makaleniz için teşekkür ederim.

    Hyper V Enterprise sürümünden Hyper V Standart sürümüne taşıyabilir miyiz ?
    Teşekkürler,

  10. Serhat AKINCI

    Hangi sürümler arasında olduğunu belirmemişsiniz ama;

    – Export/Import
    – Import/Register
    – In-Place OS Upgrade (desteklenen alt sürümden üst sürüme doğru)
    – Shared-Nothing Live Migration (destekleniyorsa)
    – Cross-Version Shared-Nothing Live Migration (destekleniyorsa)

    gibi yöntemlerle taşımak mümkün.

  11. Özgür

    Serhat Hocam selamlar,

    Merak ettiğim bir bölüm var Server2008 adıyla export ettiğimiz bir guesti aynı host üzerinde export ettiğimizde isim yine Server2008 geliyor. Bunu import esnasında değiştirmenin bir yolu var mıdır?

  12. Serhat AKINCI

    Import sorasında değiştirilebilir veya Export edilmiş dosyalar arasında .EXP uzantılı olanı örneğin Notepad ile açıp içinde iki yerde geçen sanal makine ismini değiştirip Import yapabilirsin.

  13. sabri coşkun kazdal

    Serhat bey iyi çalışmalar,
    2008 hyper -v kullanıyorum. fakat makinamı yeniden başlattığımda sanal makinalarımdan biri kayboldu fakat tekrar bu sanal makinayı getirmeye hvd dosyasından kurdum fakat makina ilk kurulduğu gibi geldi bunu en son hali ile nasıl çalıştıra bilirim.

  14. Ziya

    selamlar,

    2008 r2 hyperv den başarılı bir şekilde export ettiğim vm yi 2012 r2 hyperv’ye import ettiğimde “Hyper-V did not find virtual machines to import from location” hatası alıyorum. 2008r2 ortamda yok. virtual hd yi bağlama yöntemi dışında nasıl çözebilirim acaba?

  15. Ziya

    merhaba,
    kendi soruma yabancı kaynaklardan araştırıp bulduğum aynı zamanda da uygulayıp başarıya ulaştığım cevabı yazayım müsade ederseniz. detay yazmayacağım …

    4 adet sanal makina ve farklı bir fiziksel hdd üzerindeler..

    – Import edeceğim server 2012 r2 makinasına bir vhd oluşturup attach edip “r2 olmayan windows server 2012” kurdum. ( mevcut 2012 r2 kulumumum etkilenmiyor)

    bu vhd den boot edip üzerine hyperv rolü kurup sanal makinaları import ettim.

    makinaları start etmeden tekrar export işlemi uyguladım.

    boot configi editleyip tekrar kurulu server 2012 r2 ‘den boot ettim.
    hyperv yi kurup sanalları tekrar import ettim.

    şu anda sıkıntısız kullanıyorum ve paylaşmak istedim
    saygılar

  16. kadir sahin

    merhaba hocam

    ben şirkette hyper v kullanıyorum fakat ben export işlemini otomatik yapmak istiyorum.

    yani kısaca örnek vereceksek her gece saat 03:00 da bütün sanal makinalarımı d diskime export et. gibi

    böyle bir şey yapmak mümkünmüdür ?

    teşekkürler.

  17. Serhat AKINCI

    Kadir Sahin – Basit bir PowerShell Script ile Export işini otomatikleştirmen mümkün. Ama bunun yerine en basitinden Windows Server Backup kullanmanı öneririm.

  18. ali vural

    Hocam selam,
    Windows Server 2012 R2 64bit makina üzerinde çalışan HyperV sunucuma bağlı sanal makinamı, Windows Server 2008 64bit makina üzerinde çalışan HyperV sunucuma import ederken hata alıyorum.
    Teknik olarak mümkün olmadığı için mi? Yoksa başka bir şey mi var?
    Sanal makina altında import dosyaları olduğu halde “import dosyalarını bulamıyorum” hatası alıyorum.
    Teşekkürler

Yorum Ekle

* Gerekli

* Gerekli

* Tercihen