python文件实时同步_python文件自动同步备份v1.2【运维必备】2020/12/31
本帖最后由 We. 于 2021-1-4 08:18 编辑
v1版本打包在这里了,感兴趣的自己下来看:
同步备份v1.rar
(1.6 KB, 下载次数: 8)
2020-12-30 16:12 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB
声明:
感谢@的提醒,本方案只适用于局域网内同步备份,没有做加密/认证,没有过防火墙。
以下是v1.2内容:
新增加了多进程下载
修改下目录就可以直接拿去用了
--------------------------------------------------------------------------------------------------------------------------
需求:平台会把虚拟机备份的文件打包到服务器A,再同步备份到服务器B(只需要考虑A到B)。
思路:
服务器A作为服务端,定时遍历自己的文件目录,把文件目录信息打包成一个校验文件。
服务器B作为客户端,下载校验文件,遍历自己的文件目录是否和服务器相同,并下载本地没有的文件。
通过http传输,使用python开启一个简单的http服务。有防火墙需要把端口放通,没有就不管。
生产环境:python3.7.9,两台CentOS7.9服务器。
在服务端的备份目录下开启http服务:
nohup是用来后台开启http服务的,不然控制台没法干其他事情。
image.png (23.68 KB, 下载次数: 0)
2020-12-30 16:16 上传
服务端:
[Python] 纯文本查看 复制代码import os
path = '/H3C_Backup'
def func(path):
contents = os.walk(path, topdown=True)
dir = []
file = []
for (root, dirs, files) in contents:
dir.append(root)
for i in files:
file.append(root+'/'+i)
return [dir, file]
content = func(path)
with open(path+'/'+'content.txt', 'w', encoding='utf-8') as f:
for i in content[0]:
f.write(i)
f.write('\n')
with open(path+'/'+'file.txt', 'w', encoding='utf-8') as f:
for i in content[1]:
f.write(i)
f.write('\n')
客户端:
[Python] 纯文本查看 复制代码import os
import time
import shutil
import multiprocess
import requests
def init() :
url = ['http://172.172.172.1:8000/file.txt', 'http://172.172.172.1:8000/content.txt']
download_file = requests.get(url[0], stream=True)
with open('/download/file.txt', 'wb') as f :
for chunk in download_file.iter_content(chunk_size=4096) :
f.write(chunk)
download_content = requests.get(url[1], stream=True)
with open('/download/content.txt', 'wb') as f :
for chunk in download_content.iter_content(chunk_size=4096) :
f.write(chunk)
def function(path) :
# 通过os.walk()方法遍历到所有文件夹和文件
file = []
dir = []
x = os.walk(path, topdown=True)
for (root, dirs, files) in x :
dir.append(root)
for i in files :
file.append(root + '/' + i)
return [dir, file]
def check_dir(path) :
# 获取本地目录
x = function(path)
dir_so = x[0]
# 清洗服务端目录
dirs = open('/download/content.txt', 'r', encoding='utf-8')
dir_dst = dirs.readlines()
dir_dst_info = []
for i in dir_dst :
i = i.replace('\n', '')
print(i)
dir_dst_info.append(i)
# 比较目录,目录不一致就添加
for i in dir_dst_info[1 :] + dir_so :
if i not in dir_so :
os.mkdir(i)
print('创建了' + i)
if i not in dir_dst_info :
try :
shutil.rmtree(i)
print('删除了' + i)
except :
pass
def download(url, path) :
download_file = requests.get(url, stream=True)
with open(path, 'wb') as f :
for chunk in download_file.iter_content(chunk_size=10240) :
f.write(chunk)
print('添加了' + path)
def check_file(path) :
x = function(path)
file_so = x[1]
pool = multiprocessing.Pool(processes=10)
# 清洗服务端文件
files = open('/download/file.txt', 'r', encoding='utf-8')
files_dst = files.readlines()
files_dst_info = []
for i in files_dst :
i = i.replace('\n', '')
files_dst_info.append(i)
# 没有的下载,多余的删掉
for i in file_so + files_dst_info :
if i not in file_so :
url = 'http://172.172.172.1:8000' + i
pool.apply_async(download, (url, i,))
if i not in files_dst_info :
os.remove(i)
print('删除了' + i)
pool.close()
pool.join()
if __name__ == '__main__' :
path = '/H3C_Backup'
init()
check_dir(path)
check_file(path)
10个进程起飞,一共12T数据慢慢跑。
image.png (116.95 KB, 下载次数: 0)
2020-12-30 18:02 上传
12个进程一起跑这cpu占用率有点高啊。
image.png (47.66 KB, 下载次数: 0)
2020-12-30 18:32 上传
速度也不算慢,一小会儿80个G了。
image.png (78.08 KB, 下载次数: 0)
2020-12-30 18:34 上传
今早起来一看,传了10个T了,还在运行,等他慢慢弄完把。
image.png (29.79 KB, 下载次数: 0)
2020-12-31 08:55 上传
待优化:
1、写法待优化
2、触发方式待优化
3、用socket的tcp会不会比http更快?
另外,为什么多线程这么拉跨比单线程还慢?总感觉多进程有点浪费cpu资源。迅雷的下载方式又是如何实现的?
欢迎指教。
python文件实时同步_python文件自动同步备份v1.2【运维必备】2020/12/31相关推荐
- 【同步】文件同步命令rsync |自动同步软件FreeFileSync
目录 linux文件同步 即看即用 详细说明 FreeFileSync 同步文件 1.设置同步源和目标 2.手动同步 3.自动同步 设置同步方向 批处理 其他类似软件 linux文件同步 即看即用 本 ...
- 零基础入门运维必备 | 一文总结学习 Python 的 14 张思维导图
本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章). 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典 ...
- python文件整理程序_Python实现自动整理文件的脚本
前言 工作上的文档和资料好几个月没整理了,因为平常太忙都是随手往桌面丢.整个桌面杂乱无章全是文档和资料.几乎快占满整个屏幕了,所有我必须要整理一下了.但是手动整理太费时间了,于是我想到了python. ...
- python删除文件某行_python 文件操作删除某行的实例
python 文件操作删除某行的实例 使用continue跳过本次写循环就可以了 #文本内容 Yesterday when I was young 昨日当我年少轻狂 The tasting of li ...
- python文本处理实例_Python 文件处理的简单示例
这篇文章主要为大家详细介绍了Python 文件处理的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 相关的AP ...
- python创建文件夹命令_python文件操作指令
原文地址:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html 常用的文件操作指令: python中对文件.文件夹(文件操 ...
- python操作文件和目录_python文件和目录操作方法
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...
- python 文档操作_Python 文件操作
一. Python 读写 创建文件 Python中对文件,文件夹(文件操作函数)的操作需要涉及到OS 模块和 shutil 模块 . 一) . OS模块 的基本操作 方法 功能 os.getcwd() ...
- python生成word目录_Python 文件与目录操作方法总结
Python 有很多内置的模块和函数可用于文件的操作处理,这些函数都分布在几个模块上:如 os,os.path,shutil 和pathlib 等等.本文收集了许多您需要知道的函数,以便在 Pytho ...
最新文章
- 【数据显示:比特币单日交易费用是BCH和BSV一年交易费用的4倍】
- bios x86保护模式下的软盘操作floppy
- Linux操作系统下如何编译安装源码包软件
- 【数理知识】《积分变换与场论》王振老师-第2章-拉普拉斯变换
- SqueezeNet
- django ORM创建数据库方法
- js-jquery-插件开发(一)
- (转)linux自动备份oracle数据库并上传到备份服务器 脚本实现
- 第二十一章:变换(十四)
- 基于php的高校田径运动会管理系统
- 晶振 Crystal
- opengl交叉编译
- Java项目经验面试总结
- 计算机制图大赛,制图大赛简介
- IDEA断点变成了白色
- 数组统计问题(统计各学生的优秀率及格率)C语言
- api有哪些 javasocket_java socket API
- icloud是什么?
- eNSP第二篇:Eth-trunk,链路聚合,常用命令,二层链路聚合和三层链路聚合
- Java核心技术 卷1-总结-11
热门文章
- 高性能、高并发、高扩展性和可读性的网络服务器架构:StateThreads
- FFMPEG使用参数详解
- 定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
- Vue006_事件处理
- 游戏数仓分析(二)SpringBoot项目对数据进行可视化展示
- spark on yarn的未解之谜
- java小编程-----读取文本文件csb.txt,统计字符个数,并把结果保存到result.txt
- 【Docker】Docker 删除所有容器和镜像
- 【Python】简单的apscheduler定时任务
- 区块链系列教程之:比特币的世界