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 麻雀虽小,五脏俱全,体积虽小,功能全面,提供了一切你所需要的功能。
选择你的 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
可以使用 pvs
和 lvdisplay
进行查看分区情况有没有变化
重新加载逻辑卷
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
samba
,NFS set zfs max ram
,nested virtualization
,docker
,pci passthrough
etc. for english user,please look the end of readme.这是一个为proxmox ve写的工具脚本(理论上debian9+可以用)。包括
配置邮件
,samba
,NFS
,zfs
,嵌套虚拟化
,docker
,硬盘直通
等功能。
可以用他这里的一键无脑安装
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 里找到了类似的:
- Issue#54: j4125 使用CPU省电后 去掉少电后不能睿频了
- Issue#43: 还原CPU省电配置后,CPU不能恢复睿频频率
作者修复在 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
archlinux wiki: LVM (简体中文)
溜了溜了喵(