KVM--libguestfs-tools工具介绍(九)

2022-06-07 18:17:57 浏览数 (1)

概述

libguestfs是一组使用于硬件虚拟化中旨在用于访问及修改磁盘映像的C语言库和配套工具。此工具可查看并编辑由libvirt所管理的虚拟机及其内部文件、为虚拟机撰写脚本、创建虚拟机等。

libguestfs几乎可访问任意类型的文件系统,包括:所有已知类型的Linux文件系统(ext2/3/4、XFS、btrfs等等)、任意类型的Windows 文件系统(VFAT及NTFS)、任意类型的macOS及BSD文件系统、LVM2卷宗管理、MBR及GPT磁盘分区、未格式化的硬盘、qcow2、VirtualBox VDI、VMWare VMDK、Hyper-V VHD/VHDX、文件、本地设备、CD/DVD ISO、SD卡或通过FTP、HTTP、SSH、iSCSI、NBD、GlusterFS、Ceph、Sheepdog等程序远程管理。libguestfs无需root权限。

libguestfs的功能由guestfish外壳(Shell)提供。若虚拟机无法启动,则可使用援救外壳virt-rescue进行修复。现有工具将普通的Unix命令作为样板使用,如工具virt-cat及virt-tar。

libguestfs-tools工具常用命令介绍

1,首先确认libguestfs-tools工具是否安装

代码语言:javascript复制
[root@kvm-node1 ~]# yum install libguestfs-tools
[root@kvm-node1 ~]# rpm -qa|grep libguestfs-tools
libguestfs-tools-1.40.2-10.el7.noarch
libguestfs-tools-c-1.40.2-10.el7.x86_64
[root@kvm-node1 ~]# 
[root@kvm-node1 ~]# vir
virsh                    virt-diff                virt-log                 virt-tail
virt-alignment-scan      virt-edit                virtlogd                 virt-tar-in
virt-builder             virt-filesystems         virt-ls                  virt-tar-out
virt-builder-repository  virt-format              virt-make-fs             virt-viewer
virt-cat                 virt-get-kernel          virt-manager             virt-what
virt-clone               virt-host-validate       virt-pki-validate        virt-win-reg
virt-copy-in             virt-index-validate      virt-rescue              virt-xml
virt-copy-out            virt-inspector           virt-resize              virt-xml-validate
virt-customize           virt-install             virt-sparsify            
virt-df                  virtlockd                virt-sysprep

命令格式:-d采用域名的方式,-a是直接获取磁盘文件方式

代码语言:javascript复制
virt-df  [--options] -d domname
virt-df [--options] -a disk.img [-a disk.img ...]

2,virt-cat命令,查看虚拟机内部文件,类似于cat(开关机都可以)

代码语言:javascript复制
[root@kvm-node1 ~]# virt-cat -d vm01 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

3,virt-edit命令,编辑虚拟机内部的文件,类似于vi编辑器(注意:虚拟机必须处于关机状态)

代码语言:javascript复制
[root@kvm-node1 ~]# virt-edit -d node01 /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

4,virt-df命令,查看虚拟机内部的磁盘使用情况,类似于df -h命令,(开关机都可以)

代码语言:javascript复制
[root@kvm-node1 ~]# virt-df -h vm01
Filesystem                                Size       Used  Available  Use%
vm01:/dev/sda1                            497M       146M       351M   30%
vm01:/dev/centos/root                      10G       1.7G       8.3G   18%
[root@kvm-node1 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 14    win10                          running
 34    vm01                           running
 -     node01                         shut off
 -     node02                         shut off
 -     node03                         shut off

5,virt-filesystems命令,也是查看磁盘的使用情况,和virt-df命令类似(开关机都可以)

代码语言:javascript复制
[root@kvm-node1 ~]# virt-filesystems  -d vm01
/dev/sda1
/dev/centos/root

6,virt-copy-out命令,直接复制虚拟机里面的磁盘文件到本地磁盘上,类似于cp命令,分为拷贝文件和拷贝目录:

代码语言:javascript复制
#拷贝虚拟机vm01中的磁盘文件到本地目录/opt下(拷贝文件)
[root@kvm-node1 ~]# virt-copy-out -d vm01 /etc/passwd   /opt   
#拷贝虚拟机vm01中的目录/opt目录到本地/opt下(拷贝目录)
[root@kvm-node1 ~]# virt-copy-out -d vm01 /opt   /opt      
#验证    
[root@kvm-node1 ~]# ls  /opt/
opt  passwd  rh

7,直接读取磁盘文件中的内容

代码语言:javascript复制
[root@kvm-node1 opt]# virt-copy-out -a /kvm/img/vm01.qcow2  /etc/sysconfig/network-scripts/ifcfg-ens3  /opt/111/
[root@kvm-node1 opt]# cat  /opt/111/ifcfg-ens3
# Generated by dracut initrd
NAME="ens3"
DEVICE="ens3"
ONBOOT=yes
NETBOOT=yes
UUID="40339ace-a4a9-4a8a-abf8-0b956713e628"
IPV6INIT=yes
BOOTPROTO=dhcp
TYPE=Ethernet

8,virt-copy-in命令,直接虚拟化平台上本地磁盘到虚拟机磁盘上,类似于cp (虚拟机必须处于关机状态,开机验证)

代码语言:javascript复制
[root@kvm-node1 opt]# virt-copy-in -d vm01 /opt/passwd  /mnt/
[root@kvm-node1 opt]# virsh start vm01
Domain vm01 started

登录虚拟机验证

代码语言:javascript复制
[root@kvm-node1 opt]#virsh  console  vm01 
[root@localhost mnt]# ls
passwd
[root@localhost mnt]# pwd
/mnt

如果出现报错:"/usr/bin/virt-copy-in: line 19: exec: guestfish: not found"原因是没有安装guestfish造成的,可以先安装执行此命令yum install guestfish -y

案例分享

kvm虚拟机忘记root密码、修改root密码

1、宿主机安装kvm管理工具libguestfs-tools

代码语言:javascript复制
yum install libguestfs-tools

2、查看宿主机上所有的kvm虚拟机

代码语言:javascript复制
virsh list --all

3、执行virt-edit命令需要停掉虚拟机

代码语言:javascript复制
virsh shutdown vm01

4、通过virt-edit命令可以直接在宿主机修改kvm虚拟机的 /etc/shadow文件,

代码语言:javascript复制
virt-edit vm01 /etc/shadow
  1. 替换密码串,密码串可以从已知密码的linux系统中复制替换
  2. openssl 生成密码

openssl passwd -1 -salt 'hello' '123456'

注意:"123456"不是密码而是密码的长度

5、重启kvm虚拟机验证密码

代码语言:javascript复制
virsh start vm01

0 人点赞