怎样快速部署多台装有同样软件的 Linux 系统? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
gxgxxn
V2EX    Linux

怎样快速部署多台装有同样软件的 Linux 系统?

  •  
  •   gxgxxn 2020-11-15 21:21:28 +08:00 8883 次点击
    这是一个创建于 1795 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前有一台 Ubuntu 机器已经安装好各类所需的软件,另外有几台设备也需要安装同样的软件环境,由于软件安装较为负责,所以有没有什么方法将已有的软件环境复制其他机器上?

    68 条回复    2020-11-19 08:35:55 +08:00
    ik
        1
    ik  
       2020-11-15 21:25:43 +08:00 via iPhone
    再生龙
    sujin190
        2
    sujin190  
       2020-11-15 21:29:18 +08:00
    把硬盘拆下来对刻一下就是了啊
    gxgxxn
        3
    gxgxxn  
    OP
       2020-11-15 21:36:13 +08:00
    @sujin190 Raid 阵列弄起来也不方便吧,而且几台设备不在同一个地方。。。
    gxgxxn
        4
    gxgxxn  
    OP
       2020-11-15 21:36:55 +08:00
    @ik 这个似乎不错,我研究一下是否可行
    viko16
        5
    viko16  
       2020-11-15 21:37:18 +08:00 via Android
    docker 不就是解决这个问题的吗
    ik
        6
    ik  
       2020-11-15 21:39:58 +08:00 via iPhone
    @gxgxxn 可行的,我见过有客户用这个,但是我没实践过...
    gxgxxn
        7
    gxgxxn  
    OP
      &nbp;2020-11-15 21:40:16 +08:00
    @viko16 docker 好像不支持图形界面吧,也不确定所需软件能不能在 docker 下运行
    ik
        8
    ik  
       2020-11-15 21:43:31 +08:00 via iPhone
    @gxgxxn 但是这个类似于 ghost,是克隆系统的方式,部署的环境可能会有配置上的冲突或者调整啥的
    felixcode
        9
    felixcode  
       2020-11-15 21:45:53 +08:00
    @gxgxxn
    docker 支持图形,可以看看这里面的
    https://linoxide.com/how-tos/20-docker-containers-desktop-user/
    sujin190
        10
    sujin190  
       2020-11-15 21:48:05 +08:00
    @gxgxxn #3 无所谓吧,反正阵列加载到系统了还不是一块磁盘,复制的是逻辑盘的数据,又不是物理磁盘,不在一起的化可以考虑把现在装好的磁盘做成二进制文件,然后在弄到新盘上写进去就是了,dd 就能干这事
    IDAEngine
        11
    IDAEngine  
       2020-11-15 22:11:39 +08:00 via iPhone
    看硬件配置了,如果硬件完全一样,直接硬盘克隆就行了
    superrichman
        12
    superrichman  
       2020-11-15 22:14:49 +08:00 via iPhone
    dd 整个硬盘
    joynvda
        13
    joynvda  
       2020-11-15 22:24:10 +08:00
    除了硬盘分区复制,还有把已安装的系统软件列表导出,用脚本逐一安装并且调整配置。
    gxgxxn
        14
    gxgxxn  
    OP
       2020-11-15 22:33:14 +08:00
    @felixcode 后面再研究一下,最初想要使用 docker 的,可是后来发现 docker 对 gui 支持不好就放弃了。
    gxgxxn
        15
    gxgxxn  
    OP
       2020-11-15 22:34:56 +08:00
    @ik 测试了一下,备份过程中有些分区备份失败,原因不明。可是能是使用姿势不对。
    gxgxxn
        16
    gxgxxn  
    OP
       2020-11-15 22:36:27 +08:00
    @superrichman
    @IDAEngine 硬件配置一样,只是担心克隆整个硬盘出来的文件会不会很多,系统硬盘可用容量有 1.5T 。
    raaaaaar
        17
    raaaaaar  
       2020-11-15 22:36:57 +08:00 via Android
    Linux 下软件的概念比较模糊吧,备份 home 目录,或者整个系统比较常见。
    gxgxxn
        18
    gxgxxn  
    OP
       2020-11-15 22:38:24 +08:00
    @joynvda 重要的软件就两个,关键是其中一个软件安装很麻烦,还和系统关联性很大(一些与系统相关的配置信息是在编译前写入配置文件的)。
    opengps
        19
    opengps  
       2020-11-15 22:48:51 +08:00 via Android
    系统镜像,硬盘克隆
    sirius1024
        20
    sirius1024  
       2020-11-15 23:02:05 +08:00
    做成镜像,用啥软件 boot 起来就行了,或者统一推送安装
    Ansible/Salt Stack/IPMI/PXE...
    naoh1000
        21
    naoh1000  
       2020-11-15 23:10:14 +08:00
    dd if=/dev/原硬盘 of=/dev/目标硬盘
    如果目标硬盘容量和原硬盘相等,你将得到数据完全相同的两块硬盘
    KENNHI
        22
    KENNHI  
       2020-11-16 00:10:13 +08:00
    打包镜像,PXE 自动安装
    Jirajine
        23
    Jirajine  
       2020-11-16 00:13:29 +08:00 via Android
    都是相同型号的电脑的话,直接 rsync 一下。
    laminux29
        24
    laminux29  
       2020-11-16 00:36:34 +08:00
    WinPE 启动,各种网络克隆工具。
    skydiver
        25
    skydiver  
       2020-11-16 00:36:37 +08:00
    直接 rsync
    systemcall
        26
    systemcall  
       2020-11-16 00:52:30 +08:00 via Android
    硬盘取下来丢对拷机里按一下就行了,注意方向
    Osk
        27
    Osk  
       2020-11-16 01:40:50 +08:00 via Android
    不推荐 dd,这方法很不合适,适合用来划水,dd 一开始,然后半天后才完成,中间可以划水,这么大负荷的读写操作有些硬盘万一没扛住就糟了。


    通常是基于文件的复制,做成 tar 包或者 rsync 复制都行,通常来说,由于文件系统 uuid 变了,需要重新生成 grub.cfg 和调整 /etc/fstab,linux 在这方面没啥玄学。

    如果非要用基于块设备的克隆,也要选择能够理解文件系统的工具,只拷贝有效数据块,不过工具比较少。
    ik
        28
    ik  
       2020-11-16 02:19:07 +08:00 via iPhone
    @gxgxxn 因为没有实践经验,所以也帮不了你了…
    会不会是硬件配置不一样?
    smartyang
        29
    smartyang  
       2020-11-16 02:51:03 +08:00 via Android
    diskgunis 试试
    msg7086
        30
    msg7086  
       2020-11-16 04:17:56 +08:00
    rsync 对拷,然后网络配置和 fstab 改一下,重新生成一下 grub 配置,就行了。

    Linux 系统的安装过程是很透明很简单的,本质上就是把所有的软件包解压出来放进分区里,然后执行配置脚本,最后改改常见的配置(时区啊语言啊 fstab 啊之类),安装并配置一下 grub,就完事了。你自己写个系统安装程序也是分分钟的事情。
    dayeye2006199
        31
    dayeye2006199  
       2020-11-16 05:04:06 +08:00
    可以用 chef 或者 puppet
    AmrtaShiva
        32
    AmrtaShiva  
       2020-11-16 07:55:02 +08:00 via iPhone
    rsync+27 楼方法搞好几次了 没毛病
    alfred42
        33
    alfred42  
       2020-11-16 07:55:44 +08:00 via iPhone
    chef
    gxgxxn
        34
    gxgxxn  
    OP
       2020-11-16 08:08:03 +08:00
    @ik 同一台设备不同硬盘测试,除了硬盘其他都是一样的。今天再试试看
    gxgxxn
        35
    gxgxxn  
    OP
       2020-11-16 08:09:19 +08:00
    @opengps 我比较希望能做出系统镜像,这样文件体积不会很大,安装也不比较方便。
    gxgxxn
        36
    gxgxxn  
    OP
       2020-11-16 08:12:53 +08:00
    @Osk
    @msg7086
    @AmrtaShiva
    谢谢,这个方法是很方便。请问是不是这种方法要求是配置完成相同吗?
    Osk
        37
    Osk  
       2020-11-16 08:23:26 +08:00 via Android
    @gxgxxn 不要求
    一般流程:
    启动到 live-cd.
    解压备份或复制.
    chroot 到新系统.
    编辑 fstab,hostname.
    update-initcpio/mkinitcpio (视发行版),这一步可消除大部分硬件差异导致的启动问题.
    grub-install /dev/xxx 安装 bootloader.
    update-grub / grub-mkconfig 重新生成 grub.cfg.

    只要把启动流程理清楚了也就那么回事儿。硬件方面,只要没有啥需要单独安装驱动的硬件都还好
    popil1987
        38
    popil1987  
       2020-11-16 08:58:44 +08:00
    必须全新安装后用脚本自动化安装你的软件。因为安装成功后会生成一些以你的硬件为来源的信息文件,比如 udev 设备之类。批量部署可以用 cobbler,全新安装后会运行指定脚本,配置比较复杂,坑比较多。或者批量部署后用自动化软件部署你的软件,比如 ansible (比较麻烦),pyinfra (比较简洁)等
    另外,docker 也是可以的,docker 可以有图形界面,docker hub 上有 xfce 这种安装桌面的 docker 。然后通过 vnc 或者 html 访问。不过得些 Dockerfile,写好 Dockerfile 部署不用担心出错,用脚本担心出错
    msg7086
        39
    msg7086  
       2020-11-16 10:30:23 +08:00
    @gxgxxn 相对类似的比较好,但不是很大的问题。
    ungrown
        40
    ungrown  
       2020-11-16 10:34:31 +08:00
    我想说,虚拟机不行吗?
    这年头主流虚拟机的性能损耗都非常微小了(虽然有些接口的 IO 还是有拉胯的可能)
    如果能接受虚拟机部署的话,那么一个虚拟机镜像比此楼其他方案都方便得多得多得多
    kiracyan
        41
    kiracyan  
       2020-11-16 10:56:31 +08:00
    写安装脚本
    opengps
        42
    opengps  
       2020-11-16 11:08:53 +08:00
    重新看了下帖子,PXE 网络安装系统似乎更适合
    KarPy
        43
    KarPy  
       2020-11-16 11:20:33 +08:00
    把这个做成镜像,然后 pxe 安装
    flowercoder
        44
    flowercoder  
       2020-11-16 11:28:09 +08:00
    一楼就是正确答案了,再生龙真的好用,好像是湾湾搞出来的,确实好用,相当快速,连系统都不用装了。就是硬件最好一样,否则还要装一些驱动啥的。
    optimus
        45
    optimus  
       2020-11-16 12:31:25 +08:00
    用 ghost
    AmrtaShiva
        46
    AmrtaShiva  
       2020-11-16 12:59:30 +08:00 via iPhone
    @gxgxxn 我之前是同一台笔记本换硬盘做过一次 后来在换过的硬盘上 又把笔记本换成 itx CPU 也换了 没毛病
    mafeifan
        47
    mafeifan  
       2020-11-16 13:01:19 +08:00
    先磁盘生成原始映像,然后其他实例基于这个映像创建,这种比较快
    tairan2006
        48
    tairan2006  
       2020-11-16 13:19:04 +08:00
    做镜像
    huang86041
        49
    huang86041  
       2020-11-16 13:27:15 +08:00
    如果不能保证机器配置都是一样的,写安装脚本吧.
    ren2881971
        50
    ren2881971  
       2020-11-16 13:41:12 +08:00
    playbook
    gxgxxn
        51
    gxgxxn  
    OP
       2020-11-16 14:00:21 +08:00
    @flowercoder 这个软件功能确实很强大,但是试了几次都备份失败,不知道什么原因。
    charlie21
        52
    charlie21  
       2020-11-16 14:06:48 +08:00
    详细记录第一台机器的各软件的安装步骤,然后在第二台电脑上走一遍
    gxgxxn
        53
    gxgxxn  
    OP
       2020-11-16 14:07:26 +08:00
    @KarPy
    @tairan2006 请问有没有什么镜像制作工具推荐?已经找到 Mondo 、systemback 两款软件,但是前者 Ubuntu18 上没有可用安装包,使用源码安装后,可能是缺失什么依赖库的原因,总是启动失败;后者制作出来的镜像文件启动失败,会出现(initramfs)mount:mounting /dev/loop0 on //filesystem.squashfs failed: 错误。
    julyclyde
        54
    julyclyde  
       2020-11-16 14:08:17 +08:00
    如果都是 apt/dpkg 的话,可以用 dpkg --get-selections

    dd 整个硬盘不合适,会把 UUID 之类的也带过来的
    gxgxxn
        55
    gxgxxn  
    OP
       2020-11-16 14:09:59 +08:00
    @huang86041
    @kiracyan
    @charlie21 安装记录有,也有所需软件的安装脚本,但是在其他机器上安装时可能不能联网,那样的话就需要手动解决依赖问题,想想都可怕,而且安装过程中也有可能遇到一些其他问题。
    tankren
        56
    tankren  
       2020-11-16 14:45:02 +08:00
    pxe 无人安装
    goosling
        57
    goosling  
       2020-11-16 15:26:51 +08:00
    ansible, 写一个 playbook 同意安装配置一下,以后配置改起来重新 run 一下就 ok 了,就是第一次麻烦一些。

    不能联网指的是不能连公网还是机器之间都不能连?如果不能连公网还是可以使用 ansible
    fkmc
        58
    fkmc  
       2020-11-16 15:51:48 +08:00
    flowercoder
        59
    flowercoder  
       2020-11-16 15:52:27 +08:00
    @gxgxxn 仔细看下官方操作文档,如果还不行,它可以选中文的,很简单的。再不行就确保一块硬盘,重装系统和软件再试备份。我那时候 100 多台机器都是这么装的,Linux 支持很好
    402124773
        61
    402124773  
       2020-11-16 15:57:10 +08:00
    一楼说的那个再生龙就是搞这个的
    Death
        62
    Death  
       2020-11-16 18:12:00 +08:00
    楼上和一楼提到的 Clonezilla 就是比较方便的镜像方式了,如果设备多还可以用 Clonezilla Server Edition
    dorothyREN
        63
    dorothyREN  
       2020-11-16 18:33:51 +08:00
    ansible+playbook
    unlighted
        64
    unlighted  
       2020-11-16 19:31:40 +08:00 via Android
    clonezilla 不太好,还是拿脚本装环境好
    fox0001
        65
    fox0001  
       2020-11-16 20:02:11 +08:00 via Android
    @Osk #27
    @msg7086 #30
    @AmrtaShiva #32
    同意~ rsync 是最佳方案了
    user0
        66
    user0  
       2020-11-17 08:07:00 +08:00 via Android
    再生龙+1 我都用好多年了,特别方便。平时喜欢在自己电脑上瞎搞,所以每次瞎搞之前再生龙备份一下,之后无脑恢复就行了。用 tar 或者 rsync 也行,不过需要搞 grub,不是那么无脑
    tadebao
        67
    tadebao  
       2020-11-17 17:27:24 +08:00
    #dd   bs=4M if=/dev/sdb of=/dev/sdc &&sync  了解下
    gxgxxn
        68
    gxgxxn  
    OP
       2020-11-19 08:35:55 +08:00
    感谢各位的帮助,最终选择的方式是使用 Cubic 操作已有镜像,在其中安装自己所需的软件。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3984 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 05:20 PVG 13:20 LAX 22:20 JFK 01:20
    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