Merhabalar,
Yoğun bir Ekim ayından sonra yeni bir makale ile sizlerle birlikteyim. Bu makalemde Changed Block Tracking -CBT teknolojisinden ve CBT ile ilgili bir problemin nasıl çözüleceğini anlatacağım. Öncelikle “CBT nedir” diyelim ve tanımını yapalım.
Changed Block Tracking -CBT nedir?
CBT, bir sanal makine diski üzerinde, değişen veri bloklarını hypervisor seviyesinde takip ederek, yedek almak isteyen yedekleme yazılımlarının bilgisine sunan bir teknolojidir. Çeşitli yedekleme yazılımları, yedek alırken bu bilgiyi kullanırlar ve komple sanal makinenin yedeğini almak yerine, sadece bu sanal makine diskleri üzerinde değişen verileri yedekleyerek hızlı bir yedekleme teknolojisini kullanımınıza sunarlar.
Örneğin bir yedekleme yazılımı yedek almak istediğinde, vSphere API‘leri vasıtasıyla, yedek alacağı sanal makinenin, son yedekleme anından sonraki değişikliklerin neler olduğunun listesini ister. Hypervisor tarafından takip edilen bu CBT bilgisi, yedekleme yazılımına iletilir ve nelerin yedeğinin alınacağı konusunda bir farkındalık oluşturulur. 🙂 Hastasıyım bu cümlenin : farkındalık oluşturmak 🙂 Böylece bu yedekleme yazılımı, sanal makine disklerinden, sadece ilgili alanlardaki verileri okur ve yeni bir recovery point olarak yedekleme zincirine ekler. Eğer böyle bir teknoloji kullanılmasaydı, yedekleme yazılımı her yedeğe başladığında tüm diski tarayıp, değişen verilerin neler olduğunun bir listesini çıkarmaya çalışacak ve çok uzun süreler boyunca da yedekleme işlemi devam edecektir. Özellikle fark yedekleri alınırken, ciddi anlamda hızlı yedek alınması sağlanmaktadır.
VMware Data Recovery, Veeam, Symantec gibi yedekleme yazılımları bu teknolojiyi kullananlara örnek olabilir.
vSphere API’leri vasıtasıyla CBT bilgisi talep edildiği için, ESXi free versiyonlarını kullanıyorsanız hayal kırıklığına uğrayacaksınız, çünkü Free versiyonda API’ler yok. Özellikle maliyet avantajı sağlayarak “proje oluşturmaya çalışan” profesyoneller için önemli bir hatırlatma olsun bu da. Yukarıda saydığım yazılımların hepsi, lisanslı ESXi versiyonları üzerinden yedek almaktadır.
CBT konusunda dikkat etmemiz ve bilmemiz gereken birkaç hassas nokta bulunmakta. Bunları da dikkate almanızda fayda var.
- CBT, yedekleme yazılımı özelliği değil, VMware’in bir özelliğidir.
- CBT, thin ve thick disklerde kullanılabilir. Bunun dışında NFS ve ISCSI datastore tipleri ile de kullanılabilmektedir.
- CBT, sanal makinenin hardware versiyonu ile ilgilidir. Hardware versiyon 7 ve sonrasındaki sanal makinelerde CBT kullanılabilir.
- CBT, varsayılan durumda aktif değildir. Siz yedekleme yazılımında, yedekleme işini oluştururken aktif edersiniz.
- Fiziksel bağlanılan RDM disklerde CBT kullanılamaz.
Hani bahsetmiştim ya değişen blokların bir liste halinde saklandığından. İşte bu liste, sanal makine dosyalarının bulundu lokasyonda, -ctk.vmdk uzantılı bir dosya olarak bulunur. Kaç tane diskiniz varsa, her disk için bu dosyadan bir tane görürsünüz CBT aktif edildiği anda.
İşte bazen bu dosya bozulur ve CBT bilgisi alınamadığı için geleneksel yedeklemeye dönülür ve yedekleme işiniz çok uzun zamanlar devam eder 🙂 Bu durumda CBT resetleme işini yapmak zorundasınız. Bunu 2 şekilde yapabilirsiniz.
- Offline Reset, yani Sanal makineyi Power Off ederek.
- Online Reset, yani Sanal makine çalışır durumdayken.
Şimdi bu seçenekleri biraz inceleyelim. Bu inceleme işini kendi sanal makinemdeki bir durumu örnek göstererek anlatacağım. Veeam yedekleme yazılımı ile, exchange sunucumu yedekliyorum. Birgün baktım ki, CBT invalid durumda ve normal incremental yedekleme ile iş devam ediyor. Disk boyutu çok yüksek ve yedekleme 10 saatten fazla sürüyor 🙂 Bilgilendirme mesajı da şu şekilde:
“CBT data is invalid, failing over to legacy incremental backup. No action is required, next job run should start using CBT again. If CBT data remains invalid follow KB1113 to perform CBT reset. Usual cause is power loss.”
Aslında burada, aksiyon almaya gerek yok demiş ve sonraki yedeklemede de aynısı olursa CBT resetleme yapmamızı istemiş. Ben de bunu fırsat bilip, şunu bir resetleyeyim dedim 🙂
Offline CBT Reset
Bu işlemi yapmak için sanal makineyi kapatmanız gerekmektedir. Ayrıca üzerinde snapshot da bulunmaması gerekiyor.
Sanal makine özelliklerine girip VM Options > Advanced > Edit Configuration seçilir.
CBT, elle nasıl enable edilir derseniz, aşağıdaki parametreleri eklemeniz gerekiyor. Eğer yedekleme yazılımında CBT seçilmişse, zaten bu değerler otomatik olarak eklenmiş olacaktır ve her disk için TRUE değerinde olacaktır. CBT resetleme işlemi için , öncelikle buradaki değerleri FALSE yapmanız gerekiyor.
- ctkEnabled TRUE
- scsi0:0.ctkEnabled TRUE
- scsi0:1.ctkEnabled TRUE
Değerleri False olarak değiştirdikten sonra özellikler penceresini kapatın. Sanal makinenin datastore üzerindeki lokasyonuna giderek, -ctk.vmdk uzantılı tüm dosyaları silin. Bunlar her disk için oluşturulmuş olan eski CBT değişiklik listesi.
Sonrasında artık sanal makineyi Power On edebilirsiniz. Yedekleme yazılımına gidip, yedekleme işi içinde CBT yi yeniden işaretleyip yedeklemeyi başlattığınızda, her disk için yeniden CBT değişiklik dosyası oluşturulacaktır. Tüm işlemler bu kadar.
Online CBT Reset
Sanal makineyi kapatamayacağınız durumlarda bu yöntemi kullanabilirsiniz. Benim exchange sunucum, kapatılacak bir sunucu olmadığı için bu yöntemi kullandım.
Bu yöntemi uygulamak için VMware vSphere PowerCLI komut satırına ihtiyacınız olacaktır.
Run as administrator ile VMware PowerCLI komut satırını başlatalım.
Aşağıdaki komut ile vCenter sunucunuza bağlanın.
Connect-VIServer -Server vcenter_sunucu -User domain\username
Yönetici bilgilerinizi girip OK ile devam edin.
ve komut satırından vcenter sunucuya bağlantıyı sağlayın.
Aşağıdaki satırları ister tek tek komut satırından girersiniz, isterseniz de powershell script haline getirip kullanabilirsiniz. İlk satırdaki “GET-VM” den sonra kendi sunucunuzun adını belirtmeniz gerekiyor.
####################################################################
$vm = Get-VM exchange01
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.ChangeTrackingEnabled = $false
$vm.ExtensionData.ReconfigVM($spec)
$SnapName = New-Snapshot -vm $vm -Name “CBT-Rest-Snapshot”
$SnapRemove = Remove-Snapshot -Snapshot $SnapName -Confirm:$false
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.ChangeTrackingEnabled = $true
$vm.ExtensionData.ReconfigVM($spec)
$SnapName1 = New-Snapshot -vm $vm -Name “CBT-Verify-Snapshot”
$SnapRemove1 = Remove-Snapshot -Snapshot $SnapName1 -Confirm:$false
####################################################################
Eğer bu komutların herhangi birinde hata mesajı alıyorsanız, powershell execution policy kontrolü yapmanız gerekebilir.
Tüm işlemler bu kadar. Sonrasında yedeklemeyi ya elle başlatın ya da zamanı gelince kendi başlasın.
Yararlı olması dileğiyle.
Yusuf İşleyen
Çok güzel bir makale olmuş, teşekkürler.