티스토리 뷰
반응형
XCP-ng 는 회사에서도 무료로 사용할 수 있는 하이퍼바이저 입니다.
템플릿을 활용한 OS 설치 및 배포, 라이브 마이그레이션도 지원하는 무료이지만 많은 기능을 제공하고 있어서 오랬동안 유용하게 사용하고 있습니다.
이번 글은 Python을 이용하여 가상화 장비 VM을 백업하는 스크립트 입니다.
XCP-NG 8.2 를 사용하고 있으며, Python 2.x 버전을 기준으로 작성하였습니다.
반응형
# -*- coding: utf-8 -*-
import socket
import os
from datetime import datetime
import re
import subprocess
def run(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if out:
## 성공
t = 1
result = out.decode('utf-8')
else:
## 실패
t = 2
result = err.decode('utf-8')
return (t, result)
def write_log(path, logmsg):
log_path = path + "log/"
if not os.path.isdir(log_path):
os.mkdir(log_path)
logfile = Date + "_backup.log"
f = open(log_path + logfile, "w")
f.write(logmsg)
f.close()
def now_date():
from datetime import datetime
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
hostname = socket.gethostname()
Date = datetime.now().strftime("%Y-%m-%d")
mountpath = "/mnt/backup/" ## 마운트할 xen서버 머신 디랙토리
nfs_path = "nfs_ip:/xenbackup" ## NFS 스토리지 저장소 위치
cmd = "mount -t nfs " + nfs_path + " " + mountpath
run(cmd)
path = "/mnt/backup/" + hostname + "/"
if not os.path.isdir(path):
os.mkdir(path)
##hostuuid 값 추출
cmd = '''xe host-list name-lb_name=''' + hostname + ''' | grep uuid | cut -d":" -f2 | xargs'''
value = run(cmd)
if value[0] == 1:
hostuuid = re.sub("\n", "", value[1])
else:
logmsg = hostname + "XEN HOSTUUID가 없습니다."
write_log(path, logmsg)
backupmsg = []
##vmlist uuid 추출 : VM 서버 중에 xenbackup tag가 있는 리스트 추출
cmd = '''xe vm-list is-control-domain=false is-a-snapshot=false resident-on=''' + hostuuid + ''' tags:contains="xenbackup" | grep uuid | cut -d":" -f2'''
value = run(cmd)
value = re.sub(" ", "", value[1])
vmuuids = value.split("\n")
for row in vmuuids:
cmd = "xe vm-list uuid=" + row + " | grep name-lb_name | cut -d':' -f2 | sed 's/^ *//g'"
value = run(cmd)
if value[0] == 1:
vmname = re.sub("\n", "", value[1])
else:
continue
## 스냅샷 생성
cmd = "xe vm-snapshot uuid=" + row + " new-name-lb_name='SNAPSHOT_" + vmname + "_" + Date + "'"
value = run(cmd)
if value[0] == 1:
SNAPUUID = re.sub("\n", "", value[1])
else:
logmsg = re.sub(" \n", "", value[1])
backupmsg.append(now_date() + " 백업 실패\n 사유 : 스냅샷 생성 실패\n Error : " + str(logmsg) + "\n\n")
continue
## Set flags on the snapshot
cmd = "xe template-param-set is-a-template=false ha-always-run=false uuid=" + SNAPUUID
run(cmd)
##기존 백업파일 이름 변경
filename = path + vmname + ".xva"
bakfile = path + vmname + "_old.xva"
if os.path.isfile(filename):
os.rename(filename, bakfile)
## 스냅샷에서 백업 파일 생성
cmd = "xe vm-export vm=" + SNAPUUID + " filename='" + filename + "'"
value = run(cmd)
if value[0] == 1:
result = re.sub("\n", "", value[1])
backupmsg.append(now_date() + " 백업 완료\n\n")
else:
vm_e_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
logmsg = re.sub(" \n", "", value[1])
## 스냅샷 파일 삭제
run("xe snapshot-uninstall snapshot-uuid=" + SNAPUUID + " force=true")
os.rename(bakfile, filename)
continue
## 스냅샷 파일 삭제
run("xe snapshot-uninstall snapshot-uuid=" + SNAPUUID + " force=true")
if os.path.isfile(bakfile):
os.remove(bakfile)
backupresult = ' '.join(backupmsg)
write_log(path, backupresult) ## 백업 결과 로그 저장
cmd = "umount " + mountpath ## NFS 스토리지 마운트 해제
run(cmd)
반응형
xenbackup 태그를 가진 vm을 백업하며, 스냅샷을 생성 후 스냅샷일 이용해 백업을 하는 방식입니다.
별도의 NFS 스토리지에 마운트후 백업을 하며, 적절한 NFS 경로 수정후 사용하시면 됩니다.
반응형
반응형
'Xenserver' 카테고리의 다른 글
Xen Server Bootoption 설정. (0) | 2016.08.29 |
---|---|
Adding Ubuntu 16.04 LTS Template in XenServer 6.2 (0) | 2016.08.29 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- maximum shards open error
- ELASTIC
- nms
- Logstash
- 코딩
- Network
- switch
- ldap
- NTOP
- ccnp
- GUI
- Elasticsearch
- Security
- 파이선
- ccie
- ccna
- routing
- EVE
- CISCO
- pyqt
- Fortigate
- EVE-ng
- 개발
- Python
- CentOS
- Kibana
- Ntopng
- Elk
- Linux
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함