0x00 引言

哪个男孩子不想整个自己的 HomeLab 呢?

说来一直想玩好久了,蹭着暑假回家有空,直接花了点钱组了台鸡鸡,折腾着折腾着时间一下过去了

干脆开个新的 HomeLab 专题,这个系列具体说说喵喵折腾机器(搞机)的故事。

这一篇博客算是开篇,主要就记录一下咱折腾 PVE 安装和配置的过程 喵~

请注意!!!

本系列的文章是断断续续写的,最早写于2022年9月,可能有些信息已经过时!

(咕咕咕,喵喵是大鸽子

0x01 PVE 简介 & 硬件配置

PVE 的全称是 Proxmox Virtual Environment,是一个基于 QEMU/KVM 的 Linux 下的虚拟机。

主要的好处就是可以拿来跑虚拟化开一堆的虚拟机(生小鸡),还能支持硬件直通,几个节点放一起组集群等等。

Proxmox 支持的虚拟化:

  • 硬件抽象层全虚拟化,基于内核的 KVM(Kernel-based Virtual Machine)
  • 基于容器的虚拟化技术 LXC(Linux Containers)

喵喵的预算比较有限,最初是想当 NAS 用想要挺多存储,于是大概的配置如下:

  • 主板: 华硕 H610M-E
  • CPU: Intel i5-12400
  • GPU: 核显,暂无独显
  • RAM: 8G 2666MHz * 2
  • SSD: SN570 500GB
  • HDD: 西数紫盘/监控盘 4TB * 4 (大存储捏
  • 电源: 技嘉 P450B
  • 机箱: 挑战者H6(硬盘位贼多,不过买来发现贼大贼厚重

除了内存条是二手的之外,其他是全新采购的,没记错的话大概加起来四五k(硬盘都2k了)?(懒得查订单了

(后来一想感觉为了节约预算更好的方案应该是做垃圾佬,去海鲜市场淘点垃圾?或者整点服务器的 板U 貌似也不错。但是质量不敢保证就是了

(算了,买都买了,大不了再加

0x02 下载并刷写 PVE 镜像

直接去 Proxmox 官网下载 Proxmox Virtual Environment ISO 镜像

https://www.proxmox.com/en/downloads/category/iso-images-pve

目前(2022年9月)最新的版本是 7.2-1,这是基于 Debian GNU/Linux 11 (bullseye) 进行构建的。

Update: 2023年4月,最新版本是 7.4-1 了。

准备一个 U 盘,喵喵这里用了 Rufus 这个开源工具来刷新镜像

Rufus是一个帮助格式化和创建可启动USB闪存驱动器的工具,如USB钥匙/软盘、记忆棒等。

在如下场景中会非常有用:

  • 你需要把一些可引导的ISO格式的镜像(Windows,Linux,UEFI等)创建成USB安装盘的时候
  • 你需要使用一个还没有安装操作系统的设备的时候
  • 你需要从DOS系统刷写BIOS或者其他固件的时候
  • 你需要运行一个底层的工具的时候

Rufus 麻雀虽小,五脏俱全,体积虽小,功能全面,提供了一切你所需要的功能。

https://rufus.ie/zh/

选择你的 U 盘,选择下载好的镜像文件,然后发现会有下面这样的提示,说强制使用 DD 镜像写入模式。

然后点开始,等他刷完就完事了。

当然你也可以直接 dd 命令来操作(

其实之前喵喵用的 Rufus 老版本,先试了试用 iso 模式刷写,但是发现后续的步骤启动不起来,进到 grub rescue mode 了。

之后升级了新版本,用 dd 模式就成功进安装界面了。

0x03 安装 PVE 系统

插上 U 盘,然后上电,开机。

根据主板的不同,不停按键盘上的类似于 F2 或者 DEL 这样的按键,进入 BIOS,修改 U 盘为优先启动。

当然还要打开 CPU 的虚拟化,比如 Intel® Virtualization Technology for Directed I/O (VT-d)

如果你的盘之前没装过系统,那就直接进入到安装 PVE 的界面了。

但是喵喵之前的盘装过 Windows 10,于是调用 U 盘启动的时候锅了,提示违反了安全启动(Secure Boot Violation)。

这应该是主板的 feature 吧,需要在 BIOS 的设置里把安全启动给关了。

咱用的是 ASUS 的主板,也不确定下面的操作对不对,反正能用就是了。

在 启动 栏目里,把 操作系统类型 改成 其他系统,Secure Boot Mode 改成 Standard,然后保存配置并退出。

(图中是修改前的配置)

这样重启之后再从 U 盘引导,就能成功进入安装 PVE 的界面了。

接下来的就一路顺着安装就完事了。

选择安装的硬盘,这里的 options 里可以修改硬盘分区的大小 hdsize,比如总共分 100GB 用来装 PVE 这样,那这个 hdsize 就填 100.

详细的说明可以看 官方文档的安装这部分

之后配好密码,这个密码就是之后用来登录 web/ssh/ftp 的密码了,用户名默认就是 root。邮箱的话填个自己的就行。

接下来是 IP、网卡这些信息,网口如果是单网口就没啥问题,如果是还要用来跑 openwrt 系统之类的话就配成管理网口,不要设成 WAN 所在的网口。

如果你是连接在路由器下,那就填目前获得的那个网口 IP 和网关地址,主机名 hostname 就填个类似于 pve1.miaotony.xyz 这样的域名,这样填的话之后会以 pve1 作为 hostname。

然后确认好信息,耐心等系统安装完,就会出现个黑乎乎的控制台,里面就提示你管理这台 PVE 的 IP 和 Port 了。

默认情况下应该有一个类似于 https://192.168.1.20:8006 的链接,IP 就是之前给机器配的 IP。

登录进来就可以远程管理机器了,点击 Shell 就能远程执行命令了,好耶!

当然你可以直接用自己设置的密码在 tty 登录,其中用户名是 root

然后跑个 neofetch 吧。

先更新一下源,安装脚本(可能这时候还没换源会比较慢):

apt update && apt install -y neofetch

然后执行 neofetch

好耶!

接下来就可以把显示器、键盘、鼠标啥的拔了,直接远程登录来管理了。

0x04 换源

去除企业源

(毕竟咱没钱钱也还没必要用企业版

rm /etc/apt/sources.list.d/pve-enterprise.list

或者把文件里的东西注释掉也行。

Debian,Proxmox

喵喵这里使用的是 USTC 的软件源,主要参考的是 其帮助文档

修改基础系统(Debian)的源文件

sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list

修改 Proxmox 的源文件

source /etc/os-release
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $VERSION_CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

然后 apt update 更新索引

CT Templates

也就是 LXC 的仓库源(?

cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm

针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,重启后生效。

ceph

更换 ceph 软件源

sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /etc/apt/sources.list.d/ceph.list

cp /usr/share/perl5/PVE/CLI/pveceph.pm /usr/share/perl5/PVE/CLI/pveceph.pm.bak
sed -i "s|http://download.proxmox.com/debian|https://mirrors.ustc.edu.cn/proxmox/debian|g" /usr/share/perl5/PVE/CLI/pveceph.pm

这之后正好先更新下系统

apt update
apt upgrade
apt dist-upgrade

然后 reboot 重启机器。

0x05 存储相关 & 扩容 root

PVE 存储

通过 ISO 镜像安装 Proxmox 后 Proxmox 会自动创建一个 pve 的 Volume Group,并在其上面创建 root, data 和 swap 三个逻辑卷。

默认情况下 Proxmox 会自动创建 local(pve) 和 local-lvm(pve) 这两个 Storage,分别用来存放镜像和磁盘:

  • local 是 Directory 类型,用来存放 VZDump backup file, ISO Images, Container template
  • local-lvm 是 LVM-Thin 类型,用来存放 Disk image, Container

LVM:Logical Volume Manager 逻辑卷管理

咱把 PVE 装在了一块 500GB 的 SSD 上,全新安装的系统上可以看到一块硬盘被划分了三个分区

[emailprotected]:~# fdisk -l
Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: WD Blue SN570 500GB SSD                 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: xxxxxxxxxxx

Device           Start       End   Sectors  Size Type
/dev/nvme0n1p1      34      2047      2014 1007K BIOS boot
/dev/nvme0n1p2    2048   1050623   1048576  512M EFI System
/dev/nvme0n1p3 1050624 209715200 208664577 99.5G Linux LVM


Disk /dev/mapper/pve-swap: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/pve-root: 24.75 GiB, 26575110144 bytes, 51904512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
  • BIOS boot 分区是 GNU GRUB 来引导基于 Legacy BIOS 但是启动设备上有 GPT 格式分区表的操作系统时使用的分区。
  • EFI System 分区是一块 FAT32 格式的分区,存储 EFI 引导程序以及启动时固件使用的应用程序。
  • Linux LVM 分区则是系统真正可以使用的分区。LVM 是逻辑卷管理器,可以用来创建和管理逻辑卷,而不是直接管理磁盘,这就使得我们之后对分区大小进行调整变得可能。对 LVM 逻辑卷的扩大缩小并不会影响其中的已存储的数据。

可见创建了两个逻辑卷分区:

  • /dev/mapper/pve-swap swap 分区
  • /dev/mapper/pve-root root 分区

利用 lvdisplay 命令可以看到逻辑卷的详细信息

Proxmox 安装的时候实际上创建了一个叫做 pve 的卷组 (Volume Group),然后在上面分别创建了 swap, root, data 三个逻辑卷 (Logical Volume)。

扩容分区

先给 pve 卷组 / Volume Group 扩容,或者说这个 VG 所在的分区扩容

安装 parted,列出分区信息

apt update && apt install -y parted
parted -l
Model: WD Blue SN570 500GB SSD (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1049kB  1031kB                     bios_grub
 2      1049kB  538MB   537MB   fat32              boot, esp
 3      538MB   107GB   107GB                      lvm

可以看到 PVE 安装在 /dev/nvme0n1 这块盘上

因为安装的时候改了 hdsize,这里并没有占满整块盘,我们可以对 LVM 这个分区进行扩容。

然后用 parted 交互式操作分区,注意小心操作!!!

这里扩容分区号为 3 的分区

[emailprotected]:~# parted /dev/nvme0n1
GNU Parted 3.4
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: WD Blue SN570 500GB SSD (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1049kB  1031kB                     bios_grub
 2      1049kB  538MB   537MB   fat32              boot, esp
 3      538MB   107GB   107GB                      lvm

(parted) resizepart 3 100%
(parted) print
Model: WD Blue SN570 500GB SSD (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1049kB  1031kB                     bios_grub
 2      1049kB  538MB   537MB   fat32              boot, esp
 3      538MB   500GB   500GB                      lvm

(parted) quit
Information: You may need to update /etc/fstab.

然后 更新物理卷的大小

[emailprotected]:~# pvresize /dev/nvme0n1p3
  Physical volume "/dev/nvme0n1p3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

扩容逻辑卷

查看 Proxmox 的逻辑卷内容

[emailprotected]:~# cat /etc/pve/storage.cfg
dir: local
        path /var/lib/vz
        content iso,vztmpl,backup

lvmthin: local-lvm
        thinpool data
        vgname pve
        content rootdir,images

使用 pvs 查看物理卷的使用情况

[emailprotected]:~# pvs
  PV             VG  Fmt  Attr PSize    PFree
  /dev/nvme0n1p3 pve lvm2 a--  <465.26g <378.14g

可见在 PFree 里面有大量空间没有使用

而后利用 lvextend 命令进行逻辑卷的扩容

如果要把全部空间都给 data:

lvextend -l +100%FREE /dev/pve/data

如果指定给 data 增加 10GB:

lvextend -L +10G /dev/pve/data

如果熟悉 lvresize 也可以:

lvresize --extents +100%FREE --resizefs /dev/pve/data

另外这个 G 试了试发现是 GiB(

当然也可以给 root 增加个 10GiB:

lvextend -L +10GiB /dev/pve/root

可以使用 pvslvdisplay 进行查看分区情况有没有变化

重新加载逻辑卷

df 发现 root 的容量还没变,于是需要 重新加载逻辑卷,从而使 LV 扩容生效

[emailprotected]:~# resize2fs /dev/pve/root
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/pve/root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 5
The filesystem on /dev/pve/root is now 9109504 (4k) blocks long.

[emailprotected]:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
udev                  7.7G     0  7.7G   0% /dev
tmpfs                 1.6G  1.7M  1.6G   1% /run
/dev/mapper/pve-root   35G   12G   22G  35% /s
tmpfs                 7.7G   46M  7.7G   1% /dev/shm
tmpfs                 5.0M     0  5.0M   0% /run/lock
/dev/nvme0n1p2        511M  328K  511M   1% /boot/efi
/dev/fuse             128M   16K  128M   1% /etc/pve
tmpfs                 1.6G     0  1.6G   0% /run/user/0

这样就成功扩容了!

(看这个数字不太好看,于是又凑了个整数,后面有需要再继续扩容吧

0x06 PVETools

搜着搜着正好搜到了个一键配置的工具 PVE Tools

proxmox ve tools script(debian9+ can use it).Including email, samba, NFS set zfs max ram, nested virtualization ,docker , pci passthrough etc. for english user,please look the end of readme.

这是一个为proxmox ve写的工具脚本(理论上debian9+可以用)。包括配置邮件sambaNFSzfs嵌套虚拟化docker硬盘直通等功能。

https://github.com/ivanhao/pvetools

可以用他这里的一键无脑安装

echo "nameserver  8.8.8.8" >> /etc/resolv.conf && rm /etc/apt/sources.list.d/pve-enterprise.list && export LC_ALL=en_US.UTF-8 && apt update && apt -y install git && git clone https://github.com/ivanhao/pvetools.git && cd pvetools && chmod +x pvetools.sh && ./pvetools.sh

(咱这里顺便加了个 chmod,可能直接 clone 下来没执行权限

显示传感器温度、CPU 频率

比如配置显示传感器温度啥的,执行完成之后 Ctrl + F5 强制刷新 web 界面更新缓存,概要里就有相关的信息了

去除订阅提示

这个其实就是把前端代码里的那个弹出窗口的部分给干掉了,hhh

https://github.com/ivanhao/pvetools/blob/e7404a53a37dd5e082f56bee9c8ad9edf2df291a/pvetools.sh#L1345

CPU 省电

噢对了,顺便吐槽一下,现在这个版本(2.3.3)脚本里的 CPU 省电进行配置之后,如果还原配置会发现 CPU 睿频没了,或者说原来的超频回不去了。

然后在 Issue 里找到了类似的:

作者修复在 https://github.com/ivanhao/pvetools/commit/dbd1532d78cc8ade72a32aab17a6fef9af3b4b3f ,感觉有点奇怪。。

相当于他把原来的 b) 还原配置改成了重新配置最大频率,但咱试之后并没有什么用,好迷啊。

么得办法,咱也先不管啥节能了,总得恢复回去吧。

于是把 cpufrequtils 给卸载了。(得,咱不要你了!)

再把 /etc/default/grub 里的 intel_pstate=disable 给删了。最后重启宿主机。

查了下,关了 pstate 好像是为了固定频率?或者让 cpufrequtils 来接管?(不大懂

cat << EOF > /etc/default/cpufrequtils
ENABLE="true"
GOVERNOR="performance"
EOF
systemctl restart cpufrequtils
apt -y remove cpufrequtils
rm -rf /etc/default/cpufrequtils

sed -i 's/ intel_pstate=disable//g' /etc/default/grub
update-grub

reboot

重启之后睿频就回来了

不过咱后来为了节能还是把 CPU 省电给打开了,放着吃灰而且产热的话太费电了(x

0x07 监控硬盘温度

如果跳过了上面的 PVETools,这里可以使用 lm-sensors 监控 CPU 温度,hddtemp 监控硬盘温度。

(不过 web 界面里还没有 hdd 温度倒是了

# 安装
apt install lm-sensors hddtemp -y
# 查看
sensors
hddtemp /dev/sda

当然也可以参考 国光大佬的教程,在 web 界面上加一个显示。

(这里略了)

0x08 配置 IPv6

参考 Proxmox网桥通过SLAAC配置公网ipv6地址,通过修改网口的 accept_ra 来实现。

Proxmox 使用的是 ifupdown2,非 debian/ubuntu 使用 ifupdown。

查看内核也已经开启ipv6自动配置:

# cat /proc/sys/net/ipv6/conf/vmbr0/accept_ra
1
# cat /proc/sys/net/ipv6/conf/vmbr0/autoconf
1

查看已开启ipv6转发:

# cat /proc/sys/net/ipv6/conf/vmbr0/forwarding
1

修改 /etc/sysctl.conf 文件,需要将 accept_ra 值改成 2 才能自动配置 SLAAC ipv6 地址:

# nano /etc/sysctl.conf
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.vmbr0.accept_ra=2
net.ipv6.conf.all.autoconf=1
net.ipv6.conf.default.autoconf=1
net.ipv6.conf.vmbr0.autoconf=1

再应用一下配置

sysctl -p

可能需要再重启一下,之后就能看到 ipv6 地址了。

0x09 小结

这篇博客是喵喵 HomeLab 系列的第一篇,大概介绍了 PVE 系统的大体情况以及初始上手的安装与配置方法。

后面几篇就来和大家分享一下喵喵在 PVE 系统上 生小鸡 的一些具体应用,可以期待一下(咕

0xFF References

溜了溜了喵(