如何在Linux上使用virt-sysprep重置KVM克隆虚拟机
时间:2020-01-09 10:43:14 来源:igfitidea点击:
我知道如何克隆KVM VM。
克隆后,如何重置克隆的VM。
如何重置,取消配置或者自定义虚拟机,以便进行克隆?
如何在基于Linux服务器的虚拟机管理程序上使用virt-sysprep命令重置KVM克隆虚拟机?
说明:您需要使用virt-sysprep命令来重置虚拟机。
您可以删除ssh密钥,主机名,网络mac配置,用户帐户等。
您可以启用或者禁用特定功能。
本教程显示如何一起使用virt-clone和virt-sysprep命令在基于Linux的服务器上克隆KVM VM。
使用virt-sysprep命令重置KVM克隆虚拟机的语法
语法为:
virt-sysprep -d kvmDomain virt-sysprep -d kvmDomainHere options
在KVM VM上执行以重置它的sysprep操作列表
abrt-data | 删除ABRT生成的崩溃数据 |
backup-files | 从来宾中删除编辑器备份文件 |
bash-history | 删除来宾中的bash历史记录 |
blkid-tab | 移除访客中的blkid标签 |
ca-certificates | 移除来宾中的CA证书 |
crash-data | 除去kexec-tools生成的崩溃数据 |
cron-spool | 删除用户在职和cron-jobs |
customize | 自定义访客 |
dhcp-client-state | 除去DHCP客户端租约 |
dhcp-server-state | 除去DHCP服务器租用 |
dovecot-data | 删除Dovecot(邮件服务器)数据 |
firewall-rules | 删除防火墙规则 |
flag-reconfiguration | 标记系统以进行重新配置 |
fs-uuids | 更改文件系统UUID |
kerberos-data | 除去来宾中的Kerberos数据 |
logfiles | 从访客中删除许多日志文件 |
lvm-uuids | 更改LVM2 PV和VG UUID |
machine-id | 删除本地计算机ID |
mail-spool | 从本地邮件假脱机目录中删除电子邮件 |
net-hostname | 除去网络接口配置中的HOSTNAME和DHCP_HOSTNAME |
net-hwaddr | 除去HWADDR(硬编码的MAC地址)配置 |
pacct-log | 删除进程记帐日志文件 |
package-manager-cache | 删除软件包管理器缓存 |
pam-data | 删除来宾中的PAM数据 |
passwd-backups | 除去/etc/passwd-和类似的备份文件 |
puppet-data-log | 删除puppet的数据和日志文件 |
rh-subscription-manager | 删除RH订阅管理器文件 |
rhn-systemid | 除去RHN系统ID |
rpm-db | 除去主机特定的RPM数据库文件 |
samba-db-log | 除去Samba的数据库和日志文件 |
script | 对访客运行任意脚本 |
smolt-uuid | 除去Smolt硬件UUID |
ssh-hostkeys | 除去来宾中的SSH主机密钥 |
ssh-userdir | 除去来宾中的.ssh目录 |
sssd-db-log | 除去sssd的数据库和日志文件 |
tmp-files | 删除临时文件 |
udev-persistent-net | 删除udev持久网络规则 |
user-account | 删除来宾中的用户帐户 |
utmp | 删除utmp文件 |
yum-uuid | 删除yum UUID |
您可以选择要执行的sysprep操作。
给出一个逗号分隔的操作列表,例如:
virt-sysprep -d {vmDomainHere} --enable ssh-hostkeys,udev-persistent-net
步骤1.克隆您的VM并在KVM中产生新实例
首先使用virsh list命令获取所有正在运行的VM域/来宾的列表:
virsh list
输出示例:
1 openbsd62 running 2 freebsd11-theitroad running 3 fedora28-theitroad running 4 rhel7 running 5 centos7-theitroad running 6 sles12sp3 running 16 bionic running
首先挂起KVM,运行:
virsh suspend bionic Domain bionic suspended
要使用virt-clone命令将名为bionic的虚拟机克隆为testvm,请运行:
virt-clone --original bionic --name testvm --auto-clone
您可以指定磁盘文件而不是--auto-clone
选项:
# virt-clone --original bionicVM --name testVM02 --file /var/lib/libvirt/images/testvm02-disk01.qcow2
您可以恢复仿生虚拟机,运行:
virsh resume bionic Domain bionic resumed
第2步。使用virt-sysprep命令
只需运行以下命令即可重置所有内容:
virt-sysprep -d testvm
您可以设置来宾的主机名,并强制将名为Hyman的用户帐户保留在来宾中:
virt-sysprep -d testvm --hostname testvm --enable user-account --keep-user-accounts Hyman
您可以创建一个名为tom的新Linux用户帐户,并在首次登录时强制更改密码,如下所示:
virt-sysprep -d testvm --firstboot-command 'useradd -s /bin/bash -m -G sudo tom; chage -d 0 tom'
您也可以设置root用户帐户密码:
virt-sysprep -d testvm --root-password password:MySuperSecureRootPasswordHere
或者合并所有这些:
virt-sysprep -d testvm --hostname testvm --keep-user-accounts Hyman --root-password password:MySuperSecureRootPasswordHere
如何跳过某些来宾VM重置功能
您可以使用--enable启用特定的操作。
例如,启用除重置fs-uuids(更改文件系统UUID),lvm-uuids(更改LVM2 PV和VG UUIDs)和ssh-userdir(在来宾中删除.ssh目录)以外的所有选项:
w=$(virt-sysprep --list-operations | egrep -v 'fs-uuids|lvm-uuids|ssh-userdir' | awk '{ printf "%s,", }' | sed 's/,$//') echo "$w"
现在,如下运行:
virt-sysprep -d testvm --hostname testvm --keep-user-accounts Hyman --enable $w
另一个例子:
virt-sysprep -d testvm --hostname testvm --keep-user-accounts Hyman --enable $w --firstboot-command 'dpkg-reconfigure openssh-server'
virt-sysprep命令列表选项
-a, --add <file> Add disk image file --append-line <FILE:LINE> Append line(s) to the file -c, --connect <uri> Set libvirt URI --chmod <PERMISSIONS:FILE> Change the permissions of a file --color, --colors, --colour, --colours Use ANSI colour sequences even if not tty --commands-from-file <FILENAME> Read customize commands from file --copy <SOURCE:DEST> Copy files in disk image --copy-in <LOCALPATH:REMOTEDIR> Copy local files or directories into image -d, --domain <domain> Set libvirt guest name --delete <PATH> Delete a file or directory -n, --dryrun, --dry-run Perform a dry run --echo-keys Don't turn off echo for passphrases --edit <FILE:EXPR> Edit file using Perl expression --enable <operations> Enable specific operations --firstboot <SCRIPT> Run script at first guest boot --firstboot-command <'CMD+ARGS'> Run command at first guest boot --firstboot-install <PKG,PKG..> Add package(s) to install at first boot --format <format> Set format (default: auto) --help Display brief help --hostname <HOSTNAME> Set the hostname --install <PKG,PKG..> Add package(s) to install --keep-user-accounts <users> Users to keep --keys-from-stdin Read passphrases from stdin --link <TARGET:LINK[:LINK..]> Create symbolic links --list-operations List supported operations --mkdir <DIR> Create a directory --mount-options <opts> Set mount options (eg /:noatime;/var:rw,noatime) --move <SOURCE:DEST> Move files in disk image --network Enable appliance network --no-logfile Scrub build log file --no-network Disable appliance network (default) --no-selinux-relabel Compatibility option, does nothing --operation, --operations <operations> Enable/disable specific operations --password <USER:SELECTOR> Set user password --password-crypto <md5|sha256|sha512> Set password crypto -q, --quiet Don't print progress messages --remove-user-accounts <users> Users to remove --root-password <SELECTOR> Set root password --run <SCRIPT> Run script in disk image --run-command <'CMD+ARGS'> Run command in disk image --script <script> Script or program to run on guest --scriptdir <dir> Mount point on host --scrub <FILE> Scrub a file --selinux-relabel Relabel files with correct SELinux labels --sm-attach <SELECTOR> Attach to a subscription-manager pool --sm-credentials <SELECTOR> Credentials for subscription-manager --sm-register Register using subscription-manager --sm-remove Remove all the subscriptions --sm-unregister Unregister using subscription-manager --ssh-inject <USER[:SELECTOR]> Inject a public key into the guest --timezone <TIMEZONE> Set the default timezone --touch <FILE> Run touch on a file --truncate <FILE> Truncate a file to zero size --truncate-recursive <PATH> Recursively truncate all files in directory --uninstall <PKG,PKG..> Uninstall package(s) --update Update packages --upload <FILE:DEST> Upload local file to destination -V, --version Display version and exit -v, --verbose Enable libguestfs debugging messages --write <FILE:CONTENT> Write file -x Enable tracing of libguestfs calls
步骤3.启动VM
virsh start testvm Domain testvm started
使用以下virsh命令验证它:
virsh list
步骤4.登录到VM
使用以下命令以及grep命令查找/获取testvm的DHCP IP地址:
virsh net-dhcp-leases default virsh net-dhcp-leases default | grep testvm virsh net-dhcp-leases default | grep testvm | awk '{ print }'
输出示例:
192.168.122.174/24
使用ssh命令:
ssh [email protected]