运维老鸟的私藏技巧:用Ventoy在Linux服务器上批量制作Windows安装盘
Linux服务器批量制作Windows安装盘的Ventoy高阶玩法
当你面对机房几十台需要重装系统的机器时,传统的一个U盘装一台电脑的方式简直是对生命的浪费。作为经历过数百次装机洗礼的老运维,我要分享一套在Linux服务器上批量制作Windows安装盘的终极方案——用Ventoy打造你的"装机军火库"。
1. 为什么Ventoy是运维人员的装机神器
在批量装机场景下,Ventoy的三个特性让它成为无可替代的工具:
- 多镜像共存:一个U盘可以存放Windows 10、Windows 11、不同版本的PE工具,甚至Linux安装镜像
- 无损更新:更换镜像只需简单拷贝ISO文件,无需反复格式化U盘
- BIOS/UEFI双支持:不再需要为不同启动模式准备不同的安装介质
更重要的是,Ventoy提供了完整的命令行接口,这让我们可以在无图形界面的Linux服务器上实现全自动化操作。想象一下:通过一个脚本同时为10个U盘写入安装镜像,还能自动集成公司内部的驱动包和配置脚本——这就是运维效率的质的飞跃。
2. 服务器环境准备与Ventoy安装
2.1 基础环境配置
在开始之前,确保你的Linux服务器满足以下条件:
- 已安装
util-linux包(包含lsblk等工具) - 有sudo权限的账户
- 系统版本为CentOS 7+或Debian 10+
# CentOS sudo yum install -y util-linux wget # Debian/Ubuntu sudo apt-get update && sudo apt-get install -y util-linux wget2.2 Ventoy命令行安装
我们将使用Ventoy的Linux CLI版本进行安装:
# 下载最新版Ventoy wget https://github.com/ventoy/Ventoy/releases/download/v1.0.91/ventoy-1.0.91-linux.tar.gz # 解压安装包 tar -zxvf ventoy-1.0.91-linux.tar.gz cd ventoy-1.0.913. 批量制作启动盘的进阶技巧
3.1 自动识别多U盘设备
当同时插入多个U盘时,使用以下脚本自动识别所有USB存储设备:
#!/bin/bash # 获取所有USB存储设备 devices=($(lsblk -d -o NAME,TRAN | grep usb | awk '{print "/dev/"$1}')) for device in "${devices[@]}"; do echo "正在处理设备: $device" sudo ./Ventoy2Disk.sh -i "$device" done重要提示:执行前请确认设备列表准确,错误的设备选择可能导致数据丢失
3.2 自动化部署ISO文件
制作好Ventoy启动盘后,我们需要批量部署Windows镜像和PE工具:
# 创建标准目录结构 ISO_DIR="/mnt/iso_repository" mkdir -p "$ISO_DIR"/{windows,pe,drivers} # 复制ISO文件到所有U盘 for mount_point in /media/*/Ventoy; do cp "$ISO_DIR"/windows/win11_22H2.iso "$mount_point" cp "$ISO_DIR"/pe/company_pe.iso "$mount_point" cp -r "$ISO_DIR"/drivers "$mount_point" done为提升效率,可以使用rsync代替cp:
rsync -avh --progress "$ISO_DIR"/windows/ /media/*/Ventoy/4. 企业级定制化方案
4.1 集成自动化安装脚本
在Ventoy的U盘中创建ventoy/ventoy.json配置文件,实现自动执行安装脚本:
{ "control": [ { "VTOY_DEFAULT_MENU_MODE": "0", "VTOY_TREE_VIEW_MENU_STYLE": "0", "VTOY_FILT_DOT_UNDERSCORE_FILE": "1", "VTOY_SORT_CASE_SENSITIVE": "0" } ], "auto_install": { "win11_22H2.iso": { "post_command": "/ventoy/scripts/auto_install.sh" } } }配套的auto_install.sh脚本示例:
#!/bin/bash # 自动分区 parted /dev/sda mklabel gpt parted /dev/sda mkpart primary ntfs 1MiB 100GiB parted /dev/sda set 1 boot on # 静默安装 setup.exe /autoinstall /quiet /noreboot4.2 驱动与软件预装方案
在PE环境中预装驱动和常用软件:
修改PE的ISO镜像,集成以下内容:
- 公司标准驱动包
- 必备软件安装包(Chrome、Office等)
- 安全基线配置脚本
使用
wimlib编辑Windows安装镜像:
# 挂载install.wim wimmountrw /sources/install.wim 1 /mnt/wim # 添加驱动 drvload /mnt/wim/inf/*.inf # 提交更改 wimunmount /mnt/wim --commit5. 运维流程集成与错误处理
5.1 与Ansible集成
将Ventoy制作流程整合到自动化运维平台:
- name: 制作Ventoy启动盘 hosts: jump_server tasks: - name: 下载Ventoy get_url: url: "https://github.com/ventoy/Ventoy/releases/download/v{{ ventoy_version }}/ventoy-{{ ventoy_version }}-linux.tar.gz" dest: "/tmp/ventoy.tar.gz" - name: 解压安装包 unarchive: src: "/tmp/ventoy.tar.gz" dest: "/opt/" remote_src: yes - name: 识别USB设备 shell: lsblk -d -o NAME,TRAN | grep usb | awk '{print "/dev/"$1}' register: usb_devices - name: 安装到U盘 shell: "/opt/ventoy/Ventoy2Disk.sh -i {{ item }}" with_items: "{{ usb_devices.stdout_lines }}"5.2 常见问题排查
问题1:U盘在部分机器上无法启动
解决方案:
- 检查Ventoy版本是否支持目标机器的启动模式(BIOS/UEFI)
- 尝试在Ventoy配置中切换不同的分区方案(GPT/MBR)
问题2:批量写入时部分U盘失败
解决方案:
# 增加重试机制 for device in "${devices[@]}"; do for i in {1..3}; do if sudo ./Ventoy2Disk.sh -i "$device"; then break fi echo "第$i次尝试失败,等待5秒后重试..." sleep 5 done done问题3:Windows安装过程中缺少驱动
解决方案:
- 在PE阶段预先注入驱动
- 修改Windows安装镜像集成必要驱动
这套方案在我们生产环境中已经稳定运行两年,累计制作超过3000个安装盘。最关键的技巧是:为每个U盘创建serial.txt文件记录硬件序列号,便于追踪装机情况。
