温馨提示×

Debian驱动程序备份与恢复

小樊
36
2025-12-10 18:38:07
栏目: 智能运维

Debian 驱动程序备份与恢复

一、核心思路

  • Debian 上,绝大多数驱动以 内核模块固件包 的形式提供,并由 DKMS 在每次内核升级时自动重建。因此,驱动可被视为“由两部分组成”:
    1. 包管理器安装的驱动包与固件;2) DKMS 模块源码与当前内核的构建产物。备份与恢复的重点就是这两类资产与当前运行内核的对应关系。

二、备份清单与获取方法

  • 驱动包与固件清单
    • 生成已安装驱动相关包清单:
      • 仅含“固件/驱动”相关包:
        dpkg -l | grep -E ‘firmware|driver|wl|b43|bcm|nvidia|amdgpu|intel-microcode|linux-modules|linux-headers’ | awk ‘{print $2}’ | sort -u > driver-packages.txt
      • 全量包清单(便于在新系统完整复现):
        dpkg --get-selections > pkglist-full.txt
  • DKMS 模块与构建物
    • 查看已注册的 DKMS 模块:dkms status
    • 备份 DKMS 源码树与当前构建物(默认在 /usr/src//var/lib/dkms/):
      sudo tar czf dkms-backup-$(date +%F).tar.gz /usr/src/-dkms /var/lib/dkms/
  • 当前内核与头文件信息
    • 记录以便恢复时对齐版本:uname -r,并备份对应头文件包名:linux-headers-$(uname -r)
  • 第三方驱动与专有模块
    • 若曾手动编译(如 Broadcom b43/bcmwl、部分 Realtek 驱动、NVIDIA 官方.run 等),保留其 源码目录 与安装说明;NVIDIA 可额外备份当前配置:nvidia-smi -q > nvidia-info.txt
  • 可选:系统快照
    • 使用 Timeshift(基于 rsync 或 Btrfs)做系统级快照,可连同驱动配置与模块一起回滚到某一时间点(适合桌面与服务器)。

三、恢复步骤

  • 准备环境
    • 恢复前先确保系统可联网并更新索引:sudo apt update;若计划切回旧内核,先安装对应 linux-imagelinux-headers(可从快照或备份的包清单中获知版本)。
  • 恢复驱动包与固件
    • 从全量清单恢复:sudo dpkg --set-selections < pkglist-full.txt && sudo apt dselect-upgrade
    • 或按“驱动清单”逐条安装:cat driver-packages.txt | xargs sudo apt install -y
  • 恢复 DKMS 模块
    • 解压备份:sudo tar xzf dkms-backup-*.tar.gz -C /
    • 重新注册并构建当前内核模块:
      sudo dkms autoinstall -k $(uname -r)
      sudo dkms build -m <模块名> -v <版本> -k $(uname -r)
      sudo dkms install -m <模块名> -v <版本> -k $(uname -r)
  • 处理专有/第三方驱动
    • 进入保留的源码目录,按原 README 执行(常见为 make && sudo make install 或 ./autorun.sh);NVIDIA 可使用官方安装器或 apt 版本,完成后执行 sudo nvidia-smi 验证。
  • 回滚系统快照(如使用了 Timeshift)
    • 启动到恢复环境,打开 Timeshift,选择目标快照并执行恢复;恢复后重启并验证模块加载情况。

四、自动化与验证

  • 自动化备份脚本示例(备份包清单与 DKMS)
    • 示例脚本 backup-drivers.sh:
      #!/usr/bin/env bash
      set -e
      OUT=/backup/drivers-$(date +%F)
      mkdir -p “$OUT”
      dpkg -l | grep -E ‘firmware|driver|wl|b43|bcm|nvidia|amdgpu|intel-microcode|linux-modules|linux-headers’ | awk ‘{print $2}’ | sort -u > “$OUT/driver-packages.txt”
      dpkg --get-selections > “$OUT/pkglist-full.txt”
      tar czf “$OUT/dkms-backup-$(date +%F).tar.gz” /usr/src/-dkms /var/lib/dkms/
      echo “Saved to $OUT”
    • 定时执行(每天 02:00):
      echo “0 2 * * * /path/backup-drivers.sh” | sudo tee /etc/cron.d/backup-drivers
  • 验证要点
    • 驱动是否加载:lsmod | grep <模块名>;必要时 dmesg | tail -n 50 查看内核日志
    • 固件是否到位:dmesg | grep -i firmware
    • 专有驱动状态:如 NVIDIA 执行 nvidia-smi;网卡可用 ip a、iwconfig 或 lspci -nnk 检查对应驱动绑定。

五、常见问题与建议

  • DKMS 模块未随新内核自动构建
    • 确认已安装对应 linux-headers-$(uname -r) 与构建工具(如 build-essential),再执行 dkms autoinstall -k $(uname -r)。
  • 专有驱动与内核升级不兼容
    • 优先使用发行版仓库提供的驱动包;若必须手动安装,务必保留源码与安装步骤,并在升级前备份;出现问题可切回旧内核或快照恢复。
  • 无线网卡驱动缺失
    • 先确认型号:lspci -nn | grep -i net;常见如 Intel 安装 firmware-iwlwifi,Broadcom 视型号选择 b43/bcmwl 等,再 modprobe 加载并测试。

0