EXSi Shell 기반 스냅 샷 자동화 생 성 및 삭제

3517 단어
1, 창설
스 크 립 트 파일 은 가상 컴퓨터 의 저장 디 렉 터 리 인/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 : vmxxxxxx snapshot create success… 2019-03-02 01:01:04 : vmxxxx snapshot create success… 2019-03-02 01:01:36 : vmxxxxx 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 : vmxxxx snapshot create success… 2019-03-02 01:03:42 : vmxxxxxx snapshot create success… 2019-03-02 01:04:14 : vmxxxx snapshot create success…
    #!/bin/sh
    #auto create ESXi snapshots
    for i in `vim-cmd vmsvc/getallvms |  grep -v nosnap | awk '{print $1}' | grep -e "[0-9]"`
    do
    	vname=$(vim-cmd vmsvc/get.summary $i | grep name | awk '{ print $3 }' | 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
    	fi
    done
    
    

    2, 삭제
  • ESXi 호스트 의 모든 VM ID 가 져 오기;
  • VM ID 에 따라 해당 VM 의 스냅 샷 수 를 가 져 옵 니 다.
  • 스냅 샷 을 삭제 하거나 삭제 해 야 하 는 지 여부;

  • 변수의 수학 적 계산 은 셸 버 전에 따라 쓰기 가 다 를 수 있 습 니 다. 이 곳 DELETE_COUNT= $(($SNAPSHOT_COUNT-$DAY)) 을 먼저 테스트 하고 괄호 [] 의 쓰기 방법 을 사용 하면 계산 할 수 없습니다.
  • VM ID 와 스냅 샷 ID 에 따라 삭제 명령 을 집행 한다.이 곳 은 최근 의 스냅 샷 만 유지 하고 있 습 니 다. 실제 사용 하 는 느낌 에 따라 스냅 샷 의 수량 이 너무 많 으 면 가상 컴퓨터 의 디스크 성능 에 어느 정도 영향 을 줄 수 있 습 니 다. 특히 데이터 베이스/파일 서비스 등 디스크 IO 에 대한 요구 가 높 은 장면 입 니 다.
  • #!/bin/sh
    DAY=1 #    
    for i in `vim-cmd vmsvc/getallvms | awk '{print $1}' | 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: '{print $2}'`
    		for n in $OLD_SNAPSHOT_ID
    		do
    			vim-cmd vmsvc/snapshot.remove $i $n > /dev/null
    			sleep 30s
    		done
        fi
    done
    

    3, crond 퀘 스 트 추가
  • 호스트 의 루트 crond 디 렉 터 리 는/var/spool/cron/crontabs/root 에 있 습 니 다.
  • 직접 편집/var/spool/cron/crontabs/root, ESXi 호스트 가 재 부팅 되면 삭 제 됩 니 다.
  • 편집/etc/rc. local. d/local. sh, 호스트 가 시 작 될 때 crond 작업 을 추가 합 니 다.
  • 이곳 의 임 무 는 매주 한 번 수행 합 니 다.

  • "5c64e4b5 - 5ae69e88 - dbb 3 - 9cdc71dab 878"은 메모리 볼 륨 이름 입 니 다.
    ##/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
    

    좋은 웹페이지 즐겨찾기