Debian驱动程序备份与恢复
小樊
36
2025-12-10 18:38:07
Debian 驱动程序备份与恢复
一、核心思路
- 在 Debian 上,绝大多数驱动以 内核模块 或 固件包 的形式提供,并由 DKMS 在每次内核升级时自动重建。因此,驱动可被视为“由两部分组成”:
- 包管理器安装的驱动包与固件;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-image 与 linux-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 加载并测试。