无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 9756|回复: 66

[分享] 利用BitTorrent-P2P进行内网下批量同传部署系统【07-07晚更新】

    [复制链接]
发表于 2020-7-6 20:28:40 | 显示全部楼层 |阅读模式
本帖最后由 xxkknn 于 2021-1-18 21:26 编辑

【2020-07-07更新】加入几个针对Windows自动化部署的脚本参考,以及正文加入一个比喻方便理解
【2020-07-07晚再更新】发现部分脚本代码不齐,现在补上了
【2021-01-18更新】补全了被吞的符号+疏漏的内容,修改了一些谬误
我最初对这种技术毫无兴趣,直到某次出差去到某场地部署50台服务器,全百兆内网环境,传统PXE完全玩不转,光是装系统和软件就折腾了整个白天,完事人像一滩淤泥一样,非常人性化;
回来以后痛腚思痛,四处寻求解决办法,最终在本论坛大佬@江南一根葱 的启发下,找到了适合自己的解决方案:即——
利用BitTorrent协议进行P2P同传,借此达到去中心化,消除系统部署时对PXE服务器带宽性能的高度依赖,怎么做到的呢?
首先BT协议需要[文件发布者]根据[要发布的文件]生成一个[种子],下载时客户端根据种子里提供的信息向tracker服务器发送请求,tracker服务器会管理并且分发各个客户端的下载信息,让客户端之间可以相互了解各自的下载详情,并且互相分享各自下载好的部分,充分利用局域网中每一个客户端的带宽;初次分发某个文件时需要服务端做种,等BT服务端的分享率达到1.0+之后,服务端就可以停止做种让其它客户端之间自行传输,这样腾出带宽可以给PXE服务使用;
需要注意一点,P2P传输几乎能跑满所有参与的端口带宽,网络设备可靠性不佳的话慎用
打个比方:将批量下载的行为比作老师分发试卷,传统的Server to client下载就像是老师一个人挨个往下发或者集体上来领,不管需求有多大,一个人一双手能承担的量终究有限,就像服务器的宽带一样;
而P2P式的传输就像老师把试卷全部交给学生,由学生自行扩散传递,充分利用每一双手的同时,老师也可以腾出时间去做其它工作;而且与试卷不同的是,只要不停止做种,数据就可以不断重复地向不同的客户端分享,传输效率极高;
否则的话,以单服务器百兆网12.5MB/S的速率,7G左右的系统+软件包每个客户端就需要传输10分钟左右,仅仅50台机器就要耗费近9个小时,这样的效率实在是太低了;而且即便是千兆环境下,机器多的时候也很容易陷入服务器网络带宽的瓶颈;借用此方案能很大程度改善这个问题,而且实施起来也不难;
接下来进入正篇
需要的工具
以上两者可以用其它同类工具代替,剩下的工具请自行查找;建议搭配HFS使用。
运作过程:客户端PXE网启至PE之后运行批处理,在批处理中利用diskpart分区之后调用Aria2c.exe下载镜像,下载完成之后调用CGI或者imagex、ghost应用镜像
搭建过程:制作torrent种子文件,搭建并启用tracker服务,做种,在PE中放入aria2c、bat脚本并将脚本加入自启动;其实说起来复杂做起来简单,看下面几张截图就明白了
打开选项
0.jpg
1.jpg
2.jpg
3.jpg
4.jpg
注意:图片中有错误,不要勾选“超级做种”,改用其它同类软件时也不要启用相似选项,此选项是为了延长客户端在线时间保持健康度的,勾选此项后会降低客户端下载速度

调用Aria2的bat代码参考
C:\aria2\aria2c.exe C:\种子.torrent--seed-ratio=0 --force-save=true --dir=C:\
主程序 种子路径 参数
Aria2C常用参数:
  • --seed-time 做种的持续时间(分钟),为0即不做种,下载完成即执行下一行
  • --seed-ratio 分享率,为1则上传量达到100%后停止做种,0则一直做种,在批处理中做种会阻塞执行,在完成之前不会执行下一行代码
  • --force-save 保存会话,即便在下载完成后也不删除会话文件,再次启动任务时就不会重新下载而直接进入做种阶段
  • --dir 指定保存目录
其它参数可以参考之前提供的官方网站

自行编写批处理时,推荐调用带会话的下载,在下载完成后,再以非阻塞方式调用一次带会话的下载,此时由于会话中保存了已下载完成的信息,本次调用会直接进行上传做种,这样可保证其它客户端的下载速度的同时不阻塞脚本后续的操作;具体可参考7-7更新的批处理PEdownload.bat

关于diskpart部分因为涉及到磁盘操作,有较大误删数据风险,使用前请自行参考微软官方文档,地址https://docs.microsoft.com/zh-cn ... cripts-and-examples

补充一点点,现在唯一的缺憾就是PXE阶段不能P2P了,如果连带这块也实现了的话 才算圆满解决差网络环境下的批量部署问题,如果有人知道怎样实现或者有方向的话,希望可以帮忙分享一下或者指个路,感激不尽

【7-7更新部分批处理参考】
PE中调用
  1. @echo off
  2. mode con cols=45 lines=10
  3. cls&&echo 正在查找默认DHCP服务器...
  4. ping 127.0 -n 6 >nul
  5. :re
  6. ping 127.0 -n 3 >nul
  7. for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|findstr /ic:"DHCP 服务器"') do set ipgate=%%a
  8. if not defined ipgate goto:re
  9. set "ipgate=%ipgate: =%"
  10. echo 默认DHCP服务器:[%ipgate%]
  11. ::download
  12. X:\aria2\aria2c.exe "http://%ipgate%/Files/PEdownload.bat" --dir=X:\
  13. call X:\PEdownload.bat
  14. exit
复制代码
PEdownload.bat
  1. ::下载并应用分区脚本
  2. X:\aria2\aria2c.exe "http://%ipgate%/Files/diskpartMbr.txt" --dir=X:\
  3. diskpart /s X:\diskpartMbr.txt >NUL 2>NUL
  4. :re
  5. ping 127.0.1 -n 3 >nul
  6. if not exist "C:" (goto:re)
  7. md C:\Aria2\ && md C:\Windows\
  8. copy X:\Aria2\aria2c.exe C:\Aria2\
  9. ::下载种子
  10. C:\aria2\aria2c.exe "http://%ipgate%/Files/PEFiles.torrent" --dir=C:\ --follow-torrent=false
  11. ::下载安装系统配置文件
  12. C:\aria2\aria2c.exe "http://%ipgate%/Files/ISOinstall.ini" --dir=X:\CGI\
  13. ::下载完成执行下一行
  14. C:\aria2\aria2c.exe C:\PEFiles.torrent --seed-time=0 --force-save=true --dir=C:\
  15. ::有选择地下载种子内的文件
  16. ::C:\aria2\aria2c.exe --select-file=1,2-7 C:\PEFiles.torrent --seed-time=0 --force-save=true --dir=C:\
  17. ::开始持续做种
  18. start /min "Seedling" "C:\aria2\aria2c.exe" C:\PEFiles.torrent --seed-ratio=0 --force-save=true --dir=C:\
  19. echo start /min "Seedling" "C:\aria2\aria2c.exe" C:\PEFiles.torrent --seed-ratio=0 --force-save=true --dir=C:\ > C:\Seedling.bat
  20. ::安装系统
  21. X:\CGI\CGI-PLUS.exe X:\CGI\ISOinstall.ini
  22. ::全部安装完成,检测到断网则自动重启以进入Windows,即可以通过拔掉网线&停用网络设备批量控制机器重启
  23. :start
  24. color 27
  25. echo 正在监测网络状态...
  26. ping -n 4 %ipgate% | findstr /i "TTL" >NUL 2>NUL && goto start
  27. color 47
  28. echo 网络中断
  29. ping -n 4 %ipgate% | findstr /i "TTL" >NUL 2>NUL && goto start
  30. echo 网络持续中断,准备重启
  31. ping -n 3 %ipgate% | findstr /i "TTL" >NUL 2>NUL && goto start
  32. shutdown -r -t 5
  33. PECMD shut -r
  34. echo 5秒内重启! 取消请按任意键!
  35. pause>nul
  36. shutdown /a
  37. exit
复制代码
diskpartMBR.txt(慎用!会清空磁盘,数据丢失概不负责
  1. select disk 0
  2. clean
  3. convert mbr
  4. create partition primary
  5. format quick fs=ntfs label="Windows"
  6. assign letter="C"
  7. active
  8. timeout /t 1
  9. exit
复制代码
ISOinstall.ini(CGI无人值守配置文件,详细用法参考5大原压缩包内的PDF文档)
  1. [operation]
  2. action = restore
  3. silent = 1
  4. [source]
  5. C:\Files\10ltsb2016x64lite.iso|\sources\INSTALL.WIM|1
  6. [destination]
  7. DriveLetter=system
  8. [miscellaneous]
  9. format = 0
  10. fixboot=auto
  11. shutdown=0
复制代码

以上批处理请根据所在环境情况自行改动;另外脚本需要findstr,部分PE可能已精简掉,故在附件中额外提供findstr.exe,放入System32即可

findstr.exe

31 KB, 下载次数: 30, 下载积分: 无忧币 -2

评分

参与人数 6无忧币 +26 收起 理由
longsifeng + 5 很给力!
austere + 5 很给力!
zhczf + 5 很给力!
phe889 + 1 很给力!
freesoft00 + 5
wjguowei + 5 这是我在无忧看到的第一篇有关p2p网刻的帖.

查看全部评分

发表于 2020-7-6 20:53:27 | 显示全部楼层
之前一直用utorrent分发大文件,也是支持命令行的。
Aria2  看起来也不错,下次用用。

点评

主要是utorrent不知道什么时候能把映像下载完,然后自动启动CGI.EXE CGI.INI完成映像恢复  详情 回复 发表于 2021-5-25 13:58
现在不是有微力 试过了可以弄  详情 回复 发表于 2020-7-7 08:46
回复

使用道具 举报

发表于 2020-7-6 20:54:54 | 显示全部楼层
对于同一个子网的话,不用tracker服务器也可以。

点评

理论上是可以,但我这边第一次测试没有成功,可能是路由那边做了什么限制,这玩意是我上司设置的,他是带证的专业网管,这方面我是完全不懂  详情 回复 发表于 2020-7-6 22:57
回复

使用道具 举报

发表于 2020-7-6 20:57:24 | 显示全部楼层
楼主强!
本人只用过傲梅轻松备份的网刻系统。
回复

使用道具 举报

发表于 2020-7-6 21:56:43 | 显示全部楼层
感谢楼主热心分享!
回复

使用道具 举报

 楼主| 发表于 2020-7-6 22:57:43 | 显示全部楼层
bfgxp 发表于 2020-7-6 20:54
对于同一个子网的话,不用tracker服务器也可以。

理论上是可以,但我这边第一次测试没有成功,可能是路由那边做了什么限制,这玩意是我上司设置的,他是带证的专业网管,这方面我是完全不懂
回复

使用道具 举报

 楼主| 发表于 2020-7-6 23:29:23 | 显示全部楼层
本帖最后由 xxkknn 于 2020-7-7 15:58 编辑

Aria2真的是一个很棒的下载工具,但有个坑需要注意一下,配置文件里面的东西尽量只留自己需要的,不然很容易引发奇奇怪怪的问题;
最好最好是像示例那样摒弃配置文件直接用参数,简单又稳妥
回复

使用道具 举报

发表于 2020-7-7 00:10:24 | 显示全部楼层
感谢楼主热心分享!
回复

使用道具 举报

发表于 2020-7-7 06:28:05 | 显示全部楼层
好高深的样子,小菜鸟看得一头雾水啊

点评

你的注册时间可真早 我这就是自己搭建了个内网的BT服务器,让客户端之间进行P2P下载,不像传统PXE部署被服务器的网络带宽限制,P2P传输网络中的所有客户端都会提供上传,大家都是使用者的同时也是服务提供者,每个  详情 回复 发表于 2020-7-7 16:08
回复

使用道具 举报

发表于 2020-7-7 08:46:29 | 显示全部楼层
bfgxp 发表于 2020-7-6 20:53
之前一直用utorrent分发大文件,也是支持命令行的。
Aria2  看起来也不错,下次用用。

现在不是有微力  试过了可以弄

点评

微力有没有修正添加目录的bug  详情 回复 发表于 2020-7-7 12:35
上教程 上成品呀  详情 回复 发表于 2020-7-7 09:44

评分

参与人数 1无忧币 +5 收起 理由
xxkknn + 5 给大佬递茶

查看全部评分

回复

使用道具 举报

发表于 2020-7-7 09:44:55 | 显示全部楼层
江南一根葱 发表于 2020-7-7 08:46
现在不是有微力  试过了可以弄

上教程 上成品呀  
回复

使用道具 举报

发表于 2020-7-7 10:58:45 | 显示全部楼层
好,我要借鉴一下
回复

使用道具 举报

发表于 2020-7-7 12:35:51 | 显示全部楼层
江南一根葱 发表于 2020-7-7 08:46
现在不是有微力  试过了可以弄

微力有没有修正添加目录的bug

点评

微力新版修正添加目录的bug了  详情 回复 发表于 2020-7-20 13:23
我是直接搞了个批处理p2p.bat 发送命令C:\bat\p2p.bat 盘符 相对路径 密钥 其实我这样延时也不行,还是要抓日志判断有没有侦听完毕,不过也无所谓,发送两次就行了  详情 回复 发表于 2020-7-7 15:27
目前还没有,不过我机房试了下传输方式可行,大文件百兆下最合适的是一传二,二传四,四传八, 小文件可以一起随机传  详情 回复 发表于 2020-7-7 15:22
回复

使用道具 举报

发表于 2020-7-7 12:54:27 | 显示全部楼层
50台也不是很多了,买5个高速U盘。也就10次,100M网络速度跟本地没得比啊。

点评

确实不多,但我这里要考虑几个问题;一是只有我一个人操作;二是老平台服务器没有USB3;三是网启搭配批处理可以免去几乎所有的手动操作,不然太繁琐心累;四是P2P传输下每台机器都有接近满带宽的10M+的速度,机器多  详情 回复 发表于 2020-7-7 15:50
回复

使用道具 举报

发表于 2020-7-7 15:22:31 | 显示全部楼层
bfgxp 发表于 2020-7-7 12:35
微力有没有修正添加目录的bug

目前还没有,不过我机房试了下传输方式可行,大文件百兆下最合适的是一传二,二传四,四传八,
小文件可以一起随机传
回复

使用道具 举报

发表于 2020-7-7 15:27:31 | 显示全部楼层
bfgxp 发表于 2020-7-7 12:35
微力有没有修正添加目录的bug

我是直接搞了个批处理p2p.bat

  1. [url=home.php?mod=space&uid=336905]@echo[/url] off
  2. set verysync=%~dp0
  3. set drv=%1
  4. set path=%2
  5. set key=%3
  6. IF NOT EXIST %drv%\%path% md %drv%\%path%
  7. if exist X:\windows\system32\pecmd.exe X:\windows\system32\pecmd.exe -kill verysync.exe
  8. echo 微力路径为%verysync%verysy.exe
  9. echo 要添加的微力盘符是%drv%  相对路径是%path% key是%key%
  10. echo 跳转到下载目录
  11. cd /d %drv%
  12. echo 执行微力添加密钥

  13. start "" /min "%verysync%verysync.exe" -home %verysync%2020p2p -gui-address :8886 -no-browser
  14. X:\windows\system32\ping.exe 127.0 -n 10>nul
  15. echo 准备添加密钥…………
  16. "%verysync%verysync.exe" -home %verysync%2020p2p -gui-address :8886  -folder-cmd "add /%path%:%key%"
  17. exit
复制代码


发送命令C:\bat\p2p.bat 盘符 相对路径 密钥

其实我这样延时也不行,还是要抓日志判断有没有侦听完毕,不过也无所谓,发送两次就行了

点评

你之前放弃BT方案纯粹就是因为麻烦吗?我感觉微力的方案也不简单多少  详情 回复 发表于 2020-7-7 15:54
回复

使用道具 举报

 楼主| 发表于 2020-7-7 15:50:34 | 显示全部楼层
edit009 发表于 2020-7-7 12:54
50台也不是很多了,买5个高速U盘。也就10次,100M网络速度跟本地没得比啊。

确实不多,但我这里要考虑几个问题;一是只有我一个人操作;二是老平台服务器没有USB3;三是网启搭配批处理可以免去几乎所有的手动操作,不然太繁琐心累;四是P2P传输下每台机器都有接近满带宽的10M+的速度,机器多起来的话优势就很大了,我得为后面100+的工作量打算
回复

使用道具 举报

 楼主| 发表于 2020-7-7 15:54:45 | 显示全部楼层
江南一根葱 发表于 2020-7-7 15:27
我是直接搞了个批处理p2p.bat

你之前放弃BT方案纯粹就是因为麻烦吗?我感觉微力的方案也不简单多少

点评

是的,不够灵活 ,做种有点麻烦  详情 回复 发表于 2020-7-7 17:31
回复

使用道具 举报

发表于 2020-7-7 16:04:29 | 显示全部楼层
谢谢分享
回复

使用道具 举报

 楼主| 发表于 2020-7-7 16:08:00 | 显示全部楼层
77888 发表于 2020-7-7 06:28
好高深的样子,小菜鸟看得一头雾水啊

你的注册时间可真早
我这就是自己搭建了个内网的BT服务器,让客户端之间进行P2P下载,不像传统PXE部署被服务器的网络带宽限制,P2P传输网络中的所有客户端都会提供上传,大家都是使用者的同时也是服务提供者,每个客户端的上行都不会被闲置浪费
回复

使用道具 举报

发表于 2020-7-7 16:17:24 | 显示全部楼层
可以肯定,我是搞不了的,也只能 顶一下楼主的好贴 得了。
回复

使用道具 举报

发表于 2020-7-7 17:31:29 | 显示全部楼层
xxkknn 发表于 2020-7-7 15:54
你之前放弃BT方案纯粹就是因为麻烦吗?我感觉微力的方案也不简单多少

是的,不够灵活 ,做种有点麻烦
回复

使用道具 举报

发表于 2020-7-7 20:32:01 | 显示全部楼层
感谢楼主放出的脚本,学习了。
回复

使用道具 举报

发表于 2020-7-8 00:23:37 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2020-7-8 00:29:33 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2020-7-20 13:23:42 | 显示全部楼层
bfgxp 发表于 2020-7-7 12:35
微力有没有修正添加目录的bug

微力新版修正添加目录的bug了

点评

这真是个好消息  详情 回复 发表于 2020-7-20 16:40
回复

使用道具 举报

发表于 2020-7-20 16:40:38 | 显示全部楼层
江南一根葱 发表于 2020-7-20 13:23
微力新版修正添加目录的bug了

这真是个好消息
回复

使用道具 举报

发表于 2020-7-30 11:22:43 | 显示全部楼层
一个qbittorrent不就搞定了,高级设置打开内置的tracker,做种子,tracker地址http://ip:9000/announce就行了

具体文档https://github.com/qbittorrent/q ... orrent-as-a-tracker

点评

我发现用qbittorrent做出的种子在迅雷下载不了,高级设置打开了内置的tracker,tracker地址也填了http://ip:9000/announce。utorrent做出的种子迅雷就可以下载  详情 回复 发表于 2021-5-25 14:15
感谢你的好意,但请仔细看帖  详情 回复 发表于 2020-7-30 11:39
回复

使用道具 举报

 楼主| 发表于 2020-7-30 11:39:40 | 显示全部楼层
q2811121939 发表于 2020-7-30 11:22
一个qbittorrent不就搞定了,高级设置打开内置的tracker,做种子,tracker地址http://ip:9000/announce就行 ...

感谢你的好意,但请仔细看帖
回复

使用道具 举报

发表于 2020-8-12 20:08:20 | 显示全部楼层
信佑p2p网克不就是这样的工具吗,还不用做镜像包。当然信佑的版本有点老了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 02:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表