一、QM命令
这是创建和设置pve虚拟机配置的命令
因为参数差不多,所以就一起列出来。
首先看一个创建虚拟机的例子。
1 2 3 4 5 6 7 8 9
| qm create 114 \ --agent 1 \ --machine q35 \ --ostype l26 \ --scsihw virtio-scsi-pci \ --serial0 socket \ --cores 2 --sockets 1 --cpu host \ --bios seabios --boot cdn \ --net0 virtio,bridge=vmbr0
|
可以看到qm create命令格式是这样的
1 2
| qm create <vmid> --<option> <value> qm set <vmid> --<option> <value>
|
如果一个
例
1
| qm set 100 --net0 virtio,bridge=vmbr0,firewall=0
|
本篇文章也就是列出来 这个
(一)qm网络部分
1
| qm set/create 100 --net[n] [model] [,bridge=<bridge>] [,firewall=<1|0>] [,link_down=<1|0>] [,macaddr=<XX:XX:XX:XX:XX:XX>] [,queues=<integer>] [,rate=<number>] [,tag=<integer>] [,trunks=<vlanid[;vlanid...]>] [,<model>=<macaddr>]
|
举例
1 2
| qm set 100 --net0 virtio,bridge=vmbr0,firewall=0 意思是设置网卡0,类型为virtio,桥街道vmbr0。关闭防火墙。
|
参数说明
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
| --net[N] 这是一个option。N是整数,一般用序列。代表网卡序列
model 网卡类型。e1000 | e1000-82540em | e1000-82544gc | e1000-82545em | i82551 | i82557b | i82559er | ne2k_isa | ne2k_pci | pcnet | rtl8139 | virtio | vmxnet3 bridge=<bridge> bridge=vmbr[N].N代表桥接网卡的序号。 firewall=<1|0> 防火墙是否开启。值为1则开启,0为关闭
link_down=<1|0> 是否连接网卡,1为连接,0为端口。默认值为连接,所以一般不指定此项。 macaddr=<XX:XX:XX:XX:XX:XX> 指定网卡的MAC地址
rate=<number> 限速。单位mbps。一般不指定这项
tag=<integer>] VLAN 标签
trunks=<vlanid[;vlanid...]> trunk选项
<model>=<macaddr> 此项是model和mac的合集。可以不用上面的两个选项。直接这样设置。
|
在添加cloudinit之后,可以利用qm set命令指定ip
1 2 3 4 5 6 7
| qm set 100 --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1,ip6=dhcp 或者 qm set 100 --ipconfig0 ip=dhcp,ip6=dhcp 其中 ipconig<N>。N为网卡编号 设置dns qm set 100 --nameserver 114.114.114.114 qm set 100 --searchdomain 114.114.114.114
|
(二) create/set命令介绍
1、基本硬件环境
2.1 主板类型
1 2 3 4
| 简化 --machine q35|i440fx 完整 --machine (pc|pc(-i440fx)?-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|q35|pc-q35-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|virt(?:-\d+(\.\d+)+)?(\+pve\d+)?)
|
2.2 CPU
1 2 3 4 5
| --sockets <N> //几个物理插槽 --vcpus <N> //几个核心 --cpu <string> //CPU类型 host | kvm64 | qemu64 等等 --cpulimit <0-128> //CPU限制 --cpuunits <2-262144> //CPU权重
|
2.3 其他信息
1 2 3 4 5 6 7 8
| --bios seabios|ovmf //选择是哪种bios类型 --boot cdn //启动顺序。cdrom disk network --ostype //l24 | l26 | other | solaris | w2k | w2k3 | w2k8 | win10 | win7 | win8 | wvista | wxp (注意前两个 一个是linux 2.4内核 一个是linux2.6内核以上,所以是字母小写L,不是1) --agent 1 //开启qemu-guest-agent --name vmname //虚拟机名称 --scsihw virtio-scsi-pci | virtio-scsi-single | megasas | pvscsi | lsi53c810 |lsi //磁盘控制器类型 --serial<N> (/dev/.+|socket) //增加串口,N=0-3。一般指定串口0,类型为socket。此项对于需要串口情况非常有用,例如cloudinit。
|
2、硬盘参数
1 2 3 4 5
| --scsi<N> [pool]:[size] //其中N为scsi序号,从0开始。pool为储存池名称,例如local-lvm,[size]是硬盘大小,不需要指定磁盘名,系统创建。 例: qm create 100 --scsi0 local-lvm:40 创建虚拟机100,并且在local-lvm上创建一个40G的scsi磁盘。 --ide<N> [pool]:[size] //ide磁盘 --sata<N> [pool]:[size] //sata磁盘
|
1 2 3
| 例如: qm set 300 -virtio1 (或者-ide1、 -sata1 、-scsi1) test:300/vm-300-disk-0.qcow2 qm set 211 -scsi2 (或者-ide1、 -sata1 、-scsi1) ExtDisk:211/vm-211-disk-1.qcow2,size=300G
|
1 2 3 4 5 6
| 导入硬盘: qm importdisk 300 /root/test.img local-lvm --format raw qm importovf 300 /root/ros.ovf local-lvm --format qcow2
以上添加ros.ovf文件后,需要在gui后者cli命令行中将磁盘attch为ide,然后还需要降入mode以及serial参数,如下: ,model=VMware%20Virtual%20IDE%20Hard%20Drive,serial=00000000000000000001 这样做的目的是为了破解ros
|
如果只有vmdk文件没有ovf文件,那么只能先创建虚拟机,然后通过qm importdisk 300 /root/test.vmdk local-lvm来将vmdk磁盘导入到虚拟机中。qm importdisk后,在/etc/pve/qemu-server/vmidx.conf配置文件下-unused0:local-lvm:vm-300-disk-4这样的方式呈现,需要在web gui中attach下,或者干脆在命令行中直接指定qm set 300 -virtio3:local-lvm/vm-300-disk-4,size=100M
3、cloud-init
cloudinit常用于公有云中。
需要虚拟机有cloud drive
1 2
| #创建cloud drive qm set 100 --ide2 local-lvm:cloudinit //注意,cloudinit的ide必须大于2。应该是bug吧。
|
设置cloudinit基本属性
1 2 3
| qm set 100 --sshkey ~/.ssh/id_rsa.pub //设置ssh qm set 100 --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1 //设置ip qm set 100 --cipassword:foxi123456 --ciuser:root //设置用户和密码。注意密码在设置之后,会自动隐藏。
|
当然既然是cloudinit,就和openstak接轨。
同样支持自定义cloudinit参数。
1 2 3 4 5 6
| 引号里的,可以单独指定一项。指定了哪个部分就会覆盖上面的基本属性。 qm set 9000 --cicustom "user=<volume>,network=<volume>,meta=<volume>" 例如指定了user环节的参数,那么上面的user属性就失效,根据自定义参数来。 qm set 9000 --cicustom "user=local:snippets/userconfig.yaml" 这里官方是建议用户把yaml文件放在snippets文件夹下。 yaml必须符合cloudinit规范和语法规范
|
官方提供的cloud-init,user模块只有用户账密模块。可以自己修改脚本文件,添加新的选项,例如package-Update-Upgrade-Install模块。让cloudinit开机自动安装升级程序。
1 2 3 4 5 6 7 8 9 10 11 12
| z修改脚本文件 cp /usr/share/perl5/PVE/QemuServer/Cloudinit.pm /usr/share/perl5/PVE/QemuServer/Cloudinit.pm_backup nano /usr/share/perl5/PVE/QemuServer/Cloudinit.pm
在cloudinit_userdata部分,return $content;之前 添加内容
$content .= "packages: \n"; $content .= " - qemu-guest-agent\n"; return $content; } 修改之后,重启服务器。即可生效
|
暂时就这些内容。建议参照vm的配置文件自己研究下。
下面贴出一个样式,。
1 2 3 4 5 6 7 8 9 10 11 12
| qm create 110 \ --agent 1 \ --machine q35 \ --ostype l26 \ --scsihw virtio-scsi-pci \ --serial0 socket \ --cores 2 --sockets 1 --cpu host \ --bios seabios --boot cdn \ --net0 virtio,bridge=vmbr0 \ --ide2 nvme1:cloudinit \ --name qmcreate \ --cipassword foxi123456 --ciuser root
|
在官方wiki。可以查看更多的详细内容。
https://pve.proxmox.com/pve-docs/qm.1.html
关于cloudinit模块,可以参考。注意切换版本号。
https://cloudinit.readthedocs.io/en/latest/index.html