V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gaayyy
V2EX  ›  程序员

如何比较两个 Debian 系统是否完全一致?

  •  
  •   gaayyy · 2018-01-03 23:45:13 +08:00 · 2643 次点击
    这是一个创建于 2507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    年底一个开发跑路了,他负责的几个内部管理用的小系统还有几个 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/下面的文件,但老板不同意,而且特别强调让给个最终完整的对比报告。

    说多了都是泪,求各位给指点指点,先谢谢了。

    11 条回复    2018-01-04 09:59:59 +08:00
    LoliconInside
        1
    LoliconInside  
       2018-01-04 00:00:15 +08:00 via Android   ❤️ 1
    找个机器把虚拟机磁盘全部用 loop 设备挂载出来,然后就当作几个目录来比较就好。
    gaayyy
        2
    gaayyy  
    OP
       2018-01-04 00:38:57 +08:00
    @LoliconInside 谢谢,能不能进虚拟机把文件打个 tar 包,然后拖出来用工具比较?有什么好的工具呢
    changnet
        3
    changnet  
       2018-01-04 00:50:59 +08:00 via Android   ❤️ 1
    系统理不清,代码和依赖(不是逻辑,就文件)总理得清吧,把它们都拿出来,扔到不同分支慢慢比
    likuku
        4
    likuku  
       2018-01-04 01:04:43 +08:00   ❤️ 1
    文件全都算一遍 sha256,存数据库里,慢慢去比较把...
    likuku
        5
    likuku  
       2018-01-04 01:05:57 +08:00   ❤️ 1
    文本文件 /脚本,当然也可以尝试从每个镜像里抽出来,再一次次塞 git
    gaayyy
        6
    gaayyy  
    OP
       2018-01-04 01:08:31 +08:00
    @likuku 听起来好累。。。 整个人都感觉不好了。我在下面这个帖子里看到了 1 楼建议的方法的具体实施方式,准备还是让电脑自动对比来一轮先看看,不行只有按你说的上 git 了。其实能找出不同的业务代码再慢慢顺藤摸瓜,找包,找依赖感觉会省事不少。

    https://superuser.com/questions/1114104/how-can-i-compare-two-virtualbox-snapshots
    likuku
        7
    likuku  
       2018-01-04 01:10:08 +08:00
    @gaayyy 看它虚拟机镜像格式了,不怕麻烦就一次次导入虚机平台,再用 arch/gentoo/ubuntu liveCD 启动 (他们 livecd 软件比较完备),挂上虚拟的硬盘,直接用 rsync 先统统复制到外面某台大容量 rsync server 上去,当然做好区分,比如每个镜像盘的内容放独立目录。
    likuku
        8
    likuku  
       2018-01-04 01:13:08 +08:00
    其实,何必这样呢?只把当前正常运行的完整这一套的最新版弄出来塞 git 不好么?

    旧的?先放一边,可以慢慢来(每月导出处理一版 /镜像),等半年 /一年后,旧的基本就可以废了吧。
    likuku
        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 判断为不同把?
    msg7086
        10
    msg7086  
       2018-01-04 05:50:53 +08:00
    暴力点就整个分区扔进 git 呗,每次 rsync 一遍然后看看 status。
    Aliencn
        11
    Aliencn  
       2018-01-04 09:59:59 +08:00
    试试用入侵检测工具 AIDE,可以用来对比文件完整性
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:22 · PVG 00:22 · LAX 08:22 · JFK 11:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.