ghettoVCB.sh – VMware ESX(i) [3.5,4.x,5.x] Backup Scripti
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYWwVmxo' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
vmware esx(i) sistemler üzerinde çalışan sanal sunucuların online olarak yedeklenmesini sağlayan ghettoVCB isimli güzel bir shell scripti var. Bu script, yedeklenecek sanal sunucuların bir snapshot'ını aldıktan sonra disk (vmdk ) dosyalarını yedekliyor ve işlemlerin ardından snapshot'ı siliyor.
Kullanımı oldukça kolay olan ghettoVCB hem basit hem de güzelce dökümante edilmiş olmasından ötürü tercih edilebilecek bir yedekleme yöntemi. Tek eksisi incremental yedekleme yapamadığından dolayı her seferinde sanal sunucuları komple yedeklemek durumunda kalmanız. Ancak yer sıkıntınız yoksa ve nispeten küçük sistemlerde maliyet oluşturmadan hızlıca bir yedekleme sistemi kurmak isterseniz ghettoVCB'yi rahatlıkla kullanabilirsiniz.
Yazının devamında, ghettoVCB ile ilgili biraz daha detay verip backup/restore işlemlerinin nasıl yapılabileceğinden bahsedeceğim. İlginizi çekerse göz atmak isteyebilirsiniz.
Yukarıda da bahsettiğim gibi ghettoVCB basit olmasına rağmen epey gelişmiş özellikleri bulunan bir uygulama. Bazıları şunlar:
- vmware esx 3.5/4.x/5.x ve ESXi 3.5/4.x/5.x desteği.
- Çalışmakta olan VM'lerin yedeklenebilmesi.
- Local Storage, SAN ya da NFS share'e yedekleme.
- Birden fazla sanal diski (vmdk) olan VM'ler için tüm disklerin yedeklenmesi.
- Farklı VM'ler için farklı yedekleme politikalarının oluşturulabilmesi.
- Global yapılandırma dosyası.
- backup statulerinin email ile raporlanması.
- Dryrun özelliği ile yedeklemeyi gerçekten yapmadan config test özelliği.
Listeyi daha uzatmak mümkün (detaylar için yazının sonundaki kaynak linkine bakabilirsiniz.)
Kurulum
Kurulumun pek bir espirisi yok; script'i içeren paketi download edip esx hostunuzda açmaktan ibaret:
1 -) Script'in bulunduğu paketi https://github.com/lamw/ghettoVCB/ adresinden indirin ve scp vs. kullanarak ESX hostunuza kopyalayın.
2 -) ESX'e transfer edilen gzip dosyasını açın:
# tar -zxvf lamw-ghettoVCB-518cef7.tar.gz
Paket içerisinden çıkan ghettoVCB isimli bir dizin aşağıda görüldüğü gibi backup ve restore scriptlerini ve yapılandırma dosyalarını barındırır:
# ls -l -rw-rw-r-- 1 root root 281 Nov 28 2011 README -rwxrwxr-x 1 root root 16024 Nov 28 2011 ghettoVCB-restore.sh -rw-rw-r-- 1 root root 309 Nov 28 2011 ghettoVCB-restore_vm_restore_configuration_template -rw-rw-r-- 1 root root 354 Apr 13 11:48 ghettoVCB-vm_backup_configuration_template -rw-rw-r-- 1 root root 629 Apr 13 11:35 ghettoVCB.conf -rwxrwxr-x 1 root root 49375 Nov 28 2011 ghettoVCB.sh -rw-r--r-- 1 root root 157 May 9 08:34 vms_to_backup -rw-r--r-- 1 root root 602 May 14 13:35 vms_to_restore
Dizin içerisinde gördüğünüz üzere ghettoVCB.sh ve ghettoVCB-restore.sh isimli iki adet shell script bulunuyor. ghettoVCB.sh yedekleme işlemleri için kullanılırken, ghettoVCB-restore.sh ise isminden de anlaşılacağı üzere restore işlemlerinde kullanılıyor.
Yapılandırma
Temel olarak ghettoVCB'nin yapılandırılması script içerisindeki yedeklerin nereye ve nasıl alınacağı gibi tanımlama alanlarının düzenlenmesinden ibaret. Bu bölümlerin örnek bir çıktısı aşağıdaki gibidir:
################################################################## # directory that all VM backups should go (e.g. /vmfs/volumes/SAN_LUN1/mybackupdir) VM_BACKUP_VOLUME=/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS # Format output of VMDK backup # zeroedthick # 2gbsparse # thin # eagerzeroedthick DISK_BACKUP_FORMAT=thin # Number of backups for a given VM before deleting VM_BACKUP_ROTATION_COUNT=3 # Shutdown guestOS prior to running backups and power them back on afterwards # This feature assumes vmware Tools are installed, else they will not power down and loop forever # 1=on, 0 =off POWER_VM_DOWN_BEFORE_BACKUP=0 # enable shutdown code 1=on, 0 = off ENABLE_HARD_POWER_OFF=0 # if the above flag "ENABLE_HARD_POWER_OFF "is set to 1, then will look at this flag which is the # of iterations # the script will wait before executing a hard power off, this will be a multiple of 60seconds # (e.g) = 3, which means this will wait up to 180seconds (3min) before it just powers off the VM ITER_TO_WAIT_SHUTDOWN=3 # Number of iterations the script will wait before giving up on powering down the VM and ignoring it for backup # this will be a multiple of 60 (e.g) = 5, which means this will wait up to 300secs (5min) before it gives up POWER_DOWN_TIMEOUT=5 # enable compression with gzip+tar 1=on, 0=off ENABLE_COMPRESSION=0 ############################ ####### NEW PARAMS ######### ############################ # Include VMs memory when taking snapshot VM_SNAPSHOT_MEMORY=0 # Quiesce VM when taking snapshot (requires VMware Tools to be installed) VM_SNAPSHOT_QUIESCE=0 ########################################################## # NON-PERSISTENT NFS-BACKUP ONLY # # ENABLE NON PERSISTENT NFS BACKUP 1=on, 0=off ENABLE_NON_PERSISTENT_NFS=0 # umount NFS datastore after backup is complete 1=yes, 0=no UNMOUNT_NFS=0 # IP Address of NFS Server NFS_SERVER=172.51.0.192 # Path of exported folder residing on NFS Server (e.g. /some/mount/point ) NFS_MOUNT=/upload # Non-persistent NFS datastore display name of choice NFS_LOCAL_NAME=backup # Name of backup directory for VMs residing on the NFS volume NFS_VM_BACKUP_DIR=mybackups ############################ ######### EMAIL ############ ############################ # Email debug 1=yes, 0=no EMAIL_DEBUG=0 # Email log 1=yes, 0=no EMAIL_LOG=0 # Email Delay Interval from NC (netcat) - default 1 EMAIL_DELAY_INTERVAL=1 # Email SMTP server EMAIL_SERVER=auroa.primp-industries.com # Email SMTP server port EMAIL_SERVER_PORT=25 # Email FROM EMAIL_FROM=root@ghettoVCB # Email RCPT [email protected] ########################## DO NOT MODIFY PAST THIS LINE ##########################
Yukarıdaki parametrelerin en önemlileri şunlardır:
Backup Datastore
VM_BACKUP_VOLUME=/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS
Yedeklerin alınacağı datastore ve backup dizinine ait tam path bu bölümde tanımlanır. Eğer belirttiğiniz dizin yok ise yedekleme sırasında oluşturulur.
Backup disk formatı
DISK_BACKUP_FORMAT=thin
Yedeklenen vmdk dosyalarının hangi formatta tutulacağı burada belirtilir. Seçenekler: zeroedthick, eagerzeroedthick, thin, ve 2gbsparse'dır.
Backup Rotation
VM_BACKUP_ROTATION_COUNT=3
Geçmişe yönelik kaç backup set'i tutulacağını burada belirtiyoruz. Örneğin buradaki değer 3 olduğu için 4. yedekleme işleminde en eski tarihli backup silinecektir.
Power Down Before Backup
POWER_VM_DOWN_BEFORE_BACKUP=0
Default olarak devre dışı (0) olarak gelen bu özellikle yedekleme öncesinde sanal sunucunun stop edilip edilmeyeceğini belirliyoruz. Bu parametreye bağlı olarak ENABLE_HARD_POWER_OFF ve ITER_TO_WAIT_SHUTDOWN isimli başka parametreler de var ancak ben online yedek aldığımdan yani makinaları kapamadığımdan dolayı bu değerlere değinmeyeceğim. Dolayısı ile default olarak bırakabilirsiniz. (Parametrelerle ilgili tüm detaylar için bkz: http://communities.vmware.com/docs/DOC-8760 )
Yedeklerin Sıkıştırılması
ENABLE_COMPRESSION=0
Compression değerini 1 yaptığınız zaman alınan yedekler sıkıştırılıyorlar; ancak bu konuda sıkıştırma için maximum size ile ilgili limitler bulunduğu söyleniyor. Bu nedenle compression özelliğini sadece küçük diskli vmdk dosyaları için kullanılması öneriliyor. Aksi halde büyük vm'lerin restore edilmesinde problemler yaşanabilir. Ben de bu nedenlerden dolayı compression kullanmadım.
NFS Üzerinden Yedekleme
ENABLE_NON_PERSISTENT_NFS=0 UNMOUNT_NFS=0 NFS_SERVER=172.30.0.195 NFS_MOUNT=/nfsshare NFS_LOCAL_NAME=nfs_storage_backup
Yedeklerinizi NFS üzerinden bağlanabildiğiniz bir mecraya almak istemeniz durumunda yukarıdaki parametreleri kendinize göre düzenleyip kullanabiliyorsunuz. Öntanımlı olarak disable olarak gelen ENABLE_NON_PERSISTENT_NFS özelliğini aktif ederseniz NFS mount işlemi sadece yedekleme sırasında gerçekleştirilecektir. Bu şekilde ESX'in kalıcı bir NFS bağlantısı kurmasına gerek kalmamış oluyor. Bu özelliği on yaparsanız NFS ile ilgili olan diğer özellikler de tanımlamanız gerekiyor.
Bu özelliği kullanmak isterseniz detaylar için gene http://communities.vmware.com/docs/DOC-8760 adresine bakabilirsiniz.
Email ile Raporlama
EMAIL_LOG=0 EMAIL_DEBUG=0 EMAIL_SERVER=auroa.primp-industries.com EMAIL_SERVER_PORT=25 EMAIL_DELAY_INTERVAL=1 [email protected] EMAIL_FROM=root@ghettoVCB
Bu bölümde de backup işlemlerinin email ile raporlanması için gerekli olan bilgileri giriyorsunuz. Gayet açık olduğundan detaylıca değinmeye gerek yok.
Script içerisinde yapılan tanımlamaların dışında, bahsi geçen aynı ayarlar ghettoVCB.conf isimli ana yapılandırma dosyası vasıtası ile de yapılabilmektedir.
İlgili conf dosyası script içerisindeki tanımlama satırlarının aynılarını içerir:
# cat ghettoVCB.conf VM_BACKUP_VOLUME=/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS DISK_BACKUP_FORMAT=thin VM_BACKUP_ROTATION_COUNT=3 POWER_VM_DOWN_BEFORE_BACKUP=0 ENABLE_HARD_POWER_OFF=0 ITER_TO_WAIT_SHUTDOWN=3 POWER_DOWN_TIMEOUT=5 ENABLE_COMPRESSION=0 VM_SNAPSHOT_MEMORY=0 VM_SNAPSHOT_QUIESCE=0 ENABLE_NON_PERSISTENT_NFS=0 UNMOUNT_NFS=0 NFS_SERVER=172.30.0.195 NFS_MOUNT=/nfsshare NFS_LOCAL_NAME=nfs_storage_backup NFS_VM_BACKUP_DIR=mybackups SNAPSHOT_TIMEOUT=15 EMAIL_LOG=0 EMAIL_DEBUG=0 EMAIL_SERVER=auroa.primp-industries.com EMAIL_SERVER_PORT=25 EMAIL_DELAY_INTERVAL=1 [email protected] EMAIL_FROM=root@ghettoVCB
Düzenlemelerinizi bu dosya içerisinde de yapabilirsiniz ve scripti çalıştırırken -g parametresi ile conf dosyasının tam yolunu gostererek devreye alınmasını sağlayabilirsiniz. Sonuç olarak bu conf dosyası, ghettoVCB.sh içerisinde hali hazırda tanımlı olan ayarları değiştirmeden farklı tanımlamalarla yedekleme yapabilmenize olanak sağlar.
Kullanım
Bu bölümde önce Backup ile ilgili kullanım şekillerine sonrasında da Restore ile ilgili kullanım bilgilerine değineceğim.
Backup İşlemleri
Backup için ghettoVCB.sh scripti kullanımaktadır, temel söz dizimi ise aşağıda görüldüğü gibidir:
# ./ghettoVCB.sh -f [VM_BACKUP_UP_LIST] -c [VM_CONFIG_DIR] -l [LOG_FILE] -d [DEBUG_LEVEL] -g [GLOBAL_CONF] -e [VM_EXCLUSION_LIST]
İlgili parametrelerin anlamları ise şöyledir:
OPTIONS: -a Host'taki tüm VM'leri yedekle. -f Yedeklenecek VM'lerin listesi (vms_to_backup dosyasi) -c Spesifik vm backup conf dosyalarının bulunduğu dizin -g Global ghettoVCB yapılandırma dosyası. -l Logların basılacağı dosya. -d Debug level [info|debug|dryrun] (default: info)
Scriptin kullanımı ile ilgili birkaç örnek vermek gerekirse:
Tüm VMlerin Yedeklenmesi
Tüm sanal sunucuların yedeklenmesi için yapılandırma işlemlerinin ardından scripti şu şekilde çalıştırabilirsiniz:
# sh ghettoVCB.sh -a
Belirli VMlerin Yedeklenmesi
Sadece belirli sanal makinaları yedeklemek için ise bu VM'lerin isimlerini vms_to_backup isimli dosyaya “alt alta” yazın:
# cat vms_to_backup vm1 vm2 vm3
Sonrasında da scripte -f parametresi ile vms_to_backup dosyasını göstererek çalıştırın::
# sh ghettoVCB.sh -f vms_to_backup
Belirli VMler Hariç Tüm VMlerin Yedeklenmesi
Bazı VM'ler dışında tüm sanal makinaları yedeklemek için ise vm_exclusion_list isimli dosya kullanılabilir.
Bu dosyaya yedeklenmeyecek VM'lerin isimlerinin giriyoruz ve scripti şu şekilde çalıştırıyoruz:
# sh ghettoVCB.sh -a -e vm_exclusion_list
Dryrun Özelliği İle Yapılandırma Kontrolü
Script içerisindeki yapılandırma işlemlerini tamamladıktan sonra ayarlarda bir problem olup olmadığını kontrol etmek üzere öncesinde scripti dryrun mod'da da çalıştırabilirsiniz. Bu özellik yedekleme işlemini simüle eder ve olası problemleri önecen tespit edebilmenize olanak sağlar:
# sh ghettoVCB.sh -f vms_to_backup -d dryrun
Debug Backup Mod
Yedekleme esnasında detaylı raporlama için -d parametresine debug değerini verebilirsiniz:
# sh ./ghettoVCB.sh -f vms_to_backup -d debug
Farklı VMleri Farklı Ayarlar ile Yedeklemek
Bazı VM'leri script içerisinde ya da global conf dosyasında tanımlananlardan farklı ayarlar ile yedeklemek istediğinizde ilgili VM'ler için ayrı birer yapılandırma dosyası kullanabilirsiniz. Bu iş için yapılması gereken yapılandırma dosyalarını barındıracak bir dizin oluşturmak ve default ayarlardan farklı olarak yedeklenmesi istenen VM'ler için bu dizin altında VM'ler ile aynı isimde olacak birer yapılandırma dosyası oluşturmaktır. Sonrasında scripti “-c conf_dizininin_yolu şeklinde çalıştırabilirsiniz. Bu şekilde özel yapılandırma dosyası olan vm'ler ilgili conf dosyalarına göre yedeklenecekken özel conf'u olmayan vm'ler default(global) ayarlara göre backuplanacaktır.
Örnek olarak “testVM” isimli bir VM olduğunu ve bu vm üzerinde 2 adet sanal disk tanımlı olduğunu, yedekleme sırasında da bu disklerden sadece birinin imajının alınmasını istediğimizi düşünelim.
İlk olarak scriptin ana dizini altında backup_config isimli bir dizin oluşturalım:
# mkdir backup_config
Sonra ghettoVCB-vm_backup_configuration_template isimli dosyayı kullanarak testVM” isimli bir dosya oluşturalım:
# cp ghettoVCB-vm_backup_configuration_template testVM
Şimdi testVM dosyasını editleyip bu VM için özel ayarlarımızı yapabiliriz. Örnekte ilk vmdk dosyasının yedeklenmesini diğerine dokunulmamasını söylemiştik, dolayısı ile bu yönde bir tanım giriyoruz:
VM_BACKUP_VOLUME=/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=3
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=4
POWER_DOWN_TIMEOUT=5
SNAPSHOT_TIMEOUT=15
ENABLE_COMPRESSION=0
VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
VMDK_FILES_TO_BACKUP="testVM.vmdk"
Daha sonra scripti şu şekilde çalıştırabiliriz:
# sh ghettoVCB.sh -f vms_to_backup -c backup_config
Böylece testVM isimli sanal makina testVM yapılandırma dosyasında belirtildiği şekilde yedeklenecek diğer sanal makinalar için ise global ayarlar yürütülecektir.
Restore İşlemleri
Restore işlemleri için ghettoVCB-restore.sh isimli script kullanılmaktadır. Scriptin söz dizimi şu şekildedir:
ghettoVCB-restore.sh -c [VM_BACKUP_UP_LIST] -l [LOG_FILE] -d [DRYRUN_DEBUG_INFO]
Parametrelerin açıklamaları ise:
-c Backup list dosyası -l Log dosyası -d Dryrun/Debug Info [1|2]
-c parametresi ile kullanılan backup list dosyası script ana dizininde bulunan vms_to_restore isimli dosyadır. Bu dosya içerisinde restore işlemi için gerekli olan 3 önemli veri tutulmaktadır:
1 – Yedeğin tam yolunu,
2 – Yedeğin nereye restore edileceği,
3 – Dönülecek yedeğin disk formatı.
Dosyanın içeriği şu şekildedir:
~]# cat vms_to_restore #"<DIRECTORY or .TGZ>;<DATASTORE_TO_RESTORE_TO>;<DISK_FORMAT_TO_RESTORE>" # DISK_FORMATS # 1 = zeroedthick # 2 = 2gbsparse # 3 = thin # 4 = eagerzeroedthick # e.g. # "/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS/VCAP/VCAP-2009-08-18--1;/vmfs/volumes/himalaya-local-SATA.RE4-GP:Storage;1" "/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS/VCAP/VCAP-2009-08-20--1;/vmfs/volumes/himalaya-local-SATA.RE4-GP:Storage;1" "/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS/sideswipe/sideswipe-2009-08-20--1;/vmfs/volumes/himalaya-local-SATA.RE4-GP:Storage;1" "/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS/stupid ass vm with spaces/stupid ass vm with spaces-2009-08-20--1;/vmfs/volumes/himalaya-local-SATA.RE4-GP:Storage;2" "/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS/vMA-resize/vMA-resize-2009-08-23--1;/vmfs/volumes/himalaya-local-SATA.RE4-GP:Storage;3"
Görüldüğü gibi 3 restore parametresi “<Backup_Dizini>;<Restore_Edilecek_Dizin>;<Disk_Formatı(thin vs.)>” şeklinde dosyaya yazılıyor.
Örnek olarak dosyanın en altında yazan satır'ın anlamı
1 – “/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS/vMA-resize/vMA-resize-2009-08-23–1” isimli backup'ı,
2 –“/vmfs/volumes/himalaya-local-SATA.RE4-GP:Storage” datastore'una,
3 – “thin” formatta restore et'dir.
Buna göre ilgili dosyaya kendi restore satır(lar)ınızıyazabilir ve aşağıdaki gibi restore işlemini gerçekleştirebilirsiniz.
# ghettoVCB-restore.sh -c vms_to_restore
Script ile ilgili tüm detaylar için http://communities.vmware.com/docs/DOC-10595 adresinden yararlanabilirsiniz.
Bu yazılar da ilginizi çekebilir:
- VMware Server – Guest Sistemlerin Komut Satırından Başlatılması
- Mysql – Backup to FTP (PHP Script)
- VMware – Guestlerin Komut Satırından Start/Stop Edilmesi
Yorumlar
Trackbacks
Yorumda bulunun.
Cok faydali ve degerli bir bilgi emeginize saglik
[Cevapla]
Tam esxi 5 için backup çözümü ararken denk geldi, çok da iyi denk geldi, deneyip geri bildirimde de bulunurum en kısa zamanda. Elinize sağlık hocam, teşekkürler
[Cevapla]
Merhaba, Script için teşekkürler.
Sadece bu scripti otomatik olarak nasıl çalıştıracağız
Her defasında konsola bağlanmak zorundamıyız
Teşekkürler.
[Cevapla]
Selamlar,
ESX/ESXi hostunuza cron job olarak ekleyebilirsiniz.
Nasıl yapacağınıza dair bilgiye, esx/esxi sürümünüze göre google’da aratarak erişebilirsiniz.
[Cevapla]