如何比较两个 Debian 系统是否完全一致? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
gaayyy
V2EX    程序员

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

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

    年底一个开发跑路了,他负责的几个内部管理用的小系统还有几个 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 &bsp;   Solana     5414 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 09:25 PVG 17:25 LAX 02:25 JFK 05:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86