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

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

  •  
  •   gxgxxn · 343 天前 · 6488 次点击
    这是一个创建于 343 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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


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

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

    Linux 系统的安装过程是很透明很简单的,本质上就是把所有的软件包解压出来放进分区里,然后执行配置脚本,最后改改常见的配置(时区啊语言啊 fstab 啊之类),安装并配置一下 grub,就完事了。你自己写个系统安装程序也是分分钟的事情。
    dayeye2006199
        31
    dayeye2006199   342 天前
    可以用 chef 或者 puppet
    AmrtaShiva
        32
    AmrtaShiva   342 天前 via iPhone
    rsync+27 楼方法搞好几次了 没毛病
    alfred42
        33
    alfred42   342 天前 via iPhone
    chef
    gxgxxn
        34
    gxgxxn   342 天前
    @ik 同一台设备不同硬盘测试,除了硬盘其他都是一样的。今天再试试看
    gxgxxn
        35
    gxgxxn   342 天前
    @opengps 我比较希望能做出系统镜像,这样文件体积不会很大,安装也不比较方便。
    gxgxxn
        36
    gxgxxn   342 天前
    @Osk
    @msg7086
    @AmrtaShiva
    谢谢,这个方法是很方便。请问是不是这种方法要求是配置完成相同吗?
    Osk
        37
    Osk   342 天前 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   342 天前
    必须全新安装后用脚本自动化安装你的软件。因为安装成功后会生成一些以你的硬件为来源的信息文件,比如 udev 设备之类。批量部署可以用 cobbler,全新安装后会运行指定脚本,配置比较复杂,坑比较多。或者批量部署后用自动化软件部署你的软件,比如 ansible (比较麻烦),pyinfra (比较简洁)等
    另外,docker 也是可以的,docker 可以有图形界面,docker hub 上有 xfce 这种安装桌面的 docker 。然后通过 vnc 或者 html 访问。不过得些 Dockerfile,写好 Dockerfile 部署不用担心出错,用脚本担心出错
    msg7086
        39
    msg7086   342 天前
    @gxgxxn 相对类似的比较好,但不是很大的问题。
    ungrown
        40
    ungrown   342 天前
    我想说,虚拟机不行吗?
    这年头主流虚拟机的性能损耗都非常微小了(虽然有些接口的 IO 还是有拉胯的可能)
    如果能接受虚拟机部署的话,那么一个虚拟机镜像比此楼其他方案都方便得多得多得多
    kiracyan
        41
    kiracyan   342 天前
    写安装脚本
    opengps
        42
    opengps   342 天前
    重新看了下帖子,PXE 网络安装系统似乎更适合
    KarPy
        43
    KarPy   342 天前
    把这个做成镜像,然后 pxe 安装
    flowercoder
        44
    flowercoder   342 天前
    一楼就是正确答案了,再生龙真的好用,好像是湾湾搞出来的,确实好用,相当快速,连系统都不用装了。就是硬件最好一样,否则还要装一些驱动啥的。
    optimus
        45
    optimus   342 天前
    用 ghost
    AmrtaShiva
        46
    AmrtaShiva   342 天前 via iPhone
    @gxgxxn 我之前是同一台笔记本换硬盘做过一次 后来在换过的硬盘上 又把笔记本换成 itx CPU 也换了 没毛病😌
    mafeifan
        47
    mafeifan   342 天前
    先磁盘生成原始映像,然后其他实例基于这个映像创建,这种比较快
    tairan2006
        48
    tairan2006   342 天前
    做镜像
    huang86041
        49
    huang86041   342 天前
    如果不能保证机器配置都是一样的,写安装脚本吧.
    ren2881971
        50
    ren2881971   342 天前
    playbook
    gxgxxn
        51
    gxgxxn   342 天前
    @flowercoder 这个软件功能确实很强大,但是试了几次都备份失败,不知道什么原因。
    charlie21
        52
    charlie21   342 天前
    详细记录第一台机器的各软件的安装步骤,然后在第二台电脑上走一遍
    gxgxxn
        53
    gxgxxn   342 天前
    @KarPy
    @tairan2006 请问有没有什么镜像制作工具推荐?已经找到 Mondo 、systemback 两款软件,但是前者 Ubuntu18 上没有可用安装包,使用源码安装后,可能是缺失什么依赖库的原因,总是启动失败;后者制作出来的镜像文件启动失败,会出现(initramfs)mount:mounting /dev/loop0 on //filesystem.squashfs failed: 错误。
    julyclyde
        54
    julyclyde   342 天前
    如果都是 apt/dpkg 的话,可以用 dpkg --get-selections

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

    不能联网指的是不能连公网还是机器之间都不能连?如果不能连公网还是可以使用 ansible
    wccc
        58
    wccc   342 天前
    flowercoder
        59
    flowercoder   342 天前
    @gxgxxn 仔细看下官方操作文档,如果还不行,它可以选中文的,很简单的。再不行就确保一块硬盘,重装系统和软件再试备份。我那时候 100 多台机器都是这么装的,Linux 支持很好
    402124773
        61
    402124773   342 天前
    一楼说的那个再生龙就是搞这个的
    Death
        62
    Death   342 天前
    楼上和一楼提到的 Clonezilla 就是比较方便的镜像方式了,如果设备多还可以用 Clonezilla Server Edition
    dorothyREN
        63
    dorothyREN   342 天前
    ansible+playbook
    unlighted
        64
    unlighted   342 天前 via Android
    clonezilla 不太好,还是拿脚本装环境好
    fox0001
        65
    fox0001   342 天前 via Android
    @Osk #27
    @msg7086 #30
    @AmrtaShiva #32
    同意~ rsync 是最佳方案了
    user0
        66
    user0   341 天前 via Android
    再生龙+1 我都用好多年了,特别方便。平时喜欢在自己电脑上瞎搞,所以每次瞎搞之前再生龙备份一下,之后无脑恢复就行了。用 tar 或者 rsync 也行,不过需要搞 grub,不是那么无脑
    tadebao
        67
    tadebao   341 天前
    #dd   bs=4M if=/dev/sdb of=/dev/sdc &&sync  了解下
    gxgxxn
        68
    gxgxxn   339 天前
    感谢各位的帮助,最终选择的方式是使用 Cubic 操作已有镜像,在其中安装自己所需的软件。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2035 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:49 · PVG 23:49 · LAX 08:49 · JFK 11:49
    ♥ Do have faith in what you're doing.