📌 背景
在运维工作中,我们经常遇到虚拟机 root 密码遗忘或需要批量初始化密码的场景。对于 KVM/QEMU 虚拟化环境,virt-customize 是一个强大的离线修改虚拟机镜像的工具。本文记录了在麒麟操作系统(Kylin) 环境下使用 virt-customize 重置 root 密码的完整过程及踩坑经验。
| 项目 | 内容 |
|---|---|
| 宿主机操作系统 | 麒麟 Kylin V10 (aarch64) |
| 虚拟化技术 | KVM/QEMU (qcow2 格式) |
| 目标虚拟机 | 麒麟 Kylin V10 |
| 磁盘镜像 | disk-db.qcow2 |
| 工具 | virt-customize (libguestfs 套件) |
sudo yum install libguestfs-tools
可能遇到的问题: 提示 libguestfs 已安装,但 virt-customize 命令仍然找不到。
Package libguestfs-1:1.49.5-5.p01.ky11.aarch64 is already installed.
bash: virt-customize: command not found
在麒麟/红帽系系统中,virt-customize 通常被拆分到独立的子包中,需要额外安装:
sudo yum install libguestfs-tools-c
或
sudo yum install guestfs-tools
安装完成后验证:
virt-customize --version
virt-customize -a disk-db.qcow2 --root-password password:YourNewPassword
默认使用 MD5 加密,安全性较低,建议指定 SHA-512:
virt-customize -a disk-db.qcow2 \
--root-password password:YourNewPassword \
--password-crypto sha512
如果密码包含 $、% 等特殊字符,建议使用单引号包裹,防止被 shell 解析:
virt-customize -a disk-db.qcow2 --root-password 'password:YourNewP@$$w0rd'
执行过程中,命令长时间卡在以下步骤:
[ 21.2] SELinux relabelling
原因分析:
解决方法:
方法一:耐心等待
top 或 iostat 监控 CPU/IO 活动,确认是否仍在工作# 监控进程是否存活
ps aux | grep virt-customize
# 监控磁盘 IO
iostat -x 1
方法二:跳过 SELinux 重新标记(快速方案)
如果确认系统不需要 SELinux 或后续可以手动修复,可以跳过这一步:
virt-customize -a disk-db.qcow2 \
--root-password password:YourNewPassword \
--selinux-relabel false
方法三:使用后台运行避免终端中断
# 使用 screen
screen -S customize
virt-customize -a disk-db.qcow2 --root-password password:YourNewPassword
# Ctrl+A+D 切出,screen -r customize 重新接入
# 或使用 nohup
nohup virt-customize -a disk-db.qcow2 --root-password password:YourNewPassword > customize.log 2>&1 &
如果 virt-customize 因终端断开等原因中断,通常密码已经修改成功,只是 SELinux 标记未完成。此时可以:
touch /.autorelabel
reboot
重启后系统会自动完成 SELinux 重新标记。
启动虚拟机,使用重置后的密码登录 root:
ssh root@<虚拟机IP>
或通过 VNC/控制台直接登录。
# 1. 安装工具
sudo yum install libguestfs-tools-c
# 2. 重置密码(跳过 SELinux 以加速)
virt-customize -a /path/to/your-vm.qcow2 \
--root-password 'password:YourSecurePassword' \
--selinux-relabel false \
--password-crypto sha512
# 3. 验证修改
virt-customize -a /path/to/your-vm.qcow2 \
--run-command 'cat /etc/shadow | grep root'
| 注意事项 | 说明 |
|---|---|
| 虚拟机必须关机 | virt-customize 只能离线修改,正在运行的虚拟机不能操作 |
| 备份镜像 | 操作前建议备份原镜像,防止意外损坏 |
| 密码复杂度 | 生产环境建议使用强密码,注意特殊字符的转义 |
| SELinux 影响 | 跳过 SELinux 重新标记可能导致部分服务权限异常,建议事后处理 |
virt-customize 是 KVM 环境下非常实用的虚拟机定制工具,可以离线完成密码重置、软件安装、配置修改等操作。本文重点记录了在麒麟操作系统下的安装和密码重置过程,特别是 SELinux relabelling 卡顿问题的排查与解决。
核心经验:
libguestfs-tools-cscreen 或 nohup 避免终端中断导致任务失败📅 记录时间:2026年9月1日
🔧 适用环境:麒麟 Kylin V10 / CentOS / RHEL 系列
亲测有效,这样子就不用重新搞系统了,避免数据丢失


















