V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
gxgxxn
V2EX  ›  Linux

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

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

    目前有一台 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
       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
    wccc
        58
    wccc  
       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   ·   我们的愿景   ·   实用小工具   ·   941 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 21:11 · PVG 05:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.