virsh

本文最后更新于:2023年12月5日 晚上

virsh 能实现的,virt-manger 都能实现

常用子命令:

help               # 打印基本帮助信息
attach-device      # 使用XML文件中的设备定义在虚拟机中添加设备
attach-disk        # 在虚拟机中附加新磁盘设备
attach-interface   # 在虚拟机中附加新网络接口
create             # 从 XML 配置文件生成虚拟机并启动新虚拟机
define             # 为虚拟机输出XML配置文件
destroy            # 强制虚拟机停止
detach-device      # 从虚拟机中分离设备,使用同样的XML 描述作为命令
attach-device
detach-disk        # 从虚拟机中分离磁盘设备
detach-interface   # 从虚拟机中分离网络接口
domblkstat         # 显示正在运行的虚拟机的块设备统计
domid              # 显示虚拟机ID
domifstat          # 显示正在运行的虚拟机的网络接口统计
dominfo            # 显示虚拟机信息
domname            # 显示虚拟机名称
domstate           # 显示虚以机状态
domuuid            # 显示虚拟机UUID
dumpxml            # 输出虚拟机 XML配置文件
list               # 列出所有虚拟机
migrate            # 将虚拟机迁移到另一台主机中
nodeinfo           # 有关管理程序的输出信息
quit               # 退出这个互动终端
reboot             # 重新启动虚拟机
restore            # 恢复以前保存在文件中的虚拟机
resume             # 恢复暂停的虚拟机
save               # 将虚拟机当前状态保存到某个文件中
setmaxmem          # 为管理程序设定内存上限
setmem             # 为虚拟机设定分配的内存
setvcpus           # 修改为虚拟机分配的虚拟CPU数目
shutdown           # 关闭某个虚拟机
start              # 启动未激活的虚拟机
suspend            # 暂停虚拟机
undefine           # 删除与虚拟机关联的所有文件
vcpupin            # 控制虚拟机的虚拟CPU亲和性
version            # 显示virsh版

查看帮助:

virsh help    # virsh帮助
virsh help COMMAND  # virsh子命令帮助

管理存储池

# virsh help pool

find-storage-pool-sources-as # 通过参数查找存储池源 find potential storage pool sources
find-storage-pool-sources  # 通过XML文档查找存储池源找到潜在存储池源
pool-autostart            # 自动启动某个池
pool-build             # 建立池
pool-create-as            # 在一组变量中定义池
pool-create             # 从一个XML文件中创建一个池
pool-define-as            # 从一组变量中创建一个池
pool-define            # 在一个XML文件中定义(但不启动)一个池或修改已经有池
pool-delete            # 删除池
pool-destroy              # 销毁(停止)池
pool-dumpxml               # 将池信息保存到XML文件中的
pool-edit              # 为存储池编辑XML配置
pool-info              # 存储池信息
pool-list              # 列出池
pool-name              # 把一个池名称转换为池UUID
pool-refresh              # 刷新池
pool-start             # 启动一个(以前定义的)非活跃的池
pool-undefine             # 取消定义一个不活跃的池
pool-uuid              # 将池UUID转换为池名称
pool-event                      # Storage Pool Events
pool-capabilities               # storage pool capabilities
# virsh help pool-create-as

virsh pool-create-as <name> <type> [OPTIONS]

每一个存储池都对应一个xml配置文件,其中的标签和下面的option都有对应
OPTIONS:
[--name] <string>        # 储存池名称
[--type] <string>        # 储存池类型
--print-xml        # 打印xml文档
--source-host <string>      # 底层存储的源主机
--source-path <string>      # 底层存储的源路径
--source-dev <string>       # 用于底层存储的源设备
--source-name <string>      # 底层存储的源名称
--target <string>        # 底层存储的目标
--source-format <string>      # 底层存储格式
--auth-type <string>       # 用于底层存储的认证类型
--auth-username <string>      # 用于底层存储的认证用户名
--secret-usage <string>      # 用于底层存储的认证秘密用法
--secret-uuid <string>      # 用于底层存储的秘密UUID
--adapter-name <string>      # 用于基础存储的适配器名称
--adapter-wwnn <string>      # 用于底层存储的适配器wwnn
--adapter-wwpn <string>      # 用于底层存储的适配器wwpn
--adapter-parent <string>      # 用于底层vHBA存储的适配器父scsi_hostN
--adapter-parent-wwnn <string>    # 用于底层vHBA存储的适配器父scsi_hostN wwnn
--adapter-parent-wwpn <string>    # 用于底层vHBA存储的适配器父scsi_hostN wwpn
--adapter-parent-fabric-wwn <string>   # 用于底层vHBA存储的适配器父scsi_hostN fabric_wwn
--source-protocol-ver <string>    # nfsvers值NFS储存池挂载选项
--build         # build the pool as normal
--no-overwrite        # do not overwrite any existing data
--no-overwrite        # overwrite any existing data

基于 dir 的 pool

# 1. 创建存储池 vm_images_dir
virsh pool-define-as vm_images_dir dir --target "/data/vm_images"
# 2. /data/vm_images目录如果没有提前创建,可以使用pool-build自动创建
virsh pool-build vm_images_dir
# 3. 启动存储池
virsh pool-start vm_images_dir
# 4. 设置存储池自动启动
virsh pool-autostart vm_images_dir
# 5. 停止存储池,删除之前必须先停止
virsh pool-destroy --pool vm_images_dir
# 6. 删除存储池
virsh pool-delete --pool vm_images_dir  # 删除数据
virsh pool-undefine --pool vm_images_dir # 删除配置

基于 fs 的 pool

基于已经创建文件系统的分区

# 1. 准备分区并创建文件系统
fdisk /dev/sdb
mkfs.ext4 /dev/sdb6
# 2. 准备存储池的挂载点目录,如果没有创建,创建存储池后执行`virsh pool-build vm_images_fs`会自动生成
mkdir /vm_images
# 3. 创建存储池 vm_images_fs
virsh pool-define-as vm_images_fs fs --source-dev "/dev/sdb6" --target "/vm_images"
 # --source-dev:块设备名
 # --target:mount到的目录名,libvirtd 会自动mount
# 4、5、6 启动、自动启动,停止、删除等操作所有类型的对于所有类型的存储池都一样,这里就不重复了

基于 disk 的 pool

# 1. 准备工作:确认/dev/sdb磁盘的格式为gpt
# 2. 创建存储池
virsh pool-define-as vm_images_disk disk --source-dev "/dev/sdb" --source-format gpt  --target "/dev"
# 或者直接编辑xml配置文件
<pool type='disk'>
 <name>vm_images_disk</name>
 <source>
  <device path='/dev/sdb'/>
  <format type='gpt'/>
 </source>
 <target>
  <path>/dev</path>
 </target>
</pool>
# 通过xml配置文件创建存储池
virsh pool-define vm_images_disk.xml

基于 LVM 的 pool

没有卷组,直接创建存储池:

virsh pool-define-as vm_images_lvm logical --source-dev=/dev/sdb
virsh pool-build vm_images_lvm

基于已有卷组,创建存储池(推荐):

virsh pool-define-as vm_images_lvm logical --source-name=vm_images_lvm

基于 NFS 的 pool

# 在宿主机执行:
virsh pool-define-as vm_images_nfs netfs \
--source-host 10.0.0.18 --source-path /data/kvmdata --target /data/vm_images_nfs

管理存储卷

# virsh help volume

vol-clone           # 克隆卷
vol-create-as       # 通过一组参数创建卷
vol-create          # 通过XML文件创建卷
vol-create-from     # 通过输入的其他卷创建—个新的卷
vol-delete          # 删除一个卷
vol-download        # 下载卷的内容到一个文件
vol-dumpxml         # 保存卷信息的信息到xML文件中
vol-info            # 存储卷的信息
vol-key          # 根据卷名或路径返回卷的key
vol-list            # 列出卷
vol-name            # 根据卷的key或路径返回卷名
vol-path            # 根据卷名或key返回卷的路径
vol-pool            # 根据卷的key或路径返回存储池
vol-resize          # 调整卷大小
vol-upload          # 上传文件内容到一个卷
vol-wipe            # wipe ─个卷
# virsh help vol-create-as

virsh vol-create-as <pool> <name> <capacity> [OPTIONS]

OPTIONS
[--pool] <string>  pool name
[--name] <string>  name of the volume
[--capacity] <string>  size of the vol, as scaled integer (default bytes)
--allocation <string>  initial allocation size, as scaled integer (default bytes)
--format <string>  file format type raw,bochs,qcow,qcow2,qed,vmdk
--backing-vol <string>  the backing volume if taking a snapshot
--backing-vol-format <string>  format of backing volume if taking a snapshot
--prealloc-metadata  preallocate metadata (for qcow2 instead of full allocation)
--print-xml      print XML document, but don't define/create

基于文件系统的存储池,创建其中的存储卷,可以使用 touchmkdirqemu-img create等命令,这些命令只能创建特定的存储卷,例如touch创建 raw 格式的文件,mkdir创建目录,qemu-img create创建磁盘镜像。

基于磁盘的存储池,创建其中的存储卷,也有对应命令,例如 disk 格式的存储池,使用fdisk创建分区;logical 格式的存储池,使用lvcreate,等等

virsh vol-create-as 配置项丰富,可以给各种类型的存储池,创建各种格式的存储卷,可以说相当于上述各种命令的合体

基于目录的 pool 的 volume 管理

# 新建
virsh vol-create-as vm_images_dir test1.qcow2 1g --format qcow2
# 删除
virsh vol-delete test1.qcow2 vm_images_dir

基于 LVM 的 pool 的 volume 管理

# 新建
virsh vol-create-as vm_images_lvm lvvol1 10g
# 删除
virsh vol-delete lvvol1 vm_images_lvm

克隆存储卷

克隆比直接 cp 复制文件要好

virsh vol-clone <vol> <newname> [--pool <string>] [--prealloc-metadata] [--reflink]

向虚拟机添加存储卷

virsh attach-disk <domain> <source> <target> [OPTIONS]

virsh attach-disk \
--domain centos7 --sourcetype block --source /dev/vm_images_lvm/lvvol1 --target vdb

virsh
http://blog.lujinkai.cn/运维/虚拟化和KVM/virsh/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议