统信UOS不提供驱动单独备份功能,需手动提取当前加载的内核模块(.ko文件)、对应固件、modprobe配置及硬件ID列表,并打包保存至外部存储。

统信UOS系统本身不提供“驱动程序单独备份”功能,因为驱动已深度集成于内核模块、固件文件与硬件抽象层中;若需在重装或迁移后快速恢复特定硬件(如显卡、网卡、声卡、打印机)的可用性,必须手动提取当前生效的驱动相关组件,并确保其可被新环境识别加载。以下操作均基于当前运行中的UOS系统,要求桌面环境正常、终端可用、目标设备已正确识别并工作。
提取当前生效的内核模块(.ko文件)
这一步捕获的是已加载到内存且正在工作的驱动模块二进制文件,例如nvidia.ko、r8169.ko、snd_hda_intel.ko等。它们位于/lib/modules/$(uname -r)/kernel/目录下,但不能直接复制整个目录——必须只提取实际被使用的模块,否则会混入大量无用或冲突模块。
执行命令:lsmod | awk 'NR>1 {print $1}' | xargs -I {} find /lib/modules/$(uname -r)/kernel -name "{}.ko" -type f 2>/dev/null
该命令输出所有当前加载模块的完整路径。将结果保存为列表文件:lsmod | awk 'NR>1 {print $1}' | xargs -I {} find /lib/modules/$(uname -r)/kernel -name "{}.ko" -type f 2>/dev/null > /tmp/active-drivers.list
创建专用备份目录并复制这些模块:mkdir -p /mnt/usb/uos-drivers-$(date +%Y%m%d); while read f; do [ -f "$f" ] && cp "$f" /mnt/usb/uos-drivers-$(date +%Y%m%d)/; done
导出配套固件(firmware)
很多驱动(尤其是无线网卡、蓝牙、GPU)依赖/lib/firmware/下的二进制固件才能启动。这些文件不随模块自动复制,遗漏会导致驱动加载失败。必须检查哪些固件正被使用,而非盲目打包整个/lib/firmware/。
执行命令:dmesg | grep -i "firmware\|loading" | grep -oE '/lib/firmware/[^[:space:]]+' | sort -u
该命令从内核日志中提取最近成功加载的固件路径,比遍历全目录更精准。若输出为空,说明当前无固件加载需求(如部分有线网卡),可跳过此步。
复制命中的固件文件:mkdir -p /mnt/usb/uos-drivers-$(date +%Y%m%d)/firmware; while read fw; do [ -f "$fw" ] && cp "$fw" /mnt/usb/uos-drivers-$(date +%Y%m%d)/firmware/; done
保存硬件配置与驱动参数
某些驱动需配合特定内核参数(如i915.alpha_support=1)、模块加载选项(如options snd_hda_intel model=auto)或udev规则才能正常工作。这些配置分散在多个位置,漏掉一条就可能导致设备失能。
第一步:导出/boot/grub/grub.cfg中生效的内核命令行参数(重点关注quiet splash后的驱动相关项):grep -oP 'linux.*?([^[:space:]]*drm|nvidia|radeon|i915|snd|usb|wifi)[^$]+' /boot/grub/grub.cfg | head -n 1 | sed 's/linux[[:space:]]*//'
第二步:提取/etc/modprobe.d/下所有含options或blacklist的配置文件:cp /etc/modprobe.d/*-*.conf /mnt/usb/uos-drivers-$(date +%Y%m%d)/modprobe-config/ 2>/dev/null || true
第三步:备份当前生效的udev硬件规则(仅备份匹配已识别设备的部分):udevadm info --export-db | grep -E '^(ID_VENDOR|ID_MODEL|DRIVER)=|SUBSYSTEM' | head -50 > /mnt/usb/uos-drivers-$(date +%Y%m%d)/hardware-id.log
【关键提醒】不要复制整个/etc/udev/rules.d/——其中大量规则与当前设备无关,强行应用可能干扰新系统启动。
验证驱动包完整性
进入备份目录,检查是否包含三类核心内容:ko模块、firmware文件、配置片段。缺一不可。
执行校验命令:cd /mnt/usb/uos-drivers-$(date +%Y%m%d) && echo "模块数:" $(find . -name "*.ko" | wc -l) && echo "固件数:" $(find ./firmware -type f 2>/dev/null | wc -l) && echo "配置文件数:" $(ls modprobe-config/ 2>/dev/null | wc -l)
若任一计数为0,说明对应环节未捕获到有效内容,需回溯前几步重新执行。
最后压缩打包:tar -czf uos-drivers-$(date +%Y%m%d).tar.gz uos-drivers-$(date +%Y%m%d)


















