美文网首页python百例
90-综合练习:备份程序

90-综合练习:备份程序

作者: 凯茜的老爸 | 来源:发表于2018-08-02 16:20 被阅读72次

1、既要可以实现完全备份,又要实现增量备份
2、完全备份时,将目录打个tar包,计算每个文件的md5值
3、增量备份时,备份有变化的文件和新增加的文件,更新md5值

import time
import os
import tarfile
import hashlib
import pickle

def check_md5(fname):
    m = hashlib.md5()
    with open(fname, 'rb') as fobj:
        while True:
            data = fobj.read(4096)
            if not data:
                break
            m.update(data)
    return m.hexdigest()

def full_backup(src_dir, dst_dir, md5file):
    fname = os.path.basename(src_dir.rstrip('/'))
    fname = '%s_full_%s.tar.gz' % (fname, time.strftime('%Y%m%d'))
    fname = os.path.join(dst_dir, fname)
    md5dict = {}

    tar = tarfile.open(fname, 'w:gz')
    tar.add(src_dir)
    tar.close()

    for path, folders, files in os.walk(src_dir):
        for each_file in files:
            key = os.path.join(path, each_file)
            md5dict[key] = check_md5(key)

    with open(md5file, 'wb') as fobj:
        pickle.dump(md5dict, fobj)


def incr_backup(src_dir, dst_dir, md5file):
    fname = os.path.basename(src_dir.rstrip('/'))
    fname = '%s_incr_%s.tar.gz' % (fname, time.strftime('%Y%m%d'))
    fname = os.path.join(dst_dir, fname)
    md5dict = {}

    with open(md5file, 'rb') as fobj:
        oldmd5 = pickle.load(fobj)

    for path, folders, files in os.walk(src_dir):
        for each_file in files:
            key = os.path.join(path, each_file)
            md5dict[key] = check_md5(key)

    with open(md5file, 'wb') as fobj:
        pickle.dump(md5dict, fobj)

    tar = tarfile.open(fname, 'w:gz')
    for key in md5dict:
        if oldmd5.get(key) != md5dict[key]:
            tar.add(key)
    tar.close()

if __name__ == '__main__':
    # mkdir /tmp/demo; cp -r /etc/security /tmp/demo
    src_dir = '/tmp/demo/security'
    dst_dir = '/var/tmp/backup'   # mkdir /var/tmp/backup
    md5file = '/var/tmp/backup/md5.data'
    if time.strftime('%a') == 'Mon':
        full_backup(src_dir, dst_dir, md5file)
    else:
        incr_backup(src_dir, dst_dir, md5file)

相关文章

  • 90-综合练习:备份程序

    1、既要可以实现完全备份,又要实现增量备份2、完全备份时,将目录打个tar包,计算每个文件的md5值3、增量备份时...

  • linux学习--week11--综合架构备份服务

    老男孩教育64期--week11--综合架构备份服务 综合架构知识概述说明备份服务企业应用备份服务常见问题全网备份...

  • 2019-08-13

    day31 综合架构备份服务章节 课程介绍 1. rsync备份服务传输数据原理2. rsync备份服务命令参数说...

  • 综合架构之备份服务-rsync

    主要记录:1. 综合架构部署流程 2. 全量备份与增量备份3. 备份服务传输原理 4. 备份服务工作方式5...

  • 2019-08-14 综合架构存储服务

    day 32 综合架构存储服务章节 课程介绍: 1. rsync备份服务常见异常问题2. rsync备份服务全网备...

  • 百人百日百炼【58】备份定律

    备份定律 程序员编程的时候,一定会有一个备份。 万一硬盘故障、代码丢失,没有备份,损失就会相当惨重。 备份,就是另...

  • 80-综合练习:记账小程序

    1、记账时手头有一万块钱2、可以记录花的钱、存的钱,以及收支明细

  • 备份定律

    备份定律 程序员编程的时候,一定会有一个备份。万一硬盘故障、代码丢失,没有备份,损失就会相当惨重。 备份,就是另一...

  • 2019-08-12

    day 30 综合架构开场章节 课程介绍 1. 备份服务概念介绍2. rsync备份服务软件使用方法3. rsyn...

  • 综合练习

    1.列出薪金高于部门30工作的所有员工的薪金的员工姓名和薪金、部门名称、部门人数。确定要使用的数据表:emp:姓名...

网友评论

    本文标题:90-综合练习:备份程序

    本文链接:https://www.haomeiwen.com/subject/bnksvftx.html