Atlantis
GitHub Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

3. 常用操作

1. 移除订阅提示

img-001

默认情况下,每次登录成功时就会检查是否有企业版订阅,可以修改 web 端代码移除订阅。

编辑 /usr/share/pve-manager/js/pvemanagerlib.js,注释掉下面的代码即可隐藏每次登录时的订阅提示。

img-002

随着版本更新可能会很难找,可以使用 grep 命令定位代码位置

➜ grep -n 'display subscription' /usr/share/pve-manager/js/pvemanagerlib.js
60434:		    Proxmox.Utils.checked_command(Ext.emptyFn); // display subscription status

2. 扩容根分区

在安装 PVE 系统到硬盘上时,默认创建两个大分区,一个用于挂载 /boot/efi,另一个用于创建名为 pve 的 VG,并在下面划分出 3 个 LV:

  1. pve-swap:交换分区
  2. pve-root:挂载根分区,对应 local 存储
  3. pve-data:对应 local-vm 存储

local-vm 可用于存储虚拟机/容器,不过它使用块存储的方式分配磁盘空间,如果磁盘空间不足,遇到需要使用大容量数据盘的虚拟机/容器需要备份还原时,可能得来回倒腾数据,比较折磨人。

因此对于存储空间较小的机器,建议移除 local-lvm,合并磁盘空间到 local,然后在给 local 存储的内容添加磁盘映像与容器,这样就可以使用 RAW 和 QCOW2 格式保存容器和虚拟机,按需分配存储空间。

我目前就是如此操作,使用了一个 128G 的 NVME SSD 安装系统,主要用于保存 dump 文件、ISO 镜像与容器模板,另一个 SSD 用于存储虚拟机和容器。

扩容根分区的操作很简单,首先清理 local-lvm 上的容器和虚拟机,可以先迁移到 local 或者外置存储上,然后从 数据中心 -> 存储 移除 local-lvm,最后登录宿主机,执行以下命令:

# 删除 pve-data 逻辑卷
lvremove /dev/pve/data
# 扩容 pve-root 逻辑卷
lvresize -l +100%FREE /dev/pve/root
# 调整根分区文件系统大小,ext4 文件系统使用 resize2fs,xfs 文件系统使用 xfs_growfs
resize2fs /dev/mapper/pve-root

根分区的扩容流程总是固定的,删除无用分区、扩容目标分区、调整文件系统。如果未使用 LVM 管理分区,那么 fdisk 删除分区后新建分区再调整文件系统即可。

操作完成后根分区就完成了扩容:

➜  ~ lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1      259:0    0 476.9G  0 disk
└─nvme0n1p1  259:2    0 476.9G  0 part /mnt/intel
nvme1n1      259:1    0 119.2G  0 disk
├─nvme1n1p1  259:3    0  1007K  0 part
├─nvme1n1p2  259:4    0     1G  0 part /boot/efi
└─nvme1n1p3  259:5    0 118.2G  0 part
  ├─pve-swap 252:0    0     8G  0 lvm  [SWAP]
  └─pve-root 252:1    0 110.2G  0 lvm  /
➜  ~ df -Th /
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/pve-root ext4  109G   47G   57G  46% /

最后注意在 数据中心 -> 存储 调整 local,内容中添加磁盘映像与容器:

3. CPU隔离与绑定

默认配置下,PVE 会根据 LXC 容器与 KVM 虚拟机申请的 CPU 核心数自动绑定 CPU,但有时候我们需要开大量实例测试,CPU 资源不足时可能会影响一些关键服务,这时可以通过隔离指定 CPU 并设置 CPU 亲和性来规避资源抢占。

假设需要隔离 28、29、30、31 四个核心,首先需要修改 grub 配置,在 /etc/default/grub 文件中的 GRUB_CMDLINE_LINUX_DEFAULT 添加 isolcpus=28,29,30,31,如下:

➜  ~ cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=vesafb:off,efifb:off,simplefb:off isolcpus=28,29,30,31"
GRUB_CMDLINE_LINUX=""
...

然后执行以下命令更新 grub 并刷新配置:

update-grub && pve-efiboot-tool refresh

重启机器后检查配置是否生效,可以看到 28-31 号核心已经隔离:

➜  ~ cat /sys/devices/system/cpu/isolated
28-31

对于 KVM 虚拟机,我们可以直接在控制台上点击处理器进行编辑,在 CPU 绑定中设置 CPU 核心编号,如下:

alt text

重启动虚拟机后,我们可以检查 KVM 虚拟机的进程信息核对 CPU 绑定,如下,首先获取 kvm 虚拟机的进程 ID,然后检查进程的 status 核对 Cpus_allowed_list:

➜  ~ ps aux | grep 'kvm -id 101'
root        1533  9.7  0.5 4894248 675632 ?      Rl   11:33   3:27 /usr/bin/kvm -id 101 -name ow,debug-threads=on -no-shutdown -chardev socket,id=qmp,path=/var/run/qemu-server/101.qmp,server=on,wait=off -mon chardev=qmp,mode=control -chardev socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5 -mon chardev=qmp-event,mode=control -pidfile /var/run/qemu-server/101.pid -daemonize -smbios type=1,uuid=d8fca1ca-675a-4128-903f-96f08c1bdb94 -smp 2,sockets=1,cores=2,maxcpus=2 -nodefaults -boot menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg -vnc unix:/var/run/qemu-server/101.vnc,password=on -cpu host,+kvm_pv_eoi,+kvm_pv_unhalt -m 4096 -object iothread,id=iothread-virtioscsi0 -device pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e -device pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f -device pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5 -device vmgenid,guid=1439eacc-f948-488f-9c40-f21bd8f0f145 -device piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2 -device usb-tablet,id=tablet,bus=uhci.0,port=1 -device VGA,id=vga,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on -iscsi initiator-name=iqn.1993-08.org.debian:01:6e88e87ed64d -device virtio-scsi-pci,id=virtioscsi0,bus=pci.3,addr=0x1,iothread=iothread-virtioscsi0 -drive file=/mnt/intel/images/101/vm-101-disk-0.qcow2,if=none,id=drive-scsi0,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on -device scsi-hd,bus=virtioscsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,rotation_rate=1,bootindex=100 -netdev type=tap,id=net0,ifname=tap101i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on -device virtio-net-pci,mac=BC:24:11:8A:36:C7,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256 -netdev type=tap,id=net1,ifname=tap101i1,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on -device virtio-net-pci,mac=BC:24:11:64:10:10,netdev=net1,bus=pci.0,addr=0x13,id=net1,rx_queue_size=1024,tx_queue_size=256 -machine type=pc+pve0
➜  ~ cat /proc/1533/status|grep -i CPU
Cpus_allowed:	c0000000
Cpus_allowed_list:	30-31

对于 LXC 容器,目前只能手动编辑配置文件,假设 id 为 102 的 LXC 容器需要绑定 28、29号核心,则手动编辑配置文件 /etc/pve/lxc/102.conf,在末尾添加一行

lxc.cgroup2.cpuset.cpus: 28,29

重启容器后就会生效,我们通过 pct cpusets 命令确认:

➜  ~ pct cpusets
-------------------------------------------------------------------------------------
102:                                                                            28 29