Linux下DNF本地仓库与NFS共享服务配置指南

发布时间:2026/7/25 7:37:46

Linux下DNF本地仓库与NFS共享服务配置指南 1. 项目背景与核心价值在Linux系统运维工作中软件包管理和文件共享是两个高频需求场景。DNF作为新一代RPM包管理工具相比传统的YUM在性能、依赖解析和内存占用方面都有显著提升。而NFSNetwork File System作为Unix/Linux生态中最成熟的文件共享方案至今仍是跨服务器文件共享的首选方案之一。这个实操指南将手把手带你完成两个关键任务配置本地DNF仓库解决内网环境下的软件包管理难题部署NFS共享服务实现跨主机的文件系统共享特别说明本文基于CentOS 8/RHEL 8环境验证但核心方法同样适用于其他RPM系发行版。所有操作均需root权限执行。2. 本地DNF仓库配置全流程2.1 基础环境准备首先确认系统已安装createrepo工具包dnf install -y createrepo准备仓库存储目录建议使用独立分区mkdir -p /var/repo/local chmod -R 755 /var/repo/local2.2 仓库数据收集与处理获取软件包的三种典型方式从官方镜像站下载完整仓库rsync -avz --delete rsync://mirror.example.com/centos/8/BaseOS/x86_64/os/Packages/ /var/repo/local/从已安装系统提取RPM包rpm -qa | xargs rpm -ql | grep \.rpm$ | xargs -I {} cp {} /var/repo/local/手动下载特定软件包dnf download --destdir/var/repo/local/ httpd nginx创建仓库元数据createrepo -v /var/repo/local/2.3 仓库配置文件详解创建仓库定义文件cat /etc/yum.repos.d/local.repo EOF [local] nameLocal Repository baseurlfile:///var/repo/local enabled1 gpgcheck0 priority1 EOF关键参数说明priority1设置最高优先级优先从本地仓库查找gpgcheck0禁用GPG验证生产环境建议开启baseurl支持http/ftp协议实现网络共享2.4 仓库维护与更新定期同步脚本示例#!/bin/bash REPO_DIR/var/repo/local LOG_FILE/var/log/repo_sync.log rsync -avz --delete rsync://mirror.example.com/centos/8/BaseOS/x86_64/os/Packages/ $REPO_DIR $LOG_FILE 21 createrepo --update $REPO_DIR $LOG_FILE 21设置cron定时任务0 3 * * * /usr/local/bin/repo_sync.sh3. NFS服务部署实战3.1 服务端配置安装必要软件包dnf install -y nfs-utils创建共享目录并设置权限mkdir -p /shared/data chown nobody:nobody /shared/data chmod 1777 /shared/data # 粘滞位防止用户删除他人文件配置exports文件cat /etc/exports EOF /shared/data 192.168.1.0/24(rw,sync,no_root_squash) EOF参数说明rw读写权限sync同步写入no_root_squash允许root用户保持权限启动服务systemctl enable --now nfs-server firewall-cmd --permanent --add-servicenfs firewall-cmd --reload3.2 客户端配置安装客户端工具dnf install -y nfs-utils创建挂载点mkdir -p /mnt/nfs/data手动挂载测试mount -t nfs 192.168.1.100:/shared/data /mnt/nfs/data配置fstab实现开机挂载echo 192.168.1.100:/shared/data /mnt/nfs/data nfs defaults,_netdev 0 0 /etc/fstab重要提示_netdev选项确保网络就绪后再挂载4. 性能调优与问题排查4.1 NFS性能优化参数服务端调整echo RPCNFSDCOUNT16 /etc/sysconfig/nfs systemctl restart nfs-server客户端挂载参数优化mount -t nfs -o rsize65536,wsize65536,hard,intr,noatime,nodiratime 192.168.1.100:/shared/data /mnt/nfs/data推荐参数组合参数说明推荐值rsize/wsize读写缓冲区大小65536hard保持重试直到成功必选intr允许中断挂起的IO必选noatime不更新访问时间推荐nodiratime不更新目录访问时间推荐4.2 常见问题排查指南问题1DNF无法找到本地仓库包检查仓库元数据是否生成ls /var/repo/local/repodata/验证仓库配置优先级dnf repolist -v问题2NFS挂载失败检查服务状态rpcinfo -p 192.168.1.100验证导出列表showmount -e 192.168.1.100排查防火墙规则firewall-cmd --list-all问题3NFS写入性能差检查网络延迟ping -c 5 192.168.1.100测试磁盘IOfio --filename/mnt/nfs/data/test --size1G --direct1 --rwrandrw --bs4k --ioenginelibaio --iodepth256 --runtime120 --numjobs4 --time_based --group_reporting --nameiops-test-job --eta-newline15. 安全加固建议5.1 DNF仓库安全启用GPG签名验证gpg --gen-key gpg --export -a RPM-GPG-KEY-local rpm --import RPM-GPG-KEY-local在repo配置中启用检查gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-local5.2 NFS安全加固限制访问范围# /etc/exports /shared/data 192.168.1.50(rw) 192.168.1.51(ro)启用NFSv4加密# 服务端 echo SECURE_NFSyes /etc/sysconfig/nfs # 客户端 mount -t nfs4 -o seckrb5p server:/share /mnt使用防火墙限制firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.1.0/24 service namenfs accept6. 扩展应用场景6.1 自动化部署集成将DNF仓库与CI/CD流水线集成# Jenkins Pipeline示例 stage(Build RPM) { sh rpmbuild -ba specfile.spec sh cp ~/rpmbuild/RPMS/x86_64/*.rpm /var/repo/local/ sh createrepo --update /var/repo/local/ }6.2 多节点NFS集群使用DRBDHeartbeat实现高可用NFS在两台服务器上安装DRBDdnf install -y drbd kmod-drbd配置资源文件resource r0 { protocol C; disk /dev/sdb1; meta-disk internal; on node1 { address 192.168.1.101:7788; } on node2 { address 192.168.1.102:7788; } }配置Heartbeat浮动IP# /etc/ha.d/haresources node1 IPaddr::192.168.1.100/24/eth0 nfs-kernel-server7. 监控与维护7.1 DNF仓库监控设置仓库健康检查脚本#!/bin/bash REPO_URLfile:///var/repo/local STATUS$(curl -sI $REPO_URL/repodata/repomd.xml | head -n1 | cut -d -f2) if [ $STATUS ! 200 ]; then logger -t DNF_REPO Repository check failed, regenerating metadata createrepo --update /var/repo/local/ fi7.2 NFS性能监控使用nfsstat工具nfsstat -c # 客户端统计 nfsstat -s # 服务端统计配置Prometheus监控# prometheus.yml scrape_configs: - job_name: nfs static_configs: - targets: [192.168.1.100:9100]8. 实际应用中的经验分享批量安装时的仓库优化 在同时有大量主机需要从本地仓库安装软件时建议使用lighttpd或nginx提供HTTP访问设置keepalive_timeout延长连接保持增加worker_processes提升并发能力NFS写性能瓶颈突破 当遇到大量小文件写入时客户端挂载添加noac选项禁用属性缓存服务端调整nfsd线程数echo RPCNFSDCOUNT32 /etc/sysconfig/nfs使用async写入模式需权衡数据安全混合环境兼容方案 在同时存在CentOS 7/8的环境中为不同系统版本创建子目录/var/repo/local/centos7 /var/repo/local/centos8使用releasever变量动态选择baseurlhttp://repo.example.com/centos/$releasever/local存储后端选型建议对于频繁读写的NFS共享优先考虑SSD存储使用LVM快照定期备份考虑cephFS替代传统NFS故障转移实战技巧 当NFS服务器需要维护时# 客户端优雅卸载 umount -fl /mnt/nfs/data # 临时重定向到备用服务器 mount -t nfs 192.168.1.101:/shared/data /mnt/nfs/data

相关新闻