🚀 忘记 qcow2 密码?一键重置 Linux/Windows 镜像配置全攻略 (2026 终极版)

在玩转私有云和虚拟化时,qcow2 镜像因其“秒级启动”和“极致空间利用”深受开发者喜爱。但由于这些镜像大多源自 Generic Cloud 版本,往往存在密码未知、固定 IP 连不上、或者克隆后 IP 冲突等痛点。

今天我们利用 fnOS(飞牛OS)+ Docker + libguestfs 组合拳,把镜像重置变成一项“标准化手术”。


一、 环境搭建:构建 Docker “手术室”

在 fnOS 宿主机上直接安装工具会污染系统。我们通过 Docker 容器封装所有复杂的 libguestfs 工具链。

1. 编写 docker-compose.yml

services:
  qcow2-fixer:
    image: debian:latest
    container_name: qcow2_tool
    privileged: true
    network_mode: host 
    volumes:
    # 这里放入您需要访问qcow2镜像位置
      - /vol1/1000/ISO/Linux/Debian/qcow2:/data
    command: sleep infinity

2. 初始化手术环境

sudo docker-compose up -d
sudo docker-compose exec qcow2-fixer bash

# 如果是国内网络访问较慢的,建议先换源 可以参考下面命令
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
# 容器内安装“手术刀”
apt update && apt install -y libguestfs-tools qemu-utils ntfs-3g chntpw
export LIBGUESTFS_BACKEND=direct

二、 方案一:Linux 镜像——深度初始化与通用适配

针对 Linux,我们不仅要改密码,还要解决“克隆机 IP 冲突”和“网卡名变动”的顽疾。

1. 执行重置命令 (通用匹配版)

**注意这里的您的Linux镜像.qcow2**要修改哦

virt-customize -a /data/您的Linux镜像.qcow2 \
  --root-password password:123456 \
  --hostname $(virt-inspector -a /data/您的Linux镜像.qcow2 --xpath "string(/operatingsystem/name)" | sed 's/./\U&/')$(virt-inspector -a /data/您的Linux镜像.qcow2 --xpath "string(/operatingsystem/major_version)")vm$(date +%Y%m%d) \
  --run-command "rm -f /etc/udev/rules.d/70-*" \
  --run-command "NIC=\$(ip -o link show | awk -F': ' '{print \$2}' | grep -v 'lo' | head -n1); \
    echo -e \"auto lo\niface lo inet loopback\nallow-hotplug \$NIC\niface \$NIC inet dhcp\" > /etc/network/interfaces" \
  --run-command "truncate -s 0 /etc/machine-id" \
  --run-command "systemd-machine-id-setup"

💡 核心知识点:神来之笔 machine-id

image-20260202030424962

为什么要执行 truncate -s 0 /etc/machine-id

很多开发者发现,克隆出来的 Linux 虚拟机即使修改了 MAC 地址,DHCP 仍然会给它们分配同一个 IP。这是因为系统根据 /etc/machine-id 生成 DUID。将其清空后,系统会在下次启动时生成全新的唯一 ID,彻底杜绝 IP 冲突。

这样就完成了!!!

image-20260202030628811


三、 方案二:Windows 镜像——手动与自动的双重保险

Windows 镜像修改最难点在于二进制的 SAM 数据库。

1. 自动注入法(推荐)

**注意这里的您的Linux镜像.qcow2**要修改哦

通过 管道符 (|) 机制,将指令预先“喂”给 chntpw。这样它在执行时会自动读取你的指令,完成“清除密码”和“启用账户”的操作。

# 1. 创建挂载点并挂载镜像
mkdir -p /mnt/win
guestmount -a /datawin/Windows-10-LTSC-cn.qcow2 -i --rw /mnt/win

# 2. 进入 SAM 目录
cd /mnt/win/Windows/System32/config/

# 3. 非交互式清除 Administrator 密码并激活账户
# 指令说明:1-清除密码,2-解锁/启用账户,q-退出用户编辑,y-保存更改
printf "1\n2\nq\ny\n" | chntpw -u Administrator SAM

# 4. 退出并安全卸载(必须执行,否则修改不生效)
cd / && guestunmount /mnt/win

2. 手动清除法(针对疑难杂症)

如果注入脚本失效,可以使用 chntpw 暴力破解:

  1. 挂载镜像guestmount -a /data/镜像.qcow2 -i --rw /mnt
  2. 定位 SAMcd /mnt/Windows/System32/config/ (注意 Windows 路径大小写)。
  3. 运行工具chntpw -u Administrator SAM
  4. 操作界面:输入 1 (Clear user password),然后输入 y 保存。
  5. 安全卸载cd / && guestunmount /mnt
  6. 注意:如果不卸载直接关闭容器,镜像极易损坏!

完美解决!!!!

image-20260202031951533


四、 常见坑点与避雷指南

坑点 现象 解决方案
磁盘锁 提示 NTFS partition is read-only 或挂载失败 Windows 开启了快速启动。在容器内执行ntfsfix /dev/sda2 (分区号按实际情况) 强制修复。
磁盘空间 virt-customize 执行报错 该工具在修改时会产生与镜像等大的临时文件。确保/tmp 或宿主机有足够剩余空间。
权限不足 提示 Permission Denied 确保 Docker 运行在--privileged 模式下,否则无法操作内核文件系统。

结语

通过这套方案,你可以将任何来源的 qcow2 镜像瞬间转化为符合个人规范的“黄金模板”。无论是家庭 NAS 实验室还是企业级开发环境,这都是一套极其高效的标准化流程。