基於EXSi Shell的快照自動化建立和刪除

2021-09-11 20:53:48 字數 2944 閱讀 8695

指令碼檔案需要放在/vmfs/volumes目錄,即虛擬機器的存放目錄,

放到其他目錄exsi主機重啟後會被清除。

vim-cmd vmsvc/getallvms 此命令用來獲取esxi主機的所有vm;

對於有些不需要快照的主機,可以在網頁的vm note資訊新增過濾,例如此處過濾了note資訊包含『nosnap』的虛擬機器;

注意:在網頁新增虛擬機器的note備註資訊時,盡量不要換行或過長。

獲取其他vm的vm id, 用來執行建立快照命令;

快照命名使用日期(date 「+%f」);

獲取的vname用來輸出日誌;

輸出執行日誌,日誌格式如下:

[root@esxi01:~] cat /schedule_snap.log

2019-03-02 01:00:33 : vm****** snapshot create success…

2019-03-02 01:01:04 : vm***x snapshot create success…

2019-03-02 01:01:36 : vm***xx snapshot create success…

2019-03-02 01:02:07 : vmx snapshot create success…

2019-03-02 01:02:39 : vmxx snapshot create success…

2019-03-02 01:03:11 : vm***x snapshot create success…

2019-03-02 01:03:42 : vm****** snapshot create success…

2019-03-02 01:04:14 : vm***x snapshot create success…

#!/bin/sh

#auto create esxi snapshots

for i in `vim-cmd vmsvc/getallvms | grep -v nosnap | awk '' | grep -e "[0-9]"`

do vname=$(vim-cmd vmsvc/get.summary $i | grep name | awk '' | cut -d \" -f 2)

vim-cmd vmsvc/snapshot.create $i $(date "+%f")

sleep 30s

if [ $? -eq 0 ];then

echo "$(date "+%f %t") : $vname snapshot create success.." >> ./schedule_snap.log

else

echo "$(date "+%f %t") : $vname snapshot create failed.." >> ./schedule_snap.log

fidone

獲取esxi主機的所有vm id;

根據vm id獲取該vm的快照數量;

是否需要刪除/需要刪除多少快照;

變數的數學計算,在不同的shell版本中可能有不同的寫法,注意先測試

此處delete_count= $(($snapshot_count-$day))

而使用中括號[ ]的寫法卻無法計算

根據vm id和快照id 執行刪除命令;

此處只保留了最近的一次快照,根據實際使用的感受,快照數量過多確實會一定程度影響虛擬機器的磁碟效能,特別是對於資料庫/檔案服務這些對磁碟io要求較高的場景。

#!/bin/sh

day=1 #保留數量

for i in `vim-cmd vmsvc/getallvms | awk '' | grep -e "[0-9]"`

do snapshot_count=`vim-cmd vmsvc/snapshot.get $i | egrep -- '--\|-child|^\|-root' | wc -l`

if [ $snapshot_count -gt $day ]; then

delete_count=$(($snapshot_count-$day))

old_snapshot_id=`vim-cmd vmsvc/snapshot.get $i | grep id | head -$delete_count | awk -f: ''`

for n in $old_snapshot_id

dovim-cmd vmsvc/snapshot.remove $i $n > /dev/null

sleep 30s

done

fidone

主機的root crond目錄在/var/spool/cron/crontabs/root ;

此處的任務為每週執行一次;

「5c64e4b5-5ae69e88-dbb3-9cdc71dab878」是儲存卷名

##/etc/rc.local.d/local.sh

#!/bin/sh

/bin/echo "0 1 * * 6 sh /vmfs/volumes/5c64e4b5-5ae69e88-dbb3-9cdc71dab878/crontabs/snapshot_creat.sh" >>/var/spool/cron/crontabs/root

/bin/echo "30 1 * * 6 sh /vmfs/volumes/5c64e4b5-5ae69e88-dbb3-9cdc71dab878/crontabs/snapshot_del.sh" >>/var/spool/cron/crontabs/root

kill $(cat /var/run/crond.pid)

crond

exit 0

pve系統 快照自動備份指令碼

常用命令 qm snapshot 101 zsl options 快照 description string qm rollback 回滾 qm delsnapshot options 刪除快照 參考文件 時間格式化參考 date d 1 days ago y m d h m 一天前 vi beif...

hbase基於快照的資料遷移

hbase基於快照的資料遷移 1.對於開啟安全認證 kerberos 的集群,首先需要關掉安全認證。2.在源集群所有節點 etc hosts檔案中配置目標集群所有節點的host。1.登入ambari檢查hbase site.xml 中的hbase.snapshot.enabled 是否設定為true...

hbase基於快照的資料遷移

hbase基於快照的資料遷移 前期準備 1.對於開啟安全認證 kerberos 的集群,首先需要關掉安全認證。2.在源集群所有節點 etc hosts檔案中配置目標集群所有節點的host。源集群操作 開啟hbase快照 1.登入ambari檢查hbase site.xml中的hbase.snapsh...