内网环境下的生存指南:CentOS 7.7离线部署LVM2全攻略
当你面对一台完全隔离的内网服务器,手头仅有一张CentOS 7.7的安装镜像,却急需部署LVM2来管理磁盘时,这种困境想必让不少运维同行头疼过。不同于常规环境下简单的yum install就能解决问题,内网环境下的软件安装更像是一场精心策划的"物资补给"行动——你需要先建立自己的"后勤基地"(本地yum源),然后精确计算"补给线"(依赖关系),最后才能完成"物资投送"(rpm安装)。本文将带你完整走通这条技术路线,从ISO镜像到可用的LVM2工具链,解决那些连官方文档都未必提及的实操细节。
1. 建立本地作战基地:从ISO镜像创建完整yum源
任何离线环境下的软件安装,第一步都是建立可靠的本地软件仓库。CentOS的ISO镜像虽然包含了基础软件包,但默认配置可能无法满足所有需求。以下是打造坚固"后勤基地"的关键步骤:
首先挂载ISO镜像,这个操作看似简单却有几个易错点:
mkdir -p /mnt/centos-iso mount -o loop /path/to/CentOS-7.7-x86_64-Everything.iso /mnt/centos-iso注意:必须使用Everything版本的ISO,Minimal版会缺少关键软件包。如果只有Minimal镜像,后续步骤将无法进行。
接着创建本地repo配置文件:
cat > /etc/yum.repos.d/local.repo <<EOF [local] name=Local CentOS baseurl=file:///mnt/centos-iso enabled=1 gpgcheck=0 EOF验证仓库是否可用时,不要直接用yum list这种宽泛命令,而是应该:
yum --disablerepo="*" --enablerepo="local" list available | wc -l这个数字应该大于5000,否则说明ISO内容不完整。我曾在一个客户现场发现他们"完整"的镜像实际只有3000多个包,导致后续步骤全部失败。
2. 破解LVM2安装难题:依赖关系的精确制导
即使配置了本地yum源,直接安装LVM2仍可能失败。这时候需要采用"外科手术式"的精准打击策略:
2.1 建立模拟环境收集情报
在内网外搭建同架构的CentOS 7.7虚拟机,这是最安全的依赖包采集方案。关键命令组合:
mkdir /tmp/lvm2-pkgs yum install --downloadonly --downloaddir=/tmp/lvm2-pkgs lvm2 device-mapper device-mapper-libs重要技巧:添加--disableexcludes=all参数可以绕过某些奇怪的包排除规则,这在处理老旧系统时特别有用。
收集到的包通常包括但不限于:
- lvm2-2.02.187-6.el7.x86_64.rpm
- device-mapper-1.02.170-6.el7.x86_64.rpm
- device-mapper-libs-1.02.170-6.el7.x86_64.rpm
- libaio-0.3.109-13.el7.x86_64.rpm
2.2 依赖分析的军火清单
使用以下命令生成完整的依赖树:
repoquery --requires --resolve lvm2 | sort -u典型输出会显示:
device-mapper >= 1.02.97 device-mapper-libs = 1.02.170-6.el7 libblkid.so.1()(64bit) libc.so.6()(64bit) ...将依赖包传输到内网时,务必保持目录结构不变。我习惯用以下命令打包:
tar -czvf lvm2-bundle.tar.gz -C /tmp/lvm2-pkgs .而不是简单的*通配符,这样可以避免隐藏文件丢失。
3. 敌后渗透安装:rpm的战术应用
在内网服务器上,常规的rpm -ivh可能会遇到各种依赖错误。这时候需要采用特殊战术:
3.1 分级安装策略
不要一次性安装所有rpm,而是按以下顺序:
rpm -ivh device-mapper-libs-*.rpm rpm -ivh device-mapper-*.rpm rpm -ivh lvm2-*.rpm --nodeps --force实战经验:即使加了--nodeps,先安装基础依赖也能减少后期问题。曾经有个案例因为跳过device-mapper-libs直接强制安装LVM2,导致系统启动时dm模块加载失败。
3.2 安装后验证要点
不要仅满足于rpm -qa | grep lvm2,完整的验收测试应该包括:
# 检查关键工具链 which pvcreate vgcreate lvcreate # 验证内核模块 lsmod | grep dm_mod # 实际创建测试卷 echo -e 'n\np\n1\n\n\nt\n8e\nw' | fdisk /dev/sdb pvcreate /dev/sdb1 vgcreate test_vg /dev/sdb1 lvcreate -L 1G -n test_lv test_vg如果这些命令都能执行,说明LVM2已完全就绪。记得最后用vgremove和pvremove清理测试环境。
4. 应急预案:当标准流程失效时的备用方案
即使按照上述步骤操作,仍可能遇到各种意外。以下是几个常见问题的解决方案:
4.1 依赖包版本冲突
当出现file /usr/lib64/libdevmapper.so.1.02 from install of device-mapper-1.02.170-6.el7.x86_64 conflicts with file from package device-mapper-7:1.02.149-10.el7.x86_64这类错误时,需要先降级现有包:
rpm -e --nodeps device-mapper-1.02.149-10.el74.2 内核模块加载失败
如果lsmod看不到dm_mod,尝试手动加载:
modprobe dm_mod depmod -a dracut --force然后重启系统。我在一台华为服务器上遇到过这个问题,原因是内核头文件不匹配。
4.3 创建本地代理仓库
如果有另一台能访问外网的CentOS服务器,可以搭建简易代理仓库:
# 在外网服务器上 yum install createrepo httpd mkdir -p /var/www/html/centos/7/os/x86_64 rsync -avrt rsync://mirror.centos.org/centos/7/os/x86_64/ /var/www/html/centos/7/os/x86_64 createrepo /var/www/html/centos/7/os/x86_64 systemctl start httpd # 在内网服务器上配置repo时改用http地址 baseurl=http://proxy-server/centos/7/os/x86_64这套方案虽然准备过程稍显复杂,但一旦建立起来,后续所有软件安装都会变得轻而易举。就像在荒野中建立了永久据点,之后的"物资补给"就变成了例行公事。