系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 系统教程 > Linux教程 > 详细页面

虚拟化技术之kvm虚拟机创建工具virt-install

时间:2020-08-18来源:www.pcxitongcheng.com作者:电脑系统城

在前边的博客中,我们创建KVM虚拟机用到了virt-manager,这个工具是一个图形化工具,创建虚拟机很方便;除此我们还是用virsh define/create +虚拟机配置文件来创建虚拟机,这种方式是通过配置文件的方式,我们把定义虚拟机的信息写成一个.xml格式的描述文件,然后使用virsh这个工具来读取配置文件,从而根据我们定义的配置文件创建虚拟机;今天我们来了解下直接在命令行使用virt-install命令的方式来创建虚拟机;

  1、virt-install的帮助信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
[root@node1 ~]# virt-install -h
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]
 
从指定安装源创建新虚拟机。
 
optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --connect URI         通过 libvirt URI 连接到虚拟机管理程序
 
通用选项:
  -n NAME, --name NAME  客户机实例名称
  --memory MEMORY       Configure guest memory allocation. Ex:
                        --memory 1024 (in MiB)
                        --memory 512,maxmemory=1024
                        --memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2
  --vcpus VCPUS         Number of vcpus to configure for your guest. Ex:
                        --vcpus 5
                        --vcpus 5,maxvcpus=10,cpuset=1-4,6,8
                        --vcpus sockets=2,cores=4,threads=2
  --cpu CPU             CPU model and features. Ex:
                        --cpu coreduo,+x2apic
                        --cpu host-passthrough
                        --cpu host
  --metadata METADATA   配置客户机元数据。例如:
                        --metadata name=foo,title="My pretty title",uuid=...
                        --metadata description="My nice long description"
 
安装方法选项:
  --cdrom CDROM         光驱安装介质
  -l LOCATION, --location LOCATION
                        安装源 (例如:nfs:host:/path, http://host/path,
                        ftp://host/path)
  --pxe                 使用 PXE 协议从网络引导
  --import              在已有的磁盘镜像中构建客户机
  --livecd              将光驱介质视为 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        将附加参数添加到由 --location
                        引导的内核中
  --initrd-inject INITRD_INJECT
                        添加指定文件到由 --location 指定的 initrd
                        根中
  --os-variant DISTRO_VARIANT
                        在客户机上安装的操作系统,例如:'fedor
                        a18'、'rhel6'、'winxp' 等。
  --boot BOOT           配置客户机引导设置。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (针对容器)
  --idmap IDMAP         为 LXC 容器启用用户名称空间。例如:
                        --idmap uid_start=0,uid_target=1000,uid_count=10
 
设备选项:
  --disk DISK           指定存储的各种选项。例如:
                        --disk size=10 (在默认位置创建 10GiB 镜像)
                        --disk /my/existing/disk,cache=none
                        --disk device=cdrom,bus=scsi
                        --disk=?
  -w NETWORK, --network NETWORK
                        配置客户机网络接口。例如:
                        --network bridge=mybr0
                        --network network=my_libvirt_virtual_net
                        --network network=mynet,model=virtio,mac=00:11...
                        --network none
                        --network help
  --graphics GRAPHICS   配置客户机显示设置。例如:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja
  --controller CONTROLLER
                        配置客户机控制器设备。例如:
                        --controller type=usb,model=ich9-ehci1
  --input INPUT         配置客户机输入设备。例如:
                        --input tablet
                        --input keyboard,bus=usb
  --serial SERIAL       配置客户机串口设备
  --parallel PARALLEL   配置客户机并口设备
  --channel CHANNEL     配置客户机通信通道
  --console CONSOLE     配置文本控制台连接主机与客户机
  --hostdev HOSTDEV     配置物理 USB/PCI 等主机设备与客户机共享
  --filesystem FILESYSTEM
                        传递主机目录到客户机。例如:
                        --filesystem /my/source/dir,/dir/in/guest
                        --filesystem template_name,/,type=template
  --sound [SOUND]       配置客户机声音设备仿真
  --watchdog WATCHDOG   配置客户机 watchdog 设备
  --video VIDEO         配置客户机视频硬件。
  --smartcard SMARTCARD
                        配置客户机智能卡设备。例如:
                        --smartcard mode=passthrough
  --redirdev REDIRDEV   配置客户机重定向设备。例如:
                        --redirdev usb,type=tcp,server=192.168.1.1:4000
  --memballoon MEMBALLOON
                        配置客户机 memballoon 设备。例如:
                        --memballoon model=virtio
  --tpm TPM             配置客户机 TPM 设备。例如:
                        --tpm /dev/tpm
  --rng RNG             Configure a guest RNG device. Ex:
                        --rng /dev/urandom
  --panic PANIC         配置客户机 panic 设备。例如:
                        --panic default
  --memdev MEMDEV       Configure a guest memory device. Ex:
                        --memdev dimm,target_size=1024
 
客户机配置选项:
  --security SECURITY   设置域安全驱动配置。
  --cputune CPUTUNE     Tune CPU parameters for the domain process.
  --numatune NUMATUNE   为域进程调整 NUMA 策略。
  --memtune MEMTUNE     为域进程调整内存策略。
  --blkiotune BLKIOTUNE
                        为域进程调整 blkio 策略。
  --memorybacking MEMORYBACKING
                        为域进程设置内存后备策略。例如:
                        --memorybacking hugepages=on
  --features FEATURES   设置域 <features> XML。例如:
                        --features acpi=off
                        --features apic=on,eoi=on
  --clock CLOCK         设置域 <clock> XML。例如:
                        --clock offset=localtime,rtc_tickpolicy=catchup
  --pm PM               配置 VM 电源管理功能
  --events EVENTS       配置 VM 生命周期管理策略
  --resource RESOURCE   配置 VM 资源分区(cgroups)
  --sysinfo SYSINFO     Configure SMBIOS System Information. Ex:
                        --sysinfo emulate
                        --sysinfo host
                        --sysinfo bios_vendor=Vendor_Inc.,bios_version=1.2.3-abc,...
                        --sysinfo system_manufacturer=System_Corp.,system_product=Computer,...
                        --sysinfo baseBoard_manufacturer=Baseboard_Corp.,baseBoard_product=Motherboard,...
  --qemu-commandline QEMU_COMMANDLINE
                        Pass arguments directly to the qemu emulator. Ex:
                        --qemu-commandline='-display gtk,gl=on'
                        --qemu-commandline env=DISPLAY=:0.1
 
虚拟化平台选项:
  -v, --hvm             这个客户机应该是一个全虚拟化客户机
  -p, --paravirt        这个客户机应该是一个半虚拟化客户机
  --container           这个客户机应该是一个容器客户机
  --virt-type HV_TYPE   要使用的管理程序名称 (kvm, qemu, xen, ...)
  --arch ARCH           模拟 CPU 架构
  --machine MACHINE     机器类型为仿真类型
 
其它选项:
  --autostart           主机启动时自动启动域。
  --transient           Create a transient domain.
  --wait WAIT           请等待数分钟以便完成安装。
  --noautoconsole       不要自动尝试连接到客户端控制台
  --noreboot            安装完成后不启动客户机。
  --print-xml [XMLONLY]
                        打印生成的 XML 域,而不是创建客户机。
  --dry-run             运行安装程序,但不创建设备或定义客户
                        机。
  --check CHECK         启用或禁用验证检查。例如:
                        --check path_in_use=off
                        --check all=off
  -q, --quiet           抑制非错误输出
  -d, --debug           输入故障排除信息
 
使用 '--option=?' 或 '--option help' 来查看可用的子选项
请参考 man 手册,以便了解示例和完整的选项语法。
[root@node1 ~]#

  提示:如果要查看某一个选项的子选项,可以使用选项加?或者选项加--help来查看,如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@node1 ~]# virt-install   --memorybacking ?
--memorybacking options:
  clearxml
  hugepages
  locked
  nodeset
  nosharepages
  size
  unit
 
[root@node1 ~]# virt-install   --memorybacking help
--memorybacking options:
  clearxml
  hugepages
  locked
  nodeset
  nosharepages
  size
  unit
 
[root@node1 ~]#

  2、创建一个虚拟机

  2.1、上传一个镜像到宿主机

1
2
3
4
5
6
7
8
9
10
11
[root@node1 ~]# cd /kvm/iso/
[root@node1 iso]# ls
[root@node1 iso]# rz
rz waiting to receive.
 zmodem trl+C ȡ
 
  100%  811008 KB 26161 KB/s 00:00:31       0 Errors-1708.iso...
 
[root@node1 iso]# ls
CentOS-7-x86_64-Minimal-1708.iso
[root@node1 iso]#

  提示:建议把镜像单独放在一个目录下;

  2.2、创建磁盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node1 iso]# cd
[root@node1 ~]# cd /kvm/images/
[root@node1 images]# ls
c1.qcow2  c2.qcow2  c3.qcow2  cirros-0.5.0-x86_64-disk.img
[root@node1 images]# qemu-img create -f qcow2 ./centos7.qcow2 10G
Formatting './centos7.qcow2'fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
[root@node1 images]# ll
总用量 41989476
-rw-r--r-- 1 root root      197120 8月  15 13:23 c1.qcow2
-rw------- 1 qemu qemu 21478375424 8月  18 13:07 c2.qcow2
-rw------- 1 root root 21478375424 8月  17 00:23 c3.qcow2
-rw-r--r-- 1 root root      197120 8月  18 13:08 centos7.qcow2
-rw-r--r-- 1 qemu qemu    40108032 8月  18 13:01 cirros-0.5.0-x86_64-disk.img
[root@node1 images]#

  提示:创建磁盘可以使用-o preallocation来指定磁盘分配策略,它支持 off, metadata, falloc, full,其中off表示不预分配(默认不指定就是这个),metadate,表示分配元素据信息,falloc表示随文件的增大而增大,full表示全部分配;

  2.3、创建虚拟机,并指定使用我们刚才上传的镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node1 images]# virt-install --virt-type kvm --name c7 --ram 1024 --vcpus 2 --cdrom=/kvm/iso/CentOS-7-x86_64-Minimal-1708.iso --disk path=/kvm/images/centos7.qcow2 --network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
 
开始安装......
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
[root@node1 images]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 1     generic                        running
 2     c2                             running
 3     centos7.0                      running
 4     c7                             running
 
[root@node1 images]#

  提示:--virt-type用来指定虚拟机类型,--name用来指定创建的虚拟机名称,--ram 用于指定内存大小 --vcpus用于指定虚拟cpu核心数量 --cdrom用于指定关盘镜像文件位置 --disk path用于指定磁盘路径,--network用于指定网络名称 --graphics用于指定虚拟图形显卡,--noaustart用于指定不随宿主机启动而启动;到此虚拟机就创建好了,接下来我们需要用图像软件VNC或者virt-manager连接到虚拟机的控制台界面进行安装系统操作;

  3、使用vnc连接虚拟机安装操作系统

  3.1、查看宿主机上的监听端口情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@node1 images]# ss -tnl
State      Recv-Q Send-Q          Local Address:Port                         Peer Address:Port             
LISTEN     0      1                           *:5903                                    *:*                 
LISTEN     0      128                         *:111                                     *:*                 
LISTEN     0      5               192.168.122.1:53                                      *:*                 
LISTEN     0      128                         *:22                                      *:*                 
LISTEN     0      128                 127.0.0.1:631                                     *:*                 
LISTEN     0      100                 127.0.0.1:25                                      *:*                 
LISTEN     0      128                 127.0.0.1:5900                                    *:*                 
LISTEN     0      128                 127.0.0.1:5901                                    *:*                 
LISTEN     0      128                 127.0.0.1:5902                                    *:*                 
LISTEN     0      128                        :::111                                    :::*                 
LISTEN     0      128                        :::22                                     :::*                 
LISTEN     0      128                       ::1:631                                    :::*                 
LISTEN     0      100                       ::1:25                                     :::*                 
[root@node1 images]#

  提示:默认情况vnc的第一个虚拟显示器(窗口)监听在5900这个端口,第二个窗口监听5901,依次类推;从上面的信息可以看到,我们宿主机上有4个vnc窗口,我们最后创建的虚拟机应该是第四个窗口,监听在5903这个端口;

  3.2、使用VNC连接宿主机的5903端口

  提示:使用tightvnc viewer连接宿主机上的非第一个窗口需要在后面用双冒号+端口的方式来连接指定窗口;如果是第一个窗口直接写宿主机的ip地址即可;这里需要注意一点,用virsh或virt-manager创建的虚拟机,默认它是把vnc监听在127.0.0.1上,所以用外部的vnc软件是无法正常连接进去的;

  提示:至此我们就可以安装虚拟机操作了,安装完成后重启即可;安装系统的过程就不过多演示了;

  3.3、创建windows系统虚拟机

  virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率,windows 系统需要单独安装virtio驱动,linux系统自带virtio驱动。

  3.3.1、创建目录,并下载virtio驱动(根据安装的windos版本架构下载驱动)下载地址https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@node1 kvm]# ls
images  iso
[root@node1 kvm]# mkdir virtio
[root@node1 kvm]# cd virtio
[root@node1 virtio]# wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win_amd64.vfd
--2020-08-18 13:58:51--  https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win_amd64.vfd
正在解析主机 fedorapeople.org (fedorapeople.org)... 152.19.134.199, 2610:28:3090:3001:5054:ff:fea7:9474
正在连接 fedorapeople.org (fedorapeople.org)|152.19.134.199|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win-0.1.96_amd64.vfd [跟随至新的 URL]
--2020-08-18 13:58:54--  https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.96/virtio-win-0.1.96_amd64.vfd
再次使用存在的到 fedorapeople.org:443 的连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2949120 (2.8M) [application/x-troff-man]
正在保存至: “virtio-win_amd64.vfd”
 
100%[====================================================================>] 2,949,120   8.04KB/s 用时 6m 8s 
 
2020-08-18 14:05:03 (7.83 KB/s) - 已保存 “virtio-win_amd64.vfd” [2949120/2949120])
 
[root@node1 virtio]# ls
virtio-win_amd64.vfd
[root@node1 virtio]# pwd
/kvm/virtio
[root@node1 virtio]#

  3.3.2、上传镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node1 images]# cd ../iso/
[root@node1 iso]# ls
CentOS-7-x86_64-Minimal-1708.iso
[root@node1 iso]# rz
rz waiting to receive.
 zmodem trl+C ȡ
 
  100% 3189038 KB 27025 KB/s 00:01:58       0 Errors_with_sp1_x64_dvd_u_677685.iso...
 
[root@node1 iso]# ll
总用量 4000048
-rw-r--r-- 1 qemu qemu  830472192 2月  22 2018 CentOS-7-x86_64-Minimal-1708.iso
-rw-r--r-- 1 root root 3265574912 3月   6 2018 cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso
[root@node1 iso]#

  3.3.3、创建磁盘

1
2
3
4
5
6
[root@node1 iso]# cd ../virtio/
[root@node1 virtio]# qemu-img create -f qcow2 /kvm/images/win7.qcow2 50G
Formatting '/kvm/images/win7.qcow2'fmt=qcow2 size=53687091200 encryption=off cluster_size=65536 lazy_refcounts=off
[root@node1 virtio]# ls /kvm/images/win7.qcow2
/kvm/images/win7.qcow2
[root@node1 virtio]#

  3.3.4、创建虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@node1 virtio]# virt-install --virt-type kvm --name win7 --ram 1024 --vcpus=2 --os-type=windows --cdrom=/kvm/iso/cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso --disk path=/kvm/images/win7.qcow2,format=qcow2,bus=virtio --disk path=/kvm/virtio/virtio-win_amd64.vfd,device=floppy --network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 
 
开始安装......
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
[root@node1 virtio]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 1     win7                           running
 -     c2                             关闭
 -     c7                             关闭
 -     centos7.0                      关闭
 -     generic                        关闭
 
[root@node1 virtio]# ss -tnl
State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port             
LISTEN      0      1                         *:5900                                  *:*                 
LISTEN      0      128                       *:111                                   *:*                 
LISTEN      0      5             192.168.122.1:53                                    *:*                 
LISTEN      0      128                       *:22                                    *:*                 
LISTEN      0      128               127.0.0.1:631                                   *:*                 
LISTEN      0      100               127.0.0.1:25                                    *:*                 
LISTEN      0      128                      :::111                                  :::*                 
LISTEN      0      128                      :::22                                   :::*                 
LISTEN      0      128                     ::1:631                                  :::*                 
LISTEN      0      100                     ::1:25                                   :::*                 
[root@node1 virtio]#

   提示:可以看到虚拟机已经创建好了,并跑起来了,对应vnc5900端口也处于监听状态;

  3.3.5、用vnc连接虚拟机控制台,安装系统

 

  提示:这个根据自己安装的系统来选就可以了;

  提示:如果能够把我们创建的磁盘识别到,说明我们的驱动选择是正确的,否则你需要更改驱动;

  提示:等这个安装完成后重启,windows系统就装到我们创建的虚拟机上了;需要注意一点这个界面重启,虚拟机不会自动启动,需要我们手动的去启动虚拟机,才能下面的安装,安装完成后如下图所示;

  到此基于virt-install工具在命令行创建windows虚拟机,结合vnc连接到虚拟机上安装操作系统的过程就结束了;其实在生产中,我们更本不会这样用,因为生产上用的虚拟机数量往往很大,用人为手动的方式去安装显然是不行的;我们可以借助自动化工具pxe+kickstart 或者使用cobbler配合这些自动化安装系统的工具来安装系统,我们只需要使用脚本把创建虚拟机的命令写好,创建好网络配置好网络,磁盘创建命令写好,一个脚本我们可以批量创建很多台虚拟机;有关pxe服务器和cobbler服务器的搭建,

分享到:

相关信息

  • linux 文件权限怎么解析

    常用权限linux系统内有档案有三种身份 u:拥有者 g:群组 o:其他人这些身份对于文档常用的有下面权限:r:读权限,用户可以读取文档的内容,如用cat,more查看w:写权限,用户可以编辑文档x...

    2024-07-07

  • 如何使用WPSeku找出 WordPress 安全问题?

    然而,如果我们遵循通常的 WordPress 最佳实践,这些安全问题可以避免。在本篇中,我们会向你展示如何使用 WPSeku,一个 Linux 中的 WordPress 漏洞扫描器,它可以被用来找出你安装...

    2024-07-03

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载