多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

银河麒麟V10批量部署实战:Ghost镜像制作与UKey激活全记录

银河麒麟V10批量部署实战:Ghost镜像制作与UKey激活全记录 今年年初接了个让我头疼挺久的项目单位有一批终端要从旧系统整体切换到银河麒麟V10-SP1数量两百多台分布在不同楼层、不同部门硬件品牌又是五花八门。领导给出的要求很明确——像以前Windows系统一样用Ghost镜像做批量部署再把UKey激活的环节一并跑通。说实话Linux用Ghost来做镜像还原刚开始我心里是没底的但整套流程走完之后我最大的感受是只要把母盘封装、引导修复、UKey激活这几个关键点吃透批量部署的效率其实一点不比Windows差。这篇实录就是我这次从零到两百多台完整落地的过程记录包括母盘怎么做、Ghost怎么还原、UKey怎么激活以及那些只有踩过坑才会记住的细节给正在做或者准备做同类任务的企业IT运维、桌面运维工程师一个参考。1. 项目背景与整体方案选型1.1 这次任务到底要解决什么表面上看任务就是把银河麒麟V10-SP1装到两百多台电脑上。但实际跑起来就会发现问题远不是“装个系统”那么简单。第一终端硬件差异很大。我统计了一下手头的设备有Intel的NUC准系统有联想的商用台式机还有一批杂牌一体机最老的机器已经是五六年前的配置了。每台机器如果都手工装系统、手工激活按一台40分钟来算一个人干满一周都打不住而且人一累就容易出错。第二现场网络环境不是特别理想。部分楼层没有改造过的交换机环境想做全自动PXE无人值守安装前期调试网络启动和服务端的时间成本会非常高。领导更希望沿用原来Windows时代的Ghost网刻流程让几个运维同事加个班就能搞完不希望在这个环节花太多时间研究新工具。第三UKey激活是整个流程里最容易出乱子的环节。银河麒麟V10-SP1的授权里有相当一部分是通过UKey类似USB加密狗来承载的每台机器要单独插入UKey完成激活。Ghost克隆出来的系统不可能把激活状态也一起克隆过去因为激活是和机器硬件信息绑定的。所以“装系统”只是前半场后半场其实是激活和验收。1.2 为什么最终选Ghost而不是PXE或Clonezilla方案对比这一步我是认真权衡过的不是拍脑袋选的。当时摆在桌面上的候选方案大概有四种手工安装、PXE无人值守、Clonezilla/dd整盘克隆、Ghost镜像克隆。我整理了一张对比表方案上手难度批量速度硬件兼容性离线支持适合场景手工安装低极慢最好完全支持几台机器PXE自动化高快较好需搭建服务端大规模、网络规范Clonezilla/dd中快较好支持U盘/本地熟悉Linux的团队Ghost克隆中快依赖PE环境支持本地/网刻Windows迁移经验多的团队最终选Ghost有三个很现实的原因。一是团队技能迁移成本低。单位里的运维同事用Ghost用了快十年WinPE启动盘、Ghost网刻这些流程闭着眼都能操作。人不折腾事情就好办。二是整个流程可以完全离线跑。Ghost镜像放在本地U盘或者移动硬盘不依赖网络遇到那些网络环境特别乱的楼层反而更安心。三是Ghost对MBR分区结构的支持非常稳定。这批机器里相当一部分是传统BIOS引导Ghost还原起来非常顺手。当然后面我会提到遇到UEFI引导的机器需要额外处理引导项这个坑我在项目后半段踩过。1.3 整体工作流程设计在动手之前我把整个批量部署流程拆成了五个阶段母盘安装与配置 - 系统清理与封装 - Ghost备份镜像 - 批量还原与初始化 - UKey激活与验收这样拆的好处是每个阶段都有明确的产出物哪个环节出问题可以马上定位。母盘阶段产出的是“干净的模板系统”封装阶段产出的是“不含本机唯一标识的镜像”Ghost备份阶段产出的是“可直接分发到其他机器的.gho文件”批量还原阶段负责把镜像推到目标机器上最后一个阶段则是激活和逐台验收。整个项目跑下来我最深的体会是批量部署这事儿真正决定成败的不是某个单一环节的技术含量而是前面的母盘做得好不好、封装得干不干净。母盘上一个没清理干净的hostname或者machine-id到了两百多台机器上就会变成两百多个需要返工的现场。2. 母盘安装与Ghost镜像封装2.1 硬件兼容性摸底这一步千万别省母盘机器选哪一台是有讲究的。我一开始也想省事随手拿了一台最新的NUC当母机结果Ghost还原到老机器上显卡直接黑屏进系统就卡在启动界面。后来学乖了花了半天时间把所有机型整理了一份清单重点看了三个地方主板芯片组、显卡型号、网卡型号。最省事的策略是母盘选配置居中的机器别选最新也别选最老。这样克隆到新机器上有大概率能正常进系统克隆到老机器上也不至于缺驱动。如果现场实在避不开特别老的显卡必须在母盘里提前装好兼容驱动或者通过内核启动参数来规避显示问题比如加一个可靠的基础显示参数这一步不能偷懒。另外还要确认机器是BIOS引导还是UEFI引导。我们这批机器里传统BIOS的占多数但混了十几台UEFI引导的机器。Ghost处理这些UEFI机器的时候还原完成后引导会被打乱后面我会专门说修复方法。2.2 母盘系统安装的几个关键点母盘安装银河麒麟V10-SP1的时候有几个细节会影响后续克隆效果。分区方案建议直接采用系统安装器默认的自动分区。很多老运维习惯手动分但批量部署场景下我反而推荐按安装器默认走原因很简单默认分区的结构和系统引导的预期一致Ghost还原后恢复引导时不容易出幺蛾子。如果必须手动分区至少保证有一个独立的/boot分区并且根分区选择系统支持良好的文件系统。软件包选择上母盘里只装最基础的办公软件和常用工具越少越好。单位的业务软件全部放到后续的软件分发环节去装不塞进Ghost镜像里。这样做的好处是以后如果业务软件换版本不需要重新做母盘和镜像灵活性高很多。系统安装完之后先别急着关机。把系统补丁、固件更新能装的先装到母盘里这样克隆出去的机器就能少一轮更新。我就是在这个环节给母盘装了常用的办公依赖和字体包后面省了不少事。2.3 清理系统标识这是Ghost镜像能否批量复制的分水岭很多第一次做Linux克隆的运维会忽略这一步。Windows系统有sysprep工具Linux虽然没有完全等价的工具但清理以下这些内容效果是一样的。需要清理的几项如下清空hostname。银河麒麟安装时默认会把主机名设成类似“kylin-xxxxx”的形式这个名称在克隆后会原样带到每一台机器上。批量部署后如果所有机器的主机名一样后续做资产管理、日志采集都会非常混乱。删除/重置/etc/machine-id。这个文件是系统的机器唯一标识systemd和很多软件都依赖它。如果克隆后所有机器共享同一个machine-id就可能出现DHCP分配异常、日志服务冲突等问题。清理SSH主机密钥。如果不清理所有克隆机器会有相同的SSH host key从安全角度看是非常危险的。清空网络连接配置。移除NetworkManager生成的有线连接配置让每台机器首次启动时重新生成网卡配置避免克隆后IP地址冲突。清理日志和临时文件。把/var/log下的日志清一遍把自己操作过程中留下的临时文件、安装包缓存全部删除。卸载与硬件强绑定的软件。比如某些厂商的电源管理、设备识别工具这些工具会绑定特定硬件信息克隆后可能导致系统启动异常。这些操作可以手工做但更建议写成脚本。我在母盘上执行清理时用的就是下面这种思路# 清理主机名 hostnamectl set-hostname localhost sed -i s/^HOSTNAME.*/HOSTNAMElocalhost/ /etc/sysconfig/network 2/dev/null || true # 重置机器标识 rm -f /etc/machine-id systemd-machine-id-setup # 删除SSH主机密钥 rm -f /etc/ssh/ssh_host_* # 清理网络连接配置 rm -rf /etc/NetworkManager/system-connections/* # 清理日志 journalctl --vacuum-time1s rm -rf /var/log/*.log /var/log/*.gz /var/log/*.xz注意在母盘上执行这些清理命令前一定要确认清理后系统能正常关机并重启。如果脚本有误删导致系统起不来后面的Ghost镜像将失去意义。2.4 制作Ghost镜像工具版本是硬门槛母盘清理完成后重启前把母盘关机然后把硬盘拆下来挂到一台装有Ghost的WinPE机器上进入PE环境用Ghost做分区到镜像的备份。这里要提醒大家一个非常重要的历史教训Ghost对Linux文件系统的支持是分版本的。老的Ghost 8.3根本认不出ext4会直接报“partition not supported”。我们这次用的Ghost 11.5以上版本才正常支持ext4分区备份还原。如果单位里还在用很老的Ghost版本要么升级工具要么干脆换Clonezilla或者dd别和工具版本较劲。在WinPE环境里操作核心就两步把母盘挂上去选择Local - Partition - To Image选中母盘的根分区目标路径选U盘或移动硬盘压缩方式选High或者Fast都行。如果要走命令行也可以这样写ghost -clone,modepdump,src1:1,dstE:\ghost\kylin-v10sp1.gho -z2 -sure这个命令的含义是把第一块硬盘的第一个分区备份到E盘ghost目录下的kylin-v10sp1.gho-z2表示中等压缩。备份时间取决于分区大小我们母盘根分区装完大概30GB压缩后约10GB出头耗时不到二十分钟。做完镜像后我习惯在母盘原机上再开机验证一次系统是否正常然后保存一份镜像的校验信息。后面发现下载或拷贝过程中镜像损坏时可以通过校验值和源文件对比快速定位问题。3. 批量还原与系统初始化3.1 两种Ghost还原方式按现场条件取舍镜像做好之后实际操作还原时有两条路可以走本地U盘还原和网刻批量还原。本地U盘还原适合机器数量少、分布散的场景。运维同事拿一个装好Ghost的启动U盘插上镜像文件在目标机器上手动操作还原。缺点是每台机器都要人工介入好处是灵活。网刻则适合集中处理一批机器。把Ghost镜像放到服务端目标机器通过网络启动进入Ghost客户端由服务端统一发送镜像。网刻的性能瓶颈主要在千兆网络和硬盘写入速度正常情况下跑完一台大约10到15分钟比U盘逐个插拔高效很多。这次项目我把两种方式都用了集中楼层用网刻分散的独立办公室用U盘。如果用一个统一的WinPE启动盘来跑Ghost注意选择集成有网卡驱动的PE版本否则网刻时目标机器可能找不到网卡。还原命令大致是这样# 从本地分区还原到第一块硬盘第一个分区 ghost -clone,modepload,srcE:\ghost\kylin-v10sp1.gho:1,dst1:1 -sure -rb几个参数解释下modepload表示执行分区还原src后面的:1表示.gho文件里的第一个分区dst1:1表示目标磁盘的第二个分区-sure是跳过确认-rb是完成后自动重启。这个命令在企业大批量操作时能省掉不少点击确认的时间。3.2 还原后的引导修复UEFI机器八成会中招Ghost还原完Linux系统重启后可能碰到的第一个问题就是引导失败。BIOS引导的机器相对好说只要分区结构和母盘一致基本能正常拉起。UEFI引导的机器就比较麻烦因为Ghost还原分区时EFI系统分区里的引导文件经常对不上开机直接卡在GRUB命令行或者黑屏。我处理UEFI机器引导问题的标准流程是准备一个银河麒麟V10-SP1的安装U盘或LiveCD以“救援模式”或者“试用系统”启动目标机器挂载硬盘分区后重装GRUB。具体操作思路如下# 假设目标硬盘是/dev/sda根分区是/dev/sda2EFI分区是/dev/sda1 mkdir -p /mnt/sysroot mount /dev/sda2 /mnt/sysroot mount /dev/sda1 /mnt/sysroot/boot/efi mount --bind /dev /mnt/sysroot/dev mount --bind /proc /mnt/sysroot/proc mount --bind /sys /mnt/sysroot/sys chroot /mnt/sysroot /bin/bash # 在chroot环境里重装GRUB grub-install --targetx86_64-efi --efi-directory/boot/efi --boot-directory/boot update-grub exit注意chroot后执行的命令是在目标系统环境里运行的千万别在宿主的LiveCD环境里直接执行grub-install否则会把U盘的引导改掉。我就见过有同事手滑把LiveCD U盘的引导写坏原地又花了十几分钟重新做启动盘。修复完引导后重启目标机器一般就能正常进入登录界面了。3.3 主机名、IP与机器标识的批量初始化克隆后的系统每台机器的主机名、machine-id、网卡配置都是一样的这时候就要做初始化。我的做法是准备一个初始化脚本每台机器还原后开机进入系统以root身份执行脚本输入这台机器预分配的编号脚本自动完成主机名设置、IP配置和machine-id重新生成。脚本核心部分是这样的#!/bin/bash id_no$1 if [ -z $id_no ]; then echo Usage: $0 machine-no exit 1 fi # 设置主机名 hostnamectl set-hostname kylin-client-$id_no # 配置网络示例用nmcli实际网卡名以现场为准 nmcli con mod eth0 ipv4.addresses 10.20.30.$((100id_no))/24 nmcli con mod eth0 ipv4.gateway 10.20.30.1 nmcli con mod eth0 ipv4.dns 10.20.30.2 nmcli con up eth0 # 重新生成机器标识 rm -f /etc/machine-id systemd-machine-id-setup # 重新生成SSH主机密钥 rm -f /etc/ssh/ssh_host_* systemctl restart sshd echo init done: kylin-client-$id_no脚本编写上有个非常实用的细节规范输出信息并逐台记录日志。批量操作时很容易出现“这台做了还是没做”的记忆模糊把每一台机器的执行结果重定向到U盘上的一个日志文件里验收时直接看日志就能知道有多少台机器已经初始化。这个习惯帮我省了大量来回确认的时间。3.4 硬件差异与驱动处理克隆机器的硬件和母盘不完全一样时Linux的内核一般都能自动识别大部分硬件但有几个小问题值得注意。显卡驱动是黑屏问题的高发区。如果克隆出去的机器是旧款集成显卡而且还原后出现启动分辨率异常、花屏或黑屏可以尝试在GRUB启动项里临时加上一个通用的显示内核参数例如nomodeset先让系统能稳定进桌面再考虑装对应的闭源驱动。网卡命名也会随机变化。银河麒麟V10-SP1的NetworkManager可能会为不同硬件生成不同的网卡名比如母盘上是eth0到另一台机器变成ens33或者enp2s0。遇到这种情况脚本里的nmcli命令对应的连接名就要相应调整或者干脆用网络配置文件的方式统一管理避免用死设备名。还有USB设备、声卡、蓝牙这类外设绝大多数情况下即插即用但如果是单位内部用的特殊USB硬件读卡器、高拍仪等需要把厂商提供的Linux驱动提前集成到母盘里否则克隆后再逐台去装驱动费时费力还容易漏。4. UKey激活实战记录4.1 银河麒麟V10-SP1的授权机制这一部分是整个批量部署任务里最容易被低估的环节。很多人以为系统装上、镜像扩散出去就完事了结果被UKey激活卡了一整天。银河麒麟V10-SP1的激活方式常见的有两种一种是纯激活码方式安装时输入一串字符完成联网或离线激活另一种是UKey方式授权信息写在USB设备里插入机器后通过激活工具读取UKey里的证书结合机器硬件信息生成授权。我们这次用的就是UKey方式。需要特别说明的是Ghost克隆会把整个系统盘原样复制但UKey激活的授权状态不会跟着系统盘走。激活工具在激活过程中会把授权绑定到当前主机的硬件信息主板、网卡、磁盘等克隆出来的新机器硬件信息和母盘完全不同即使UKey里还有可用授权数也必须重新插UKey激活。所以批量子环节是无论如何都省不掉的。4.2 UKey驱动准备与识别UKey这类设备在Linux下需要厂商提供驱动银河麒麟V10-SP1本身集成了一部分常见厂商的UKey驱动但如果你拿到的是比较新的型号系统不一定能自动识别。动手批量激活之前我先在一台机器上做了驱动验证。把UKey插到USB口然后执行lsusb dmesg | tail -20lsusb的输出里如果能看到UKey对应的厂商信息说明硬件已经被识别。如果lsusb里没有检查USB口和UKey指示灯同时确认是否已经安装厂商提供的Linux驱动包。正常识别后系统里应该会出现对应的USB设备节点。还有个经常被忽略的点UKey要插在主机背后的USB口不要用前置面板的延长线。我们现场遇到过一批UKey插前置口识别不稳定换到后置口就正常的情况。多做一步能省掉很多低级排查。4.3 逐台激活的标准操作流程UKey激活的正确打开方式是逐台处理一台机器开机登录系统插入UKey打开“系统激活”应用选择UKey激活选项等待激活工具读取授权信息并提示完成然后拔出UKey换到下一台机器。这个操作看起来简单但为了不出错我要求执行激活的同事严格走下面几步先确认系统时间和日期正确。UKey证书有有效期系统时间差太多会导致证书校验失败。这是很多激活失败的原因而现场同事往往会先怀疑UKey坏了。打开系统自带的激活工具。银河麒麟V10-SP1一般在“设置”或“控制面板”里能找到“系统激活”入口选择“UKey激活”方式。如果没有这个入口检查系统是否已经预装激活相关组件。插上UKey后激活工具会自动识别授权信息点击“激活”按钮等待激活完成提示。激活成功后在激活工具界面确认授权状态为“已激活”并且记录一下授权类型和到期时间防止后续业务软件授权检查时发现异常。一台机器激活完成后务必在关机状态或者安全弹出后再拔UKey避免正在读写时拔出导致UKey里的证书信息损坏。整个激活环节我安排了专人负责他自己带了一台笔记本记录每台机器的MAC、主机名、激活时间后续如有问题可以通过这些记录回溯而不是全部依赖记忆。4.4 激活后的验证与常见状态判断激活完成不等于所有事情都结束了。我在项目里遇到过几次“看起来激活成功实际上授权状态有问题”的情况所以增加了一个验证步骤。激活后重启一次系统再次打开激活工具确认状态仍然显示“已激活”。如果激活状态在重启后丢失说明授权绑定过程没有正确完成需要重新激活。还有一种情况是激活工具提示“授权已绑定其他主机”或“授权使用次数已达上限”。这通常是单位采购的UKey数量有限而激活工具把每次激活都绑定到了不同硬件。遇到这种提示找厂商或者授权管理人员确认该UKey的授权范围和剩余次数如果确实超量需要申请新的授权或者走人工解锁流程。批量激活过程中建议每50台机器左右让激活人员报送一次统计数量与总台数比对。如果发现某些机器无法激活或激活失败及时暂停继续操作先集中排查原因而不是越积越多。这个做法在两百多台机器上跑下来效果很好及时拦截了三台硬件识别有问题的机器。5. 高频故障速查与实用经验5.1 常见问题速查表整个项目做完我把这一路踩过的坑整理成了速查表方便后续同事遇到同样问题时能马上找到方向故障现象可能原因处理思路Ghost备份报“partition not supported”Ghost版本不支持ext4换Ghost 11.5或改用Clonezilla/dd还原后卡GRUB命令行UEFI引导项未正确写入用LiveCD救援模式重装GRUB还原后黑屏显卡驱动不兼容GRUB加nomodeset启动参数再装驱动所有克隆机器主机名相同母盘未清空hostname批量初始化脚本逐台重设DHCP获取不到地址母盘machine-id未清理重置/etc/machine-id并重启网络服务网卡名和脚本预期不一致网络设备命名规则变化根据实际网卡名调整脚本或使用udev规则固化UKey插入无反应驱动未装、USB口接触不良lsusb和dmesg判断换后置USB口试激活提示授权已绑定UKey授权数受限或已绑定联系授权方确认并申请释放激活成功但重启后失效授权写入不完整重新激活并重启验证这张表我打印出来贴在了机房的调试台上现场遇到问题时同事先按表排查解决不了的再叫我。事实证明八成以上的问题都能在这张表里找到答案。5.2 批量部署的效率提升技巧几点实践经验不确定对不对但至少在我这次项目里是屡试不爽的。第一母盘封装前先打一个“验证快照”。在母盘刚刚装好系统、还没做清理的时候我习惯先用Ghost备份一个版本命名为“kylin-v10sp1-base.gho”。后面每次调整母盘内容装依赖、更新补丁重新备份的镜像以“kylin-v10sp1-日期.gho”命名。这样如果后期发现某个新加的驱动有副作用随时可以回到base版本重新做不用从零开始装系统。第二网刻环境一定要提前做两天准备。别等到批量还原当天才去搭GhostCast Server先把几台测试机用网刻跑一遍确认服务端带宽、目标机器网卡驱动都没问题。我们就是在测试时发现旧机器在网刻时特别容易断流后来给服务端限了速、换了交换机端口才算稳定。第三每台机器的初始化结果做记录。不用复杂的系统一个excel表格走天下记录机器编号、MAC地址、主机名、初始化时间、激活状态。表格更新别拖当天的记录当天完成不然第二天自己都记不清。第四UKey激活的小批量原则。不要试图一次插好几个UKey给同一台机器试也不要一次性把UKey发给多个同事交叉使用。每个负责人固定的UKey逐台使用避免UKey丢失或者授权被重复使用的风险。5.3 一点个人体会这次批量部署银河麒麟V10-SP1的经历给我的收获其实超出技术本身。以前做Windows系统批量部署Ghost、网刻、sysprep这些都轻车熟路总觉得Linux这套生态里没有“标准答案”。真正做完一遍才发现Linux下的克隆部署其实更加透明、可控。母盘封装、清理唯一标识、重装引导、逐台初始化每一步你都可以清楚知道系统正在发生什么不像Windows那样有太多黑盒机制。如果让我给后来者一句忠告我会说“把母盘当成交付产品来做。”母盘做得好后面的所有流程都顺母盘做得糙两百多台机器就是两百多次教训。宁可前期多花两三天打磨母盘、验证镜像也不要赶进度在两百多台机器上去试错。这个经验放之四海而皆准。
返回列表