为 Proxmox VE 上的 Windows 虚拟机系统盘扩容

这个步骤实际上十分简单, 关闭虚拟机后,进入 PVE 主机命令行运行

# qemu-img resize image.qcow2 +size

然后启动 Windows 虚拟机,运行 diskmgmt.msc 或者鼠标进入磁盘管理,右键点击 C: 盘,然后选择扩展,就完成了 Windows 系统盘的扩展。

用 qemu-nbd 命令 rescue Proxmox 下的 vm

一台 Ubuntu VM 修改了 vgname,启动不了了。 在 Proxmox 主机上,用以下命令挂接 VM 的磁盘:

# qm show 122 --pretty|grep drive // 查看 vmid=122 的磁盘路径
# modprobe nbd
# qemu-nbd -c /dev/nbd0 /mnt/pve/vmpool/images/122/vm-122-disk-0.qcow2
# fdisk -l // 验证 nbd 盘已经可以看到
# mount /dev/mapper/xingyun02-root /mnt
# chroot /mnt 

以上步骤就进入虚拟机根文件系统,直接可以对虚拟机操作了。 之后 umount , qemu-nbd -d ,然后 qm restart 120 就可以启动虚拟机了。

[How to] 怎样把 Proxmox 主机上的 USB 设备映射到虚拟机内

参考: https://pve.proxmox.com/wiki/USB_physical_port_mapping

把 USB 设备插入 PVE 主机后, dmesg 可以看到

假定虚拟机 ID 为 120,修改虚拟机配置文件: /etc/pve/qemu-server/120.conf,添加:

usb0: host=1-1.1.4

主机上 # qm stop 120; sleep 3; qm start 120 // 不是 qm restart
Ubuntu 的虚拟机内,默认 Kernel 没有 usbserial 模块,需要

sudo apt-get install linux-image-extra-virtual
sudo reboot
lsmod|grep usbserial
ls -al /dev/ttyUSB0

Proxmox VE 命令行大全 CLI Cheatsheet

说大全,其实根本就不是。 如果你通过搜索来到这篇文章一定是 Google 或者某度发挥了作用。 各个功能之间用颜色区块分开显示,有利于阅读。For better reading we are using different color block for different functions.

Proxmox 绝对是个好东东,每天在操作有很多问题,希望能积累在这篇文章里,给后来者借鉴. This will be an Biligual post for non-Chinese users to read as well.

命令行下进入虚拟机的控制台, Enter into VM console through PVE command line.
# qm terminal VMID
用 Ctr-o 退出, Use Ctr-o to exit the VM console.

查看存储上的卷,Check volumns on storage.
# pvesm list STORAGE_NAME
查看指定的存储状态,Check status of a specific storage
# pvesm status -storage STORAGE_NAME
不指定 -storage 时,显示当前节点上的所有存储

在线升级 Proxmox VE 6.0 集群到 6.1

首先确认删除企业版订阅的源文件:/etc/apt/sources.list.d/pve-enterprise.list
然后在 /etc/apt/sources.list 添加:
deb http://download.proxmox.com/debian/pve buster pve-no-subscription

然后 apt update && apt upgrade;这是 39 个等待更新的包:

总共 700 多兆的下载,经过 proxychains 的“加速”,下载速度稳定在 1.6MB/s,10分钟不到一个节点就升级完成了。

为了安全起见,在我们准备重新启动升级完成的节点之前,把所有的虚拟机手工在线迁移到另外的节点: # qm migrate <VM-ID> <Node-Name> –online
在启动 pve-03 这个节点的时候,我们准备升级 pve-02,升级前的集群状态:

pve-03 节点启动完成后再看集群状态:

登录 pve-03,我们可以看到内核版本已经是 5.3 了
Linux pve-03 5.3.13-1-pve #1 SMP PVE 5.3.13-1 (Thu, 05 Dec 2019 07:18:14 +0100) x86_64 GNU/Linux
之前的版本是:
Linux pve-03 5.0.15-1-pve #1 SMP PVE 5.0.15-1 (Wed, 03 Jul 2019 10:51:57 +0200) x86_64 GNU/Linux

无缝升级大功告成!

Proxmox VE 6 的 NFS ServerName 不能解析的惨案

在安装系统之前,做好规划绝对是非常重要的,但是总是有漏网之鱼,有些事情会没有提前想到,导致有点灾难性的后果发生。

在把 KVM 下的虚拟机迁移到 Proxmox 的时候,我们先前在设置 Proxmox NFS Pool 的时候,设置的 NFS 服务器采用名字而不是 IP ,这就埋下了雷。也就有了本文。

尽管在迁移之前 KVM 环境下有 dns-01 和 dns-02 两台 dns 解析的机器,甚至 dns-02 已经成功的迁移到了 PVE 下面。但是在迁移 dns-01 的时候,灾难发生了,因为磁盘 Pool 再也不能解析名称了, 所有的 NFS 存储都挂了。

解决办法:
通过 IP 地址分别登录每台 PVE 主机,修改 /etc/pve/storage.cfg,把 NFS 的 server 修改为 IP 地址,重新启动 PVE 主机

PVE 使用了 Corosync Cluster Engine 用于集群通信,并把配置存储在 SQlite 数据库,通过 FUSE 挂接到每个节点的 /etc/pve 目录下。

修改 Proxmox 6 VE 虚拟机的 VM ID

KVM 的虚拟化环境里, 只有 domain name 这一说, domain ID 是会随着每次重启, ID 会改变的。

Proxmox 创建虚拟机如果不指定 ID,这个 ID 会自动递增,而且这个 ID 在一个集群里是唯一的,是一直绑定虚拟机的。为了方便管理,类似网络环境的 DHCP IP Pool 的管理,我们会对某一段 ID 做一个特定的用途,加以区分。例如 100-199 是基础架构类的, 200-299 是模版,300-399 是数据库层, 400-499 是应用层, 500-599 是测试机, 600-699 是Windows 客户机。

如果不小心分配错了 VM ID,没有按照我们自定义的规则,需要修改 VM ID,怎么办呢?

在虚拟机已经关闭的情况下, ssh 登录进入集群内的任意一个节点,例如 pve-01,把 VM ID 111 修改为 211:
# cd /etc/pve/nodes/pve-01/qemu-server
# mv 111.conf 211.conf
# vim 211.conf
把里面的虚拟机磁盘映像路径修改掉,同时去真实的物理路径,把磁盘映像的文件名修改掉
假定磁盘 NFS Pool 的顶层路径为: /mnt/pve/vmpool/images,那么就是:
# mkdir 211
# mv 111/vm-111-disk-0.qcow2 211/vm-211-disk-0.qcow2
就可以

Proxmox VE 6 的集群

上回说到了 Proxmox VE 的单机安装和使用以及手工创建的 qcow2 虚拟机的迁移(V2V)。今天我们来说说集群。

熟悉集群的人都知道,集群系统有个脑裂问题,所以一般最少需要三个节点,Mariadb 的 Galera 集群方案还有另外一个解决偶数节点的仲裁器方案。

因此,我们下面的例子是以一个三节点的集群来讲解集群的创建和自动 Faileover 测试。

关于安装,再多讲一句,默认安装后,要先安装 proxychains,我们后面可以更快的从网上下载东西。 科学上网,你懂的!所以,我们一般先 apt install vim proxychains
然后 vim /etc/proxychains.conf 把 proxy_dns 注释掉,quiet_mode 打开,修改最后一行 socks 服务器为自己内网的代理, 然后 proxychains apt update ; proxychains apt upgrade 就可以快速更新 Proxmox 的 Debian 操作系统了。

我们有 pve-01, pve-02, pve-03 三个节点,域名为 .yj, 内部 DNS 都已经配置好,所以我们不需要去每个节点修改 /etc/hosts 文件。

加入集群有两个办法, Web 界面最简单,进入服务器视图,数据中心下的集群,选择一个节点,点击“加入信息”,选择拷贝信息, 然后去另外一个节点的 Web 登录界面,https://pve-02.yj:8006/ 点击“加入集群”,粘贴后,输入 root 口令,就成功了。

命令行也不算复杂,假定我们要把 pve-03 加入到 pve-01 的集群, ssh 登录到 pve-03 的命令行,敲入 pvecm add 192.168.7.241,我们就有了如下的输出截屏:

重新登录 pve-03 的 Web 登录界面,我们就可以看到三台主机都已经上线。

这个时候我们还没有定义过 HA group,实际上如果强行关闭一个节点,上面的虚拟机是不会自动切换的。 当然到了这一步,你肯定先会玩一下虚拟机的手工迁移了(不展开了)。

我们先定义好 HA Group:


下面我们把一台运行着虚拟机的 pve-02 节点,拔掉网线,看看情况:

以上先前是运行在 pve-02 上 101 虚拟机,我们拔掉网线后在 pve-03 Web界面上看到的集群日志:

刷新页面,我们可以看到 101 虚拟机已经“漂”到了 pve-01 节点上。

总结: Proxmox VE 的操作其实真心不难, 在一个简单的环境里,没有复杂的网络配置,只要用一台中心的 NFS 存储就可以实现所有虚拟机的高可靠。真心是“穷人”的高可靠解决方案。

Proxmox VE 3分钟快速上手

Proxmox VE 是一款开源的虚拟化管理软件。内核基于 Debian,如果需要测试的话,其实也是蛮快可以上手的。 当然 前提是有 KVM 基础。

当然先是去官网下载最新版本的 iso,用 Bitrorrent 种子的下载速度可以达到 8Mb 每秒, 700 多兆的 iso,11分钟就下载完成。把 iso 拷贝到 Linux 机器上,插入 U盘,fdisk -l 查看,假设盘符为 /dev/sdb,然后 dd if=xxxx.iso of=/sdb bs=1M 就可以把 iso 烧录到 U 盘上了。
在要安装的物理服务器上,打开 UEFI 引导,然后就可以看到 Proxmos 的安装界面了,配置好服务器的网络和 root 口令后,安装十分快捷,重启会提示通过 https://ip:8006/ 就可以进入管理界面。

安装就大功告成了!接下来,添加存储和虚拟机。在 Web 界面用 root 用户登录后,设置语言为中文,进入存储界面,添加我们之前已经设置好的 NFS Share,设置好不同的类别,例如 iso 还是 vm 。记住,原先的存在的目录要按照 Proxmox 的约定重新移动到新的目录 iso 为挂接点下的 template/iso , vm 为 挂节点下的 images/<VMID>/ ,只有这样才能看到 Proxmox 之前的那些 iso 或者 qcow2 文件。

接下来,我们就可以开始创建虚拟机了,点击右上角的“创建虚拟机”,设置好虚拟机名称,从 isopool 里下拉,可以看到之前的 iso 文件,选择对应的映像,然后一步一步点选,就设置完成了。然后启动虚拟机,如果看到 No VNC,那是因为浏览器所在的 PC 客户端没有安装过 VNC ,不要紧,如果安装过 virt-view,我们在显卡设置里去修改成 Spice 就可以。然后会自动下载一个 .vv 文件,会自动用 virt-viewer 打开,我们就可以连接到虚拟机的 console 开始通过 iso 安装操作系统了。

那怎么样把已经有的之前用其他工具/方法创建的 qcow2 启动镜像放到 PVE 里面呢?

参考网络上的文档的做法是先创建一个虚拟机,生成和原先文件一样大的 qcow2 文件,然后把这个文件覆盖。虚拟机是可以启动的。这样子,我们就可以把先前所有的虚拟机都迁移到 PVE 上了。

V2V 的迁移非常简单,我们首先在 PVE Host 的命令行下创建一个 ID 为 102 的虚拟机:
# qm create 102 –bootdisk scsi0
然后进入到 Host 上的 NFS 挂接的目录,当然也可以不进入,后面多敲一点路径而已。
# cd /mnt/pve/vmpool
把里面的 elk-02.qcow2 转换到 102 虚拟机上。
# qm importdisk 102 elk-02.qcow2 vmpool –format qcow2

假定我们的 storage 名字叫 vmpool,我们可以用 pvesm list vmpool 看到下面的所有虚拟机映像以及快照,然后我们重新设置一下虚拟机 102 的启动盘:
qm set 102 –scsi0 vmpool:102/vm-102-disk-0.qcow2

这样子,通过以上三步,先建立虚拟机,再导入磁盘,再设置启动盘,就把之前的虚拟机就可以全部导入到 PVE 了!

完美!

后记:


系统安装后,默认是 subscribe 的,会导致更新失败。 我们需要修改 apt source 文件:/etc/apt/sources.list.d/pve-enterprise.list
# deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise
deb http://download.proxmox.com/debian/pve stretch pve-no-subscription

如果有安装过 proxychains , 然后设置过绕墙代理的话,用 proxychains apt -y update 就可以很快把系统更新了。

对了, 所有的原先 virsh 的一些命令,大多数都可以通过 qm 命令来完成。

pvesm 是管理存储的, pvecm 是管理集群的。