Hyper-V Üzerinde ki Sanal Makineler İçin Snapshot Mekanizması Nedir ve Nasıl Çalışır?
Test ve geliştirme ortamlarında ki sistemler üzerinde yapılan bir yanlışlığın bir anda geri alınabilmesi oldukça zaman kurtarmaktadır. Ancak bu işlem çoğu zaman yedekten geri dönülerek yapılmaktadır. Sanallaştırma teknolojisi sayesinde ilgili sanal makinenin o anki görüntüsü alınıp çalışılmaya devam edilebilmekte ve bir sorunla karşılaşılması halinde az önce alınan görüntüye geri dönülerek hızlı bir şekilde baştan başlanabilmekte.
İlk olarak Volume Snapshot hayatımıza girdiğinde dosya sunucularımız üzerinde paylaşılan dosyalar için bulunmaz ve olmazsa olmaz bir hizmet idi. Volume Snapshot sayesinde paylaşılan dosyalarımızın belirlediğimiz anlarda görüntüleri oluşturulup ilgili disk alanında saklanması sayesinde dosyalarımızın silinmesi ya da yanlışlıkla değiştirilmesi durumunda büyük teyp ünitelerinden ilgili dosyanın doğru sürümünü bulmak için vakit kaybetmek yerine oldukça kısa bir zamanda dosyanın istenen bir sürümüne geri döndürebiliyoruz. Hatta bu işlemi bilinçli bir son kullanıcı büyük bir kolaylıkla Previous Versions sekmesinden yapabilmekte.
Ancak Hyper-V üzerinde çalışan sanal makinelerimizi için snapshot terimi temel olarak aynı konseptte olsa da daha farklı bir anlam ifade etmekte. Hyper-V üzerinde çalışan bir sanal makinenin snapshot (anlık görüntüsü) alındığında arka planda oldukça büyük işlemler gerçekleştirilmektedir. Sanal makinelerde snapshot sayesinde geriye dönebilmek mümkün olsa dahi yazımın başında da belirttiğim üzere bu yöntem test ve geliştirme ortamlarında kullanılmalıdır. Artık dosyalardan ziyade tüm bir sistemin bir parçasının anlık görüntüsü alındığı için ürün ortamında yani canlı ortamda bu anlık görüntünün alındığı zamana geri dönmek belki ilgili sanal makinede ki sıkıntıyı giderecektir ancak sistemin geri kalanında çok daha ciddi ve hatta geri dönülemez sıkıntılara yol açabilir. Makalemin ilerleyen bölümlerinde bu sıkıntılara da değineceğim. İşte bu sıkıntılar sebebiyle bir snapshot alma yöntemi kesinlikle bir yedekleme yöntemi değildir ve bu şekilde düşünülmemelidir. Bu makalemde sizlere Hyper-V üzerinde çalışan bir sanal makinenin snapshot ı alındığında neler olur, bu snapshot kullanılarak o ana nasıl geri dönülür ve snaphsot nasıl silinir konu başlıklarını anlatmaya çalışacağım.
Makaleme, LABCLIENT2 isimli Windows 7 işletim sistemi çalıştıran sanal makine üzerinden örnekler vererek devam edeceğim. Hyper-V Remote Management makalesini yazdığımda uzaktan yönetim için kullanacağım LABCLIENT2 sanal makinesinde gerekli ayarları yaparak adım adım ilerlemem gerekiyordu. Eğer bir hata yaparsam da hızlı bir şekilde bir önceki sağlıklı adıma gelebilmem önemliydi. Dolayısıyla LABCLIENT2 makinesi üzerinde iki snapshot noktası oluşturdum. Snapshot alınmış bir sanal makine Hyper-V Manager konsolunda aşağıda ki ekran görüntsünde olduğu gibi ilgili sanal makine seçildiğinde alt bölümde ki Snapshots alanında gözükmektedir.
NOT: Sanal makinenin anlık görüntüsünün alınması differencing tipde disk oluşturacaktır. Dolayısıyla bu işlem sanal makinenin performans kaybı yaşamasına sebep olacaktır.
Bir sanal makinenin anlık görüntüsünü almak oldukça kolaydır.
- Sanal makinenin konsolu açık ise Snapshot ikonuna tıklamak,
- Hyper-V Manager konsolunda ilgili sanal makine seçili iken Actions bölümünde sanal makinenin adının altında bulunan bölümde Snapshot ikonuna tıklamak,
- Hyper-V Manager konsolunda sanal makineye sağ tıklayarak Snapshot linkine tıklamak,
Yukarıda ki üç seçenekten herhangi birisi kullanıldığında ve karşımıza gelen kutuya anlaşılır bir ifade yazmak yeterlidir. Burada unutulmaması gereken nokta Snapshot ikonuna tıklandığında işlem başlamış olmaktadır. Dolayısıyla ilgili açıklama kutusuna yazılacak ifadeler beklenmemektedir. Burada önemli olan açıklama kutusuna snapshot ın alınma sebebinin anlaşılır bir ifade ile yazılmasıdır. Anlaşılır açıklama sayesinde doğru anlık görüntüye dönülebilir veya doğru anlık görüntü silinebilir.
NOT: Hyper-V Manager konsolunda ilgili sanal makine için Actions bölümünde bulunan Snapshot linki tıklanarak anlık görüntü alındığında aynı bölümde “Cancel Taking Snapshot” ifadesi görülecektir. Snapshot alma işlemi bu ifadeye tıklanarak iptal edilebilir.
Sanal makinemiz üzerinde bir anlık görüntü aldığımızda aşağıda ki değişiklikler olmaktadır,
- Hyper-V ilgili sanal makineyi dondurur,
- Sanal makinenin orjinal .vhd dosyası sadece okunur hale getirirlir,
- Sanal makineye bağlı olan herbir disk için differencing disk tipinde yeni bir GUID.avhd dosyası oluşturur,
- Oluşturulan GUID.avhd dosyası sanal makineye eklenir,
- Sanal makinenin konfigurasyon dosyasının (GUID.xml dosyası) bir kopyası alınır,
- Sanal makinenin o anki bellek içeriği kayıt edilir (GUID.bin ve GUID.vsv dosyaları),
NOT: Eğer ilk snapshot ise differencing disk tipinde ki GUID.avhd dosyasının parent diski .vhd dosyası olacak şekilde ayarlanır. Eğer var olan bir snapshot üzerinde yeni bir snapshot oluşturulur ise bu sefer yeni GUID.avhd dosyasının parent diski bir önceki GUID.avhd dosyası olacaktır. Bunu ilgili sanal makinenin Settings bölümünden diske gelip Inspect butonuna tıklayarak takip edebiliriz. Üzerinde iki snapshot bulunan LABCLIENT2 sanal makinesi için disklerin durumu aşağıda ki şekilde gözükecektir.
NOT: Eğer snapshot alındığı sırada sanal makine çalışmıyor ise GUID.vsv ve GUID.bin dosyaları oluşturulmayacaktır.
Peki oluşturulan bu dosyalar nerede saklanmakta? Bu sorunun cevabı yine sanal makinenin Settings bölümünde saklı. Sanal makinemizin settings bölümünü açtığımızda Management bölümünde Snapshot File Location alanını görebiliriz. Sanal makinemizin anlık görüntüsünü aldığımızda ilgili dosyalar burada ki bölümde oluşturulan Snapshots klasörünün altında saklanmaktadır. Sadece sanal makinemizin disk dosyaları bu klasör dışında ve birlikte saklanmaktadır. Eğer sanal makinemiz üzerinde bir snapshot var ise bu bölüm düzenlenemez durumda olacaktır.
Disk üzerinde dosyaların görünümlerine baktığımızda ise karşımıza aşağıda ki ekran görüntüleri gelmektedir. Ekran görüntülerinde iki ayrı zamanda oluşturulmuş ve birbirlerinden farklı GUID e sahip dosya ve klasörlerin bulunduğu gözükmektedir. Buradan sanal makinemiz üzerinde iki adet snapshot bulunduğu bilgisini çıkarabiliriz.
NOT: Herbir snapshot işleminin ardından yeni bir guid.avhd ddisk dosyası oluşturulmaktadır. Bu disk dosyalarının her birisi, orjinal .vhd disk dosyasına atanan boyut kadar (Örneğin 20 GB) yani sanal makinenin üzerinde ki işletim sisteminde gözüken disklerin kapasiteleri kadar büyüyerek yer kaplayabilmektedir. Bu durumun sonucunda eğer snapshot lar sistemde tutulur ise disk alanının yetmemesi sonucu sanal makinelerimizin çalışması Paused Critical uyarısı ile durdurulacaktır. Bu durumun önlenebilmesi için logların takibi de önem kazanmaktadır. Sistem disk üzerinde ki boş alan 2 Gb ın altına düştüğünde Warning mesajları düşmeye başlayacaktır. Eğer bu uyarılar gözden kaçırılır ve disk üzerinde ki boş alan 200 Mb ın altına düşer ise bu durumda sanal makinelerimiz veri kaybı yaşanmaması için sistem tarafından otomatik olarak durdurulur ve durumları Paused Critical olarak etiketlenir.
Hyper-V Manager konsolunda snapshot alınmış bir sanal makine için geri dönülmek istenen snapshot seçildiğinde Actions bölümünde aşağıda ki görüntü ortaya çıkacaktır.
Yukarıda ki seçeneklere değinmek gerekirse,
- Settings: Sanal makinemizin snapshot alındığı andaki ayarlarına bakabilir. Böylece o an ile dönülmek istenen an arasında sanal makinenin donanımsal bir farklılığı olup olmadığı kontrol edilebilir. Ayrıca ilgili snapshot ın kullandığı avhd dosyasının hangisi olduğu ve hangi disklere bağlı olduğu da bu bölümde görülebilir.
- Apply: Snapshot alınmış bir sanal makineyi ilgili ana geri döndürmek için geri dönülmek istenen snapshot ın Hyper-V Manager konsolundan seçilip sağ tıklandıktan sonra Apply linkine tıklanması gerekmektedir. Eğer bir önceki snapshot haline dönecek isek sanal makinenin konsolundan direk Revert linkine tıklayarak da bu işlemi gerçekleştirebiliriz. Böylece sanal makine durdurulur, snapshot alındığı anda ki donanım (ram, işlemci, ağ kartı vb.) bilgileri yüklenir, o ana kadar kullanılan GUID.avhd sanal disk dosyası silinir, yeni bir GUID kullanılarak GUID.avhd sanal disk dosyası oluşturulur, sanal makine yeniden başlatılır ve snapshot alındığı anda ki durum GUID.vsv ve GUID.bin dosyaları kullanılarak geri yüklenir. Eğer bu snapshot sanal makine kapalı iken alındı ise bu durumda donanım bilgileri yüklendikten sonra sanal makine kapalı olarak bırakılır. Bu işlemi Hyper-V Manager konsolu üzerinden gerçekleştirmek istediğimizde ise karşımıza iki seçeneğin olduğu aşağıda ki iletişim kutusu çıkacaktır.
Bu seçeneklerden, - Take Snapshot and Apply: O anki durumun görüntüsünü alarak yeni bir snapshot ağaç kırılımı başlatır.
- Apply: Geri dönülmek istenen anlık görüntüyü sanal makineye uygular. Bu seçenek aslında Revert işlevini yerine getirmektedir.
- Cancel: Geri dönme işini iptal eder.
- Export: Öncelikle seçilen snapshot anına kadar oluşmuş olan tüm diskler Export için seçilmiş olan alanda Virtual Hard Disks klasörü içerisine kopyalanır. Ardından snapshot diskleri birleştirilerek (merge) Disk_ismi.vhd şekline getirilir. Eğer bu diski sanal makinemize bağlarsak snapshot alınmış halinden devam edebileceğimizi görürüz. Bu işlemin gerçekleşebilmesi için işlemin sanal makine kapalı iken başlatılmalıdır.
- Rename: Önceden alınmış olan snapshot ların isimleri düzenlenebilir.
- Delete Snapshot: Kullanılmayacağı düşünülen bir snapshot seçilere silinebilir.
- Delete Snapshot tree: Seçilen ağaç içerisinde ki tüm snapshot ları silinir. Bu sırada ilgili diskler için merge (birleştirme) işlemi gerçekleştirilir.
Snapshot ların silinmesi kolay gözüksede silinmek istenen snapshot ın üzerinde dikkatlice düşünülmesi gerekmektedir. Bazı snapshot lara ait dosyalar direk silinebilirken bazıları ise eğer parent disk e bağımlı iseler bu disk ile birleştirildikten sonra silinebilirler. İşte burada snapshot silmenin önemi ortaya çıkmaktadır. Eğer bir parent diske bağımlı olmayan snapshot silinirse dosyaları da disk üzerinden derhal silinir. Ancak bir parent diske bağımlı olan snapshot silinmek istenirse öncelikle parent diski ile birleştirilmesi (merge) gerekmektedir. Bu işlem ise disk üzerinde ekstradan boş alan gerektirmektedir. Dolayısıyla disk üzerinde yeterli yerimiz olmadan merge işlemini tetiklersek işlem ya tamamlanamaz ya da sanal disk dosyalarımız hasar görür. Örneğin aşağıda ki snapshot silsilesi üzerinden devam edersek,
Yukarıda ki ekran görüntüsünde gözüken bir sürü snapshot hangisini sildiğimizde ne ile kaşılaşabileceğimizi inceleyelim,
Yeşil oku (Now ifadeli) gördüğümüz yer sanal makinemizin şu an ki çalıştığı snapshot diskini de bize ifade etmektedir. Bu durumda bizim için Snapshot4 ve Snapshot5 in anlamı kalmadığında silebiliriz. Sanal makinemiz Snapshot7 sonrasından çalışmaya devam ettiği için silme işlemini gerçekleştirebilmek için sanal makinenin kapalı olmasına gerek kalmayacaktır. Dolayısıyla Snapshot4 ve Snapshot5 e ait olan tüm dosyalar direk olarak silinecektir. Her iki snapshot ı sildiğimizde son görüntü aşağıda ki şekilde olacaktır.
Yukarıda ki ekran görüntüsünde Snapshot7 nin Snapshot6 ya bağlı olduğunu, Snapshot3 ve Snapshot6 nın ise Snapshot2 ye bağlı olduğunu görebiliriz. Snapshot lar arasında ki bağlantıyı Powershell kullanarak da görebilmemiz mümkün. Bunun için http://pshyperv.codeplex.com/releases/view/62842#DownloadId=219013 adresinden PSHyper-V.zip dosyasını indirelim ve klasör içerisinde açalım. Ardından Install script ini Administrator yetkisi ile çalıştırarak kurulumu gerçekleştirelim. Kurulumun tamamlanmasının ardından PowerShell ekranı karşımıza çıkacaktır. Burada aşağıda ki komutu yazdığımızda bize ilgili sanal makine üzerinde ki snapshot ları ve bunların birbirleri ile bağlantılarını gösterecektir.
Get-VMSnapshotTree LABCLIENT2
Bu durumda Snapshot2 yi siler isek Snapshot2 nin diski hem Snapshot3 hem de Snapshot6 ile birleştirilecektir. Bu da bize gerekli olan disk alanını iki katına çıkarması anlamına gelecektir. Ancak Snapshot3 ve Snapshot6 silinecek olursa bu durumda zinciri takip edecek şekilde disklerin birşeltirilmesi işlemi yapılacaktır. Malesef merge işlemi sırasında hangi snapshot ın hangisi ile birleştirildiği konusunda bir bilgi bulamıyoruz. Snapshot6 silindiğinde ise yeni bir avhd dosyası oluşturulacak ve Snapshot7 ile birleştirilecektir. Böylece hem Snapshot2 korunmuş hem de arada ki bağlantı korunmuş olacaktır.
Bu makalemde sizlere Hyper-V üzerinde çalışan bir sanal makinenin snapshot ı alındığında neler olur, bu snapshot kullanılarak o ana nasıl geri dönülür ve snaphsot nasıl silinir konu başlıklarını anlatmaya çalıştım.
Faydalı olması dileğimle…
M. Hakan CAN