Windows 7 Native VHD Desteği – Differential VHD Üzerinden Boot
Merhabalar;
Windows 7 ile birlikte tanıtılan Native VHD desteği üzerine daha önce 2 farklı “Dual Boot” senaryosu üzerine çalışmalarımı sizinle paylaşmıştım. Bu senaryolardan ilkinde fiziksel disk üzerinde herhangi bir işletim sistemi kurulu değildi ve iki ayrı VHD dosyası üzerinden Windows 7 ve Windows Server 2008 R2 Dual Boot olarak çalışmaktaydı. Diğer senaryomuzda ise fiziksel disk üzerinde bir işletim sistemi kurulu iken, farklı bir volume üzerine bir VHD dosyası oluşturmuş, diğer işletim sistemimizi bu VHD üzerine kurarak Dual Boot konfigürasyonunu gerçekleştirmiştik.

Windows 7 üzerinde yer alan Native VHD desteğinin ulaştığı en uç nokta bize Differential VHD’ler üzerinden boot imkanı sağlamakta. Uygulamanın temelinde “Base” VHD yer almakta. Teorik olarak bakacak olursak, fiziksel disk üzerinde iki ayrı VHD dosyası bulunuyor. Bunlardan ilk etapta biri oluşturulur ve işletim sistemi, güncellemeler, programlar gibi günlük işlemlerde kullanılacak bileşenler yüklenir. Yükleme işlemlerinden sonra, birinci VHD yi kendisine baz alan bir differential VHD oluşturulur ve bilgisayarın oluşturulan ikinci VHD üzerinden boot etmesi sağlanır.
Bu sayede login olan kullanıcıların profilleri ve sistem üzerinde herhangi bir yere kaydettikleri veriler differential VHD üzerinde tutulacaktır. Herhangi bir nedenle bilgisayarın yeniden kurulması gerekirse IT tarafında yapılması gereken tek şey oluşturulmuş differential VHD nin silinmesi ve yerine yeni bir VHD oluşturulması olacaktır. Bu sayede işletim sisteminin yani Base VHD nin ilk oluşturulduğu zamana dönülmüş olacaktır.
Bunun yanı sıra dönem dönem alınması gereken yedekler differential VHD nin fiziksel disk dışına kopyalanması yoluyla da gerçekleştirilebilir. Veya yine belirli dönemlerde differential VHD lerin içeriği “base” VHD ile birleştirilerek base VHD’nin güncel kalması sağlanabilir. Bu tip detaylara da makale içerisinde değiniyor olacağız.
Uygulamanın yapıldığı platforma baktığımızda daha önceki makalelerimde yer alan konfigürasyonun aynısı olduğunu görüyoruz. Bu tip Laboratuvar çalışmalarında kullandığım Lenovo T61 dizüstü bilgisayarım yine yardımıma koştu.
Platform:
Lenovo T61 Notebook, Üzerinde 4 GB RAM ile T8100 @ 2.10 GHz işlemci mevcut. Notebook üzerinde Windows Server 2008 R2 yüklü ve tek sunucu rolü olarak da Hyper-V sunucusu kurulu.
Hyper-V sunucusu üzerinde ise 100 GB Diske ve 1000 MB RAM e sahip bir sanal bilgisayar (Makalenin bundan sonraki kısmında sadece bilgisayar) yer alıyor. Uygulamanın tamamı bu platform üzerinde gerçekleştirildi. Dilerseniz artık uygulamaya geçebiliriz.
İlk kurulumu gerçekleştirebilmek için bilgisayarı Windows 7 Kurulum Medyasıyla başlattıktan sonra komut satırına düşmemiz gerekmektedir. Bunun için Windows 7 Kurulum ekranında Shift + F10 kısayolunu kullanabiliriz.

Komut satırını açtıktan sonra “DISKPART” komutunu kullanarak Diskpart aracına ulaşmamız gerekmektedir. Diskpart çalıştırıldıktan sonra “LIST DISK” komutu ile bilgisayara takılı olan fiziksel diskleri listeleyebiliriz.
Benim konfigürasyonumda yer alan 100 GB lik sabit sürücü Disk 0 olarak görüntülenmektedir. “SELECT DISK 0″ komutunu çalıştırarak bundan sonra yapacağımız işlemlerin Disk 0 olarak tanımlanan disk üzerinde gerçekleşmesini sağlayabiliriz.
Disk 0 olarak tanınan fiziksel diskimizi seçtikten sonra “CREATE PARTITION PRIMARY” komutuyla fiziksel diskimiz üzerinde bir Primary Partition oluşturmamız gerekmektedir. Bu disk üzerine daha sonradan VHD dosyaları ekleyebilmemiz için yapılması gereken bir işlemdir.

Primary Partition oluşturulduktan sonra “FORMAT FS=NTFS QUICK” komutunu kullanarak oluşturulan Primary partition’un NTFS dosya sistemi kullanılarak hızlı biçimlendirilmesini sağlayabiliriz. Bu komutta yer alan QUICK parametresi opsiyonel bir parametredir ancak diskin NTFS dosya sistemi ile biçimlendirilmesi zorunludur.
Partition biçimlendirildikten sonra “ASSIGN” komutu ile bir sürücü harfi atanması gerekmektedir. Bu komut kullanıldıktan sonra “LIST VOLUME” komutu aracılığıyla oluşturulan bu partition’a hangi sürücü harfinin atandığını görüntüleyebiliriz. Burada yer alan sürücü harfi VHD oluştururken kullanacağımız komutlarda kullanacağımız sürücü harfidir.

Fiziksel disk üzerine oluşturulan partitiona sürücü harfi tanımlandıktan sonra, bu partition üzerinde sanal bir disk sürücüsü yani VHD dosyası oluşturmamız gerekmekte. Bunun için “CREATE VDISK FILE=C:\windows7base.vhd MAXIMUM=50000 TYPE=EXPANDABLE” komutunu çalıştırıyoruz. Bu komutla maksimum boyutu 50000 MB olan, dinamik olarak genişleyecek bir VHD dosyası C:\sürücüsü altında Windows7Base.vhd ismiyle oluşturulacaktır.
Sanal disk dosyası oluşturulduktan sonra “SELECT VDISK FILE=C:\Windows7base.vhd” komutu kullanılarak oluşturulan sanal disk dosyası seçilmelidir. Bu sayede bundan sonra yapılacak işlemlerin bu dosya üzerinde gerçekleşeceğini belirtmiş olduk.
Sanal disk dosyası üzerinde yapılması gereken bir diğer işlem “ATTACH VDISK” komutu ile oluşturulan bu sanal disk dosyasını fiziksel bilgisayara eklemek olacaktır. Ekleme işlemi tamamlandıktan sonra “LIST VDISK” komutu aracılığıyla bilgisayara takılı olan / olmayan sanal disk dosyalarını görüntülememiz mümkündür.

Sanal disk sürücüsünü bilgisayara “ATTACH” ettikten sonra diskpart aracında ve komut satırındaki işimiz tamamlanıyor. Bundan sonraki aşamada standart bir windows 7 kurulumu yapacağız.

Kurulum sırasında değişikliğin yapılacağı tek ekran kurulumun yapılacağı diskin seçildiği bölümdür. Bu ekranda karşımıza bilgisayarımıza takılı olan disklerin listesi geliyor. Burada Disk 0 Partition 1 olarak tanımlanan volume, fiziksel diskimiz üzerinde oluşturulmuş olan primary partition iken, Disk 1 olarak görüntülenen Disk bilgisayara bağlamış olduğumuz sanal disk sürücüsüdür. Kurulumun yapılacağı disk olarak Disk 1 seçildiğinde ekranın alt tarafında windows’un bu disk üzerine kurulamayacağını belirten bir uyarı mesajı görüntüleriz. Ancak daha önceki uygulamalarda da yaptığımız gibi windows 7 işletim sistemini bu disk üzerine kuracağız.

Kurulum tamamlandıktan, kullanıcı adı ve bilgisayar adı, kullanıcı şifresi ve otomatik güncelleştirmelerin ne şekilde yükleneceğini belirledikten sonra karşımıza Windows 7 masaüstü gelecektir. Base Disk ve differential diskler arasındaki farkı gösterebilmek için işletim sisteminin masaüstüne “Win 7″ isimli bir klasör oluşturdum.

Masaüstü ortamına kurulacak uygulamalar kurulduktan, güncellemeler ve ayarlar yapıldıktan sonra bu base diske bağlı bir “Differencing VHD” oluşturmamız gerekecek. Bunun için yine WinPE Ortamına düşmemiz yani en basit anlamıyla bilgisayarı Windows 7 Kurulum medyasıyla yeniden başlatmamız gerekecektir.

Komut satırına indikten sonra diskpart aracını çalıştırmamız ve diskpart üzerindeki komutlarla C:\Windows7Base.vhd dosyasına bağlı bir differencing disk oluşturmamız gerekmektedir. Bunun için “CREATE VDISK FILE=C:\Windows7diff1.vhd PARENT=C:\Windows7Base.vhs” komutunu kullanmamız yeterlidir. Bu komut ile C:\Windows7Base.vhd sanal sürücüsüne bağlı olan windows7diff1.vhd isimli bir differencing disk C: sürücüsü altında oluşturulacaktır.
Windows 7 Native Boot senaryolarında Differencing VHD ile bu VHD’nin bağlı olduğu Parent disk aynı fiziksel diskin üzerindeki aynı partition’da yer almalıdır. Her ne kadar windows 7 kurulumu VHD dosyasına yapılsa bile Pagefile dosyası fiziksel disk üzerine oluşturulacaktır.

Differencing disk oluşturulduktan sonra “ATTACH VDISK” komutuyla bilgisayara bağlanmalıdır. Bağlama işlemi gerçekleştikten sonra diskpart üzerindeki işimiz sona ermiş olacaktır.

Diskpart aracını kapattıktan sonra yapmamız gereken işlem Windows 7 Boot yöneticisine Windows7diff1.vhd dosyasından boot edeceğini göstermek. Bunun için öncelikle var olan boot store bilgilerini görüntülememiz gerekiyor. Bunun nedeni yapacağımız işlemlerin burada yer alan “identifier” verileri üzerinden yapılacak olması.
“BCDEDIT /V” komutunu kullanarak boot store’un mevcut durumunu görüntüleyebiliriz.
Boot store üzerinde üstteki blokta, Windows Boot Manager’ın C: sürücüsü üzerinde yer aldığını ve alttaki blokta “Windows 7″ olarak tanımlanan işletim sisteminin “vhd=[C:]\Windows7base.vhd, locate=custom:12000002″ satırından anlaşılacağı üzere C:\Windows7base.vhd dosyasında yer alan \Windows klasöründe yer aldığını görebiliriz.

Bcdedit store bilgilerini görüntüledikten sonra yapmamız gereken işlem buradaki boot store bilgilerinin kopyalanması olacaktır. Bu kopyalama işlemi için
“BCDEDIT /COPY {cd662ae3-afa2-11de-87f0-f2b93e0aeeb6} /d “Windows 7 Differential Boot” komutunu kullanmamız gerekmektedir. Komutta /Copy parametresinden sonra gelen {cd662ae3-afa2-11de-87f0-f2b93e0aeeb6} bilgisi benim konfigürasyonumda “Windows 7″ işletim sisteminin kurulu olduğu C:\windows7base.vhd dosyasına giden kayıdın identifier bilgisi olduğundan kullanıldı. Sizin konfigürasyonlarınızda değer farklı olacaktır.

Kopyalama işlemi tamamlandıktan sonra bcdedit store bilgilerini kontrol ettiğimizde üçüncü bir kayıt bloğunun geldiğini görebiliriz. Bu blok {cd662ae6-afa2-11de-87fe-f2b93e0aeeb6} identifier bilgisiyle tanımlanan ve ismi “Windows 7 Differential Boot” olan bloktur.
“Windows 7 Differential Boot” olarak tanımlanan bu girişin windows7diff1.vhd dosyasını kullanarak boot etmesini sağlamak için yapılması gereken bu kayıdın “device” ve “osdevice” parametrelerini “c:\windows7diff1.vhd” dosyası olarak tanımlamaktır.

Bu tanımlamaların yapılabilmesi için kullanmamız gereken komutlar device tanımlaması için: “BCDEDIT /SET {cd662ae3-afa2-11de-87f0-f2b93e0aeeb6} device vhd=[locate]\windows7diff1.vhd” ve osdevice tanımlaması için “BCDEDIT /SET {cd662ae3-afa2-11de-87f0-f2b93e0aeeb6} osdevice vhd=[locate]\windows7diff1.vhd” komutlarıdır.

Burada dikkat edilmesi gereken nokta şudur; normal bir VHD Boot senaryosunda device ve osdevice parametrelerinde VHD dosyasının yolu [C:]\windows7base.vhd gibi bir yol iken yani doğrudan sürücü harfi tanımlanıyor iken; differential VHD boot senaryolarında bu parametreler için [locate]\windows7diff1.vhd gibi bir yol tanımlanır. Buradaki fark [C:] sürücü harfi yerine [Locate] parametresinin kullanılmasıdır. Bu sayede Windows boot loader aracı disk üzerinde windows7diff1.vhd dosyasını “bulması gerektiğini” anlar.

Bcdedit konfigürasyonu da tamamlandıktan sonra artık komut satırında yapacağımız herhangi bir işlem yoktur. Yapılması gereken şey bilgisayarı yeniden başlatmak ve boot ekranının gelip gelmeyeceğini geliyorsa tanımların doğru olup olmadığını kontrol etmektir.
Bilgisayarı yeniden başlatmak için windows 7 kurulumundan çıkmamız yeterlidir.

Bilgisayar yeniden başlatıldığında “Windows 7″ ve “Windows 7 Differential Boot” olmak üzere iki ayrı başlangıç girişinin yer aldığını görebiliriz. Deneme amaçlı “Windows 7 Differential Boot” girişini kullanarak windowsu başlattığımızda masaüstünün açıldığını görebiliriz. Yani konfigürasyonumuzda herşey olması gerektiği gibi.

Açılan masaüstüne baktığımızda daha önce Base disk üzerinde oluşturduğumuz “Win 7″ isimli klasörün durduğunu görebiliyoruz. Bu bize base disk içerisinde olan verilere differential disk üzerinden ulaşabildiğimizi gösteren bir örnek.

Peki Differential disk üzerine eklenen veriler nerede saklanıyor? Bu sorunun cevabını yine ufak bir uygulamayla verelim. Açılan masaüstünde “Differencing Üzerinde Klasör” isimli bir klasör oluşturdum ve bilgisayarı yeniden başlattım.

Bu sefer açılış seçenekleri içerisinden Windows7base.vhd diskinin tanımlı olduğu “Windows 7″ seçeneğini seçtim.

Karşımıza gelen masaüstünde “Windows 7 Differential Boot” açılışında oluşturduğumuz “Differential Üzerinde Klasör” isimli klasörün olmadığını yani bu açılış sayesinde Windows’un kurulduktan sonra yapılan konfigürasyonlu haline döndüğünü görebiliriz.

Differencing VHD kullanılarak yapılan açılış senaryolarında kullanıcıların yaptıkları işlemler fiziksel disk üzerindeki differencing VHD üzerinde saklanmaktadır. Bu değişiklikler base disk üzerine aktarılmaz. Bu sayede örneğin kullanıcı işletim sistemi üzerinde bir sorun yaşadığında sadece differencing VHD dosyasını silip yeni bir differencing vhd dosyası oluşturarak kullanıcı bilgisayarının sıfırlanmasını sağlayabiliriz.
Böyle bir durumda base vhd üzerinde kullanıcıların dosyaları, profil bilgileri gibi kullanıcıların yaptığı değişiklikler tutulmayacaktır. Bu hem avantaj hem de dezavantaj olarak karşımıza çıkar. Örneğin kullanıcılara bilgisayarları sıfırlandıktan sonra kendi kurdukları programları veya dosyaları kopyalamakla zaman harcamamız gerekebilir. Bunun önüne geçmek için differencing VHD ile Base VHD lerin “merge” edilmesi yani birleştirilmesi imkanı sunulmuştur. Belirli periyodlarla örneğin haftada bir yapılacak merge işlemi olası bir işletim sistemi hatasında kaybolacak verinin daha sınırlı olmasını sağlayacaktır. Çünkü bu işlem ile differencing VHD üzerinde yer alan veriler Base VHD üzerine aktarılmaktadır.
Bunun sağlanması için bilgisayarın WinPE ortamında açılması ve komut satırından diskpart aracının çalıştırılması gerekmektedir. Kullanılacak olan komutlar ise öncelikle “Select Vdisk file=C:\Windows7diff1.vhd” komutudur. Bu sayede az sonra yapılacak işlemin C: sürücüsü altında yer alan Windows7diff1.vhd isimli dosya üzerinde çalıştırılması sağlanır.
Merge işlemini gerçekleştirmek için ise kullanacağımız komut “MERGE VDISK DEPTH=1″ komutudur. Bu komut ile seçmiş olduğumuz differential virtual diskin (C:\windows7diff1.vhd) üzerindeki bilgiler bağlı bulunduğu parent diske (C:\windows7base.vhd) aktarılacaktır.

Aktarım işlemi tamamlandıktan sonra “Windows 7″ olarak tanımlanan boot girişinden yani C:\windows7base.vhd dosyası içerisindeki işletim sisteminden bilgisayarı çalıştırdığımızda differential boot üzerinde yaptığımız değişikliklerin buraya geldiğini görebiliriz.

Aşağıdaki masaüstü görüntüsü Base disk üzerindeki işletim sisteminin masaüstüdür. Differencing disk üzerinde oluşturduğumuz klasörün burada görüntüleniyor olması; differencing disk ile base disk arasındaki merge işleminin başarıyla tamamlandığını göstermektedir.

Bu makalemizde Windows 7 işletim sistemi ile birlikte tanıtılan “Native VHD” desteğinin ulaştığı son noktayı, differencing VHD’ler üzerinden boot senaryosunu ve bu senaryonun konfigürasyonuna değindik.
Bu uygulama, Change Management; Update Management; Desktop Konsolidasyonu ve Deployment Yönetimi gibi farklı alanlarda kullanılabilir.
İyi çalışmalar dilerim.
Harika bir yazı oldukça faydalı olduğunu düşünüyorum. Emeğine sağlık, teşekkürler