年底一个开发跑路了,他负责的几个内部管理用的小系统还有几个 python 爬虫是部署在虚拟机 Debian 8 系统里面跑的,小哥也没用 git 什么版本管理,每次都是整个虚拟机文件复制出来,重命名作为备份,然后继续写,总共有十几个这样的虚拟机吧。。。
现在想把这些个虚拟机都合并到一个最终版本的虚拟机里面,逐步实现 git 进行版本控制,不知道有什么骚操作能够实现。
尝试过以下操作:
1,简单粗暴用文件大小 + Beyond Compare 的二进制比较干掉了 3 个一毛一样的备份,估计是小哥准备开多个新分支没来得及用的。
2,使用 dpkg --get-selections|sort > installed-packages,通过比较安装过的 packages 的情况,将这些个虚拟机分为更新过的和没更新过的两大组。
主要是按照这里的介绍进行操作的:
https://www.unixtutorial.org/2014/09/how-to-use-dpkg-to-compare-two-linux-servers/
剩下的感觉就只能硬肛了。。。
如果硬肛,感觉还有以下注意的地方: 1,跳过特定的文件夹,比如 proc 什么的 2,针对 php 写的管理系统想过只比较 /var/www/下面的文件,但老板不同意,而且特别强调让给个最终完整的对比报告。
说多了都是泪,求各位给指点指点,先谢谢了。
1
LoliconInside 2018-01-04 00:00:15 +08:00 via Android 1
找个机器把虚拟机磁盘全部用 loop 设备挂载出来,然后就当作几个目录来比较就好。
|
2
gaayyy OP @LoliconInside 谢谢,能不能进虚拟机把文件打个 tar 包,然后拖出来用工具比较?有什么好的工具呢
|
3
changnet 2018-01-04 00:50:59 +08:00 via Android 1
系统理不清,代码和依赖(不是逻辑,就文件)总理得清吧,把它们都拿出来,扔到不同分支慢慢比
|
4
likuku 2018-01-04 01:04:43 +08:00 1
文件全都算一遍 sha256,存数据库里,慢慢去比较把...
|
5
likuku 2018-01-04 01:05:57 +08:00 1
文本文件 /脚本,当然也可以尝试从每个镜像里抽出来,再一次次塞 git
|
6
gaayyy OP @likuku 听起来好累。。。 整个人都感觉不好了。我在下面这个帖子里看到了 1 楼建议的方法的具体实施方式,准备还是让电脑自动对比来一轮先看看,不行只有按你说的上 git 了。其实能找出不同的业务代码再慢慢顺藤摸瓜,找包,找依赖感觉会省事不少。
https://superuser.com/questions/1114104/how-can-i-compare-two-virtualbox-snapshots |
7
likuku 2018-01-04 01:10:08 +08:00
@gaayyy 看它虚拟机镜像格式了,不怕麻烦就一次次导入虚机平台,再用 arch/gentoo/ubuntu liveCD 启动 (他们 livecd 软件比较完备),挂上虚拟的硬盘,直接用 rsync 先统统复制到外面某台大容量 rsync server 上去,当然做好区分,比如每个镜像盘的内容放独立目录。
|
8
likuku 2018-01-04 01:13:08 +08:00
其实,何必这样呢?只把当前正常运行的完整这一套的最新版弄出来塞 git 不好么?
旧的?先放一边,可以慢慢来(每月导出处理一版 /镜像),等半年 /一年后,旧的基本就可以废了吧。 |
9
likuku 2018-01-04 01:16:01 +08:00
@gaayyy 6# 里的链接,里面也还是给的 算 hash...
Get a list of every file/directory Checksum each file Save all gathered info to a file 或者用 diff (fc on win) 不同版本,相同有效内容,但空格,缩进,换行,空行,的不同,也还是会被 diff 判断为不同把? |
10
msg7086 2018-01-04 05:50:53 +08:00
暴力点就整个分区扔进 git 呗,每次 rsync 一遍然后看看 status。
|
11
Aliencn 2018-01-04 09:59:59 +08:00
试试用入侵检测工具 AIDE,可以用来对比文件完整性
|