关于PVE(Proxmox VE)的Windows虚拟机忘了密码怎么办

· 默认分类

偶然间我一个朋友pve的Windows虚拟机密码忘了 问我有没有方法解决。
有的,有的兄弟。这样的方法有三种,今天教一种,方法如下:
准备工作
停止虚拟机

确保目标虚拟机处于停止状态:

qm stop <虚拟机ID>

安装必要的工具

安装 chntpw 工具:

apt install chntpw

开启nbd

modprobe nbd max_part=8

定位虚拟机的 .qcow2 文件
.qcow2 是虚拟机磁盘的主要存储文件格式。以下是定位该文件的方法:

查看虚拟机配置

通过以下命令查看虚拟机的磁盘路径:

qm config <虚拟机ID>

检查存储池路径

方法1:进入存储池目录,查找 .qcow2 文件:

ls /mnt/pve/<存储名称>/images/<虚拟机ID>/

例如:

ls /mnt/pve/nvme/images/206/

方法2:简单粗暴直接 find

比如说你找 206 的 qcow2 文件,直接输入:

find / -name "vm-206-disk-0.qcow2" 2>/dev/null

创建快照(重要!)
创建快照

使用以下命令创建一个虚拟机快照:

qm snapshot <虚拟机ID> reset_password_snapshot

验证快照

列出虚拟机的快照,确保快照已成功创建:

qm listsnapshots <虚拟机ID>

如果需要恢复快照,可以使用以下命令:

qm rollback <虚拟机ID> reset_password_snapshot

挂载和修改 SAM 文件
使用 QEMU-NBD 挂载磁盘

将虚拟机的磁盘文件挂载到本地系统:

qemu-nbd -c /dev/nbd0 /mnt/pve/<存储名称>/images/<虚拟机ID>/vm-<虚拟机ID>-disk-0.qcow2

检查分区信息

确认分区表正确无误:

fdisk -l /dev/nbd0

挂载 NTFS 分区

创建挂载点并尝试挂载 NTFS 分区为读写模式:

mkdir /mnt/windows
mount -o rw /dev/nbd0p1 /mnt/windows

启动虚拟机并测试登录
编辑 SAM 文件

进入 Windows 系统目录并备份原始 SAM 文件:

cd /mnt/windows/Windows/System32/config
cp SAM SAM.bak

使用 chntpw 编辑 SAM 文件:

chntpw -i SAM

卸载分区并断开 NBD 设备

完成操作后卸载分区并断开 NBD 设备:

umount /mnt/windows
qemu-nbd -d /dev/nbd0

启动虚拟机

启动虚拟机以验证修改是否成功:

qm start <虚拟机ID>

正常情况下到这里就结束了

*如果碰到只读挂载的情况
强制挂载为读写模式*

尝试强制挂载为读写模式:

mount -o remount,rw /mnt/windows

检查文件系统错误

如果仍然无法挂载为读写模式,可能是文件系统存在错误。使用 ntfsfix 修复文件系统:

ntfsfix /dev/nbd0p1

再次尝试挂载

重新挂载分区为读写模式:

mount -o rw /dev/nbd0p1 /mnt/windows