Ana Sayfa » Genel » ghettoVCB.sh – VMware ESX(i) [3.5,4.x,5.x] Backup Scripti

ghettoVCB.sh – VMware ESX(i) [3.5,4.x,5.x] Backup Scripti


BerbatKötüİdare EderGüzelHarika (Henüz Puan Verilmedi. Oy kullanarak siz de katkı yapabilirsiniz.)
Loading...

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYGZ4kev' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349

(i) sistemler üzerinde çalışan sanal sunucuların online olarak yedeklenmesini sağlayan ghettoVCB  isimli güzel bir shell scripti var. Bu , 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 /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 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ı.
  • 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;  'i içeren paketi download edip hostunuzda açmaktan ibaret:

1 -) '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 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.

Visited 943 times, 2 visit(s) today
Kategoriler: Genel |

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


  1. Serkan | (Haziran 9th, 2012 9:32 am)

    Cok faydali ve degerli bir bilgi emeginize saglik

    [Cevapla]

  2. Cem Ibrahim | (Haziran 22nd, 2012 2:31 pm)

    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]

  3. Serkan | (Kasım 29th, 2012 8:50 pm)

    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]

    Cagri Ersen tarafından yanıtlandı.

    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]

Trackbacks

Yorumda bulunun.