温馨提示×

CentOS驱动备份恢复

小樊
38
2025-12-15 17:37:03
栏目: 智能运维

CentOS 驱动备份与恢复实用指南

一、核心思路

  • Linux 内核模块(驱动)本质是文件,位于 /lib/modules/$(uname -r)/ 与对应的 initramfs 镜像中。备份驱动=备份当前内核模块与 initramfs,并保留安装包或 DKMS 配置;恢复=在新系统或新内核上还原模块与镜像,必要时用 DKMS 重建或重新安装厂商驱动。

二、快速备份步骤

  • 记录与导出当前内核与驱动清单
    • 内核版本:uname -r
    • 模块清单:lsmod > modules-$(uname -r).txt
    • 第三方驱动包清单(推荐):rpm -qa --qf ‘%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n’ | grep -Ei ‘kmod|dkms|nvidia|elrepo|akmod’ > rpm-drivers-$(uname -r).txt
  • 备份模块目录与 initramfs
    • 模块目录:tar czf modules-$(uname -r).tgz -C /lib/modules/$(uname -r) .
    • initramfs 镜像:先备份原镜像 mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak,再按需重建(见下文“恢复”)
  • 备份黑屏名单与关键配置
    • 黑名单:cp -a /etc/modprobe.d/blacklist.conf /backup/drivers/ 2>/dev/null || true*
    • 显卡相关(如 NVIDIA):cp -a /etc/X11/xorg.conf /etc/modprobe.d/nvidia.conf /backup/drivers/ 2>/dev/null || true*
  • 备份厂商驱动安装包与脚本
    • NVIDIA-Linux-*.run、ELRepo 的 kmod-*.rpm、或 DKMS 源码目录(如 /usr/src/nvidia-*)一并归档保存,便于离线恢复。

三、典型恢复场景与命令

  • 场景A:同版本内核重装或系统救援后恢复
    • 恢复模块:tar xzf modules-.tgz -C /lib/modules/
    • 重建 initramfs(确保包含必要驱动,如 RAID/SCSI/显卡):dracut -f /boot/initramfs-.img
    • 如曾定制黑名单或显卡配置,拷回并按需执行 dracut -f 再次生成镜像。
  • 场景B:内核升级后驱动“掉”(如 nvidia-smi 失败)
    • 优先用 DKMS 重建已注册模块(示例版本号以实际为准):dkms install -m nvidia -v 470.82.01
    • 若未注册 DKMS,使用厂商安装包重装,或先安装 dkms 再重建:yum install -y dkms
  • 场景C:initramfs 缺驱动导致无法识别磁盘/阵列
    • 将驱动加入 initramfs:编辑 /etc/dracut.conf 增加 add_drivers+=“mpt3sas”,然后重建;或一次性命令:dracut --force --add-drivers mpt3sas --kver=
    • 验证:lsinitrd -k | grep mpt,确认模块已打包进镜像后再重启。
  • 场景D:全新系统离线恢复(无网络)
    • 先准备本地仓库(ISO 或内网镜像),安装必要工具:yum install -y dkms gcc kernel-devel
    • 恢复模块与配置后,按场景 A/B/C 重建 initramfs 或 DKMS 重建;显卡驱动可用本地 .run 安装包执行。

四、关键注意事项

  • 驱动与内核强绑定:更换或升级内核后,旧驱动不会自动适配,需重建 initramfs 或用 DKMS 重建模块;NVIDIA 场景常见现象是 nvidia-smi 报错,可用 DKMS 快速恢复。
  • 不要仅备份 /boot:很多驱动在 /lib/modulesinitramfs 中;仅拷 vmlinuz/initramfs 不足以恢复驱动功能。
  • 离线环境准备:提前下载 kmod-.rpm / akmod-.rpm / NVIDIA 驱动 .run / dkms,并准备本地 yum 源或安装介质,避免恢复时依赖缺失。
  • 变更前后做验证:执行 lsinitrd -k | grep 检查模块是否进入 initramfs;执行 modinfo lsmod 检查加载状态;显卡可用 nvidia-smi 验证。

0