pev-init
pev-init
dong4j简介
安装完成后 IP 不对
启动后出现了一张 vmbr0
网卡, 这个是桥接网卡, 可以查看绑定的物理网卡:
1 | ip link show master vmbr0 |
修改一下 3 个文件:
1 | # /etc/network/interfaces |
参考:
更换源
1 | sudo apt install apt-transport-https ca-certificates |
通用软件源
1 | cp /etc/apt/sources.list /etc/apt/sources.list.bak |
1 | # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 |
pve 软件源
1 | cp /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak |
1 | # 使用Proxmox非企业版源 |
Ceph 源
1 | cp /etc/apt/sources.list.d/ceph.list /etc/apt/sources.list.d/ceph.list.bak |
CT 镜像下载源
将 /usr/share/perl5/PVE/APLInfo.pm 文件中默认的源地址 http://download.proxmox.com 替换为 https://mirrors.tuna.tsinghua.edu.cn/proxmox 即可。
1 | cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm.bak |
1 | { |
1 | systemctl restart pvedaemon.service |
删除订阅弹窗
1 | sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service |
oh-my-zsh
1 |
|
连接 WiFi
1 | apt-get install wpasupplicant |
会得到类似以下的输出
1 | network={ |
我们需要复制这个 PSK 值。
- 打开
/etc/network/interfaces
文件 - 添加以下内容
1 | auto [网卡名称] |
为了方便管理,我们推荐你使用静态 IP 3. 重启网络
1 | ifdown [网卡名称] |
Web 打不开
501 no such file '/PVE/StdWorkspace.js'
1 | apt install --reinstall proxmox-widget-toolkit |
pve_source 脚本
https://bbs.x86pi.cn/thread?topicId=20
稳定版
1 | wget -q -O /root/pve_source.tar.gz 'https://bbs.x86pi.cn/file/topic/2023-11-28/file/01ac88d7d2b840cb88c15cb5e19d4305b2.gz' && tar zxvf /root/pve_source.tar.gz && /root/./pve_source |
开发版 (PVE 系统配置 IOMMU、核显直通、核显 SR-IOV 调整为定制向导+推荐方案)
1 | wget -q -O /root/pve_source.tar.gz 'https://bbs.x86pi.cn/file/topic/2024-01-06/file/24f723efc6ab4913b1f99c97a1d1a472b2.gz' && tar zxvf /root/pve_source.tar.gz && /root/./pve_source |
迁移 Ubuntu 系统到 PVE
列举一下已存在的 M.2 固态硬盘信息:
一共 1T *4 M.2 固态硬盘, 其中 nvme0n1 安装的 PVE, 其他 3 根还未使用.
镜像打包
原来安装 Ubuntu 的 M.2 500G 固态硬盘已经从机器上拔下来了, 为了将此固态硬盘中的系统打包成镜像然后恢复到 PVE 中, 这里使用了 Clonezilla 来完成这项工作.
使用到的工具:
执行完成后会在指定的 U 盘生成一些系统文件, 但是这个还不能直接使用, 所以我又使用 Clonezilla 将这些文件打包成 ISO.
最终的目的是将 Ubuntu 系统打包成 ISO, 然后在 PVE 中使用虚拟机安装.
参考
安装到 PVE
在 PVE 下查看 P40 显卡的信息:
1 | lspci | grep 3D |
要直通这块卡给 Ubuntu 24.04 虚拟机,需要准备:
- 开启 pcie 直通
- 安装 Ubuntu 24.04 虚拟机(就是上一步打包的 ISO)
安装 Windows
https://www.mulingyuer.com/archives/1027/
https://willxup.top/archives/pve-install-win11
https://imacos.top/2023/09/07/pve-windows-11/
核显直通与虚拟核显直通
物理核显直通 vs SRIOV vGPU 的优缺点对比:
优点 | 缺点 | |
---|---|---|
物理核显直通 | 1、性能强 2、支持物理显示输出 (VGA/DP/HDMI/Type-C) 3、兼容性好,不妨碍 PVE 升级。 | 独占(不支持直通给多个虚拟机) 直通后,PVE 宿主不能同时用核显。 |
SRIOV 虚拟核显直通 | 可分为多个 VF 虚拟显卡, 给不同的虚拟机使用。 | 1、性能拆分(分成多个 VF 显卡具体如何分配性能不详) 如 N100 等不建议超过 3 个 VF 显卡,具有性能高核显的处理器可以分为最高 7 个); 2、不支持物理显示输出,虽可使用 Todesk 等软件远程桌面,但 CPU 占用率较高。在作为服务器的小主机上,让原本紧张的资源更加捉襟见肘。 3、对内核 header 依赖(6.1-6.5),PVE 升级受限。 4、兼容性稳定性一般,部分流媒体软件硬解/转码功能受限。 |
虚拟核显直通
1 | apt install pve-kernel-$(uname -r) |
在 quiet
后添加 intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7
1 | update-grub |
1 | echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3" > /etc/sysfs.conf |
1 | reboot |
1 | $ dkms status |
1 | $ dmesg |grep i915 |
1 | vim /etc/pve/qemu-server/100.conf |
参考
安装 Ubuntu
PVE(Proxmox VE)中的网络模型选择取决于 虚拟机的用途和性能需求。不同的网卡模型有不同的兼容性和性能,以下是对比:
1. VirtIO(半虚拟化)(✅ 推荐)
优点:
- 性能最佳,支持 高吞吐量,低 CPU 开销。
- 延迟最低,适合高性能服务器、数据库、Web 服务等应用。
- 现代 Linux(Ubuntu、Debian、CentOS)自带 VirtIO 驱动,无需额外安装。
缺点:
- Windows 需要 手动安装 VirtIO 驱动(可以从这里下载)。
✅ 推荐用于:Linux 虚拟机、Windows(安装 VirtIO 驱动)、高性能应用
2. Intel E1000 / E1000E(🟡 兼容性好,但性能一般)
优点:
- 兼容性非常好,几乎所有操作系统都自带驱动,无需额外安装。
- 适用于老旧操作系统(如 Windows XP/2003)。
缺点:
- CPU 开销大,数据包处理效率低。
- 带宽限制在 1Gbps,无法发挥现代硬件的最大性能。
🟡 适用于:老旧操作系统(如 Windows XP/2003)、兼容性优先的环境
3. Realtek RTL8139(⚠️ 极老,几乎不推荐)
优点:
- 兼容性好,适用于一些极老的操作系统(如 Windows 98)。
缺点:
- 性能最差,带宽 100Mbps,完全跟不上现代网络需求。
- 高 CPU 负载,不适合生产环境。
❌ 不推荐,除非你要运行 Windows 98 这类老系统。
4. VMware vmxnet3(🟡 适用于 VMware 兼容环境)
优点:
- 适合从 VMware 迁移的虚拟机,可无缝兼容 VMware 环境。
- 低 CPU 开销,性能比 Intel E1000 好。
缺点:
- 需要安装 VMware Tools 才能正常工作,否则性能低下。
- 如果不是从 VMware 迁移过来的 VM,VirtIO 仍然是更好的选择。
🟡 适用于:从 VMware 迁移过来的虚拟机
总结
选项 | 性能 | 兼容性 | 适用场景 | 推荐度 |
---|---|---|---|---|
VirtIO(半虚拟化) | ✅ 最佳 | 需要驱动(Linux 自带,Windows 需安装) | 现代 Linux、Windows(安装驱动)、高吞吐应用 | ⭐⭐⭐⭐⭐ |
Intel E1000/E1000E | 🟡 一般 | 无需驱动 | 老旧 Windows/Linux 兼容性优先 | ⭐⭐⭐ |
Realtek RTL8139 | ❌ 最差 | 无需驱动 | 极老系统(Windows 98/2000) | ⭐ |
VMware vmxnet3 | 🟡 较好 | 需要 VMware Tools | 从 VMware 迁移的 VM | ⭐⭐⭐ |
推荐
- Linux(Ubuntu、Debian、CentOS)→ 选 VirtIO
- Windows(10/11/Server)→ 选 VirtIO(安装 VirtIO 驱动)
- Windows XP/2003 → 选 Intel E1000
- VMware 迁移过来的 VM → 选 vmxnet3
✅ 最终建议:如果是 Linux 或现代 Windows,请使用 VirtIO(半虚拟化),它的性能最佳。
开启 SSH 登录
安装 openssh-server
1
sudo apt install openssh-server
安装完成后,SSH 服务默认自动启动,你可以通过以下命令校验服务运行状态:
1
sudo systemctl status ssh
如果你启用了防火墙,请确保防火墙打开了 SSH 端口,命令如下:
1
sudo ufw allow ssh
允许远程登录
1
2
3sudo nano /etc/ssh/sshd_config
# 修改配置
PubkeyAuthentication yes重启 ssh 服务
1
service ssh restart
开启远程桌面
因为通过 PVE 控制台链接 Ubuntu 后, 进入设置页面打开远程桌面老是卡死, 所以直接通过命令行操作.
1 | sudo apt update && sudo apt install xrdp -y && sudo systemctl enable --now xrdp |
安装 docker
1 | sudo apt remove -y docker docker-engine docker.io containerd runc \ |
直通 nvme
因为同品牌 nvme 固态硬盘在 PVE WebUI 的硬件列表中无法区分, 所以需要在命令行在找到具体的 PCI ID 才能直通给虚拟机, 避免错误的将安装了 PVE 系统的 nvem 分配给虚拟机导致 PVE 崩溃.
1 | # 查看 nvme 的 PCI 列表 |
上面的输出得知 PVE 安装在 nvme1n1, 因此 nvme0n1 就是应该直通给虚拟机的盘, 让我们找出它的 PCI ID:
1 | $ udevadm info -q path -n /dev/nvme0n1 | grep -oP '\d+:\d+\.\d+' |
找到了: 01:00.0.
或者这样也行:
1
2
3
4
5 $ cd /sys/block/nvme0n1/device && ls -al
...
lrwxrwxrwx 1 root root 0 Feb 19 17:23 device -> ../../../0000:01:00.0
...
LVM 扩容
刚开始只给了 32G 磁盘, 后面光安装显卡驱动就不够用了, 所以在 PVE 控制天新添加了 100G 空间给 Ubuntu:
1 | ➜ ~ lsblk |
其中 sdb 是新增的磁盘, 需要将这 100G 空间添加到根分区中:
1 | # 将 sdb 添加为一个物理卷(PV): |
参考:
磁盘共享
Ceph 节点简介
- Ceph MON:Ceph 监视器(Monitor),负责维护集群状态映射,帮助协调 Ceph 守护进程,并负责管理守护进程与客户端之间的身份验证。通常需要至少三个 MON 节点。
- Ceph MGR:Ceph 管理器守护进程(Manager Daemon),负责跟踪运行时指标和 Ceph 当前运行状态,并负责管理和公开 Ceph 集群信息。通常需要至少两个 MAN 节点。
- Ceph OSD:Ceph 对象存储守护进程(Object Storage Daemon),负责存储数据、处理数据复制、恢复、重新平衡,并通过检查其他 OSD 心跳向 Ceph 监视器和管理器提供监视信息。通常需要至少三个 OSD 节点。
- Ceph MDS:Ceph 元数据服务器(Metadata Server),负责存储元数据,并允许 CephFS 用户运行基本命令,而不为 Ceph 存储集群带来负担。
时间同步
1 | apt install ntpdate -y |
1 | crontab -e |
安装 Ceph
直接在 PVE Web 端安装, 但是安装后报错:
1 | rados_connect failed - No such file or directory (500) |
原因是 MON 节点启动失败, 但是在 Web 端有没有 MON 节点显示, 创建的时候报错:
1 | Multiple IPs for ceph public network '192.168.31.99/24' detected on nuc: 192.168.31.99 192.168.31.9 use 'mon-address' to specify one of them. (500) |
所以直接使用命令行来处理:
1 | # NUC 节点 |
配置 Ceph
NUC 节点上的 nvme:
1 | $ lsblk |
所以有 nvme0n1
, nvme2n1
和 nvme3n1
可以使用, Station 上的 nvme:
1 | $ lsblk |
上面是 PVE 系统盘, 另一块直通给 Ubuntu 使用了, 所以没有显示出来, 这个在数据迁移完成后再处理, 我们先将 NUC 节点的 3 块 nvme 添加到 OSD.
这里将每块 NVMe 盘拆分为 4 个分区,然后 将这些分区分别添加为独立的 OSD。这样可以让 Ceph 更加 高效利用 NVMe 资源,同时 减少 IO 阻塞,提高并发性能。
1 | for disk in /dev/nvme0n1 /dev/nvme2n1 /dev/nvme3n1; do |
1 | $ lsblk |
使用 pveceph osd create 命令,将这些分区作为 OSD:
1 | $ for part in {1..4}; do |
检查结果
1 | $ ceph osd tree |
接下来还需要配置存储池, 并将存储池添加到 RBD 和 CephFS.
使用
在 PVE 虚拟机中挂载 CephFS
创建 CephFS:
1
ceph fs new cephfs cephfs_metadata cephfs_data
添加到 PVE Web UI 中的 CephFS:
在 VM 或 LXC 中挂载 CephFS:
1
2mkdir /mnt/cephfs
mount -t ceph 192.168.31.99:6789:/ /mnt/cephfs -o name=admin,secret=<ceph-secret>
在虚拟机中使用 RBD(块存储)
查看 Ceph 存储池:
1
rbd pool ls
创建 RBD:
1
rbd create --size 10G vm_storage/test-disk
在 VM 内部映射 RBD 磁盘并进行基本设置:
1
2
3rbd map vm_storage/test-disk --name client.admin
mkfs.ext4 /dev/rbd0
mount /dev/rbd0 /mnt
参考:
PVE 上使用 Ceph 的想法算了总结了, 太复杂了, 现在 12 个 OSD 跑了一晚上数据还没有同步完成, 所以打算玩玩 ZFS, 家用应该也够了.
卸载 Ceph 🙉
1. 停止并禁用 Ceph 服务
首先,确保停止所有与 Ceph 相关的服务,包括 Monitor(mon)、OSD、MDS、Manager(mgr) 等:
1 | systemctl stop ceph-mon.target |
然后,禁用这些服务,以确保它们不会在系统重启后自动启动:
1 | systemctl disable ceph-mon.target |
2. 卸载 Ceph 软件包
卸载所有 Ceph 相关的包:
1 | apt-get remove --purge ceph ceph-common ceph-mds ceph-mon ceph-osd ceph-mgr ceph-fuse librados2 librgw1 libcephfs1 librados-dev librgw-dev libboost-iostreams1.58.0 libboost-filesystem1.58.0 libboost-system1.58.0 librados2 librgw1 |
这将删除所有 Ceph 相关的软件包及其依赖。
3. 删除 Ceph 配置和数据
删除 Ceph 的配置文件和数据目录:
1 | rm -rf /etc/ceph |
这些目录包含了 Ceph 的所有配置、日志和数据文件。
4. 清理 LVM 卷和 Ceph OSD 数据
如果您使用了 LVM 来管理 Ceph OSD,确保删除所有的 LVM 卷和卷组。首先,查看当前的 LVM 配置:
1 | sudo lvdisplay |
如果存在 Ceph 使用的 LVM 逻辑卷,卷组 或 物理卷,可以使用以下命令删除它们:
- 删除 LVM 逻辑卷:
1 | sudo lvremove /dev/ceph/<volume_group>/<logical_volume> |
- 删除 LVM 卷组:
1 | sudo vgremove <volume_group> |
- 删除物理卷:
1 | sudo pvremove /dev/<device> |
- 删除 Ceph OSD 设备:
1 | sudo wipefs -a /dev/<device> # 用实际的设备路径替换 <device> |
5. 删除 Ceph 相关的系统服务文件
清理 Ceph 服务文件,确保没有服务文件残留:
1 | rm -f /etc/systemd/system/ceph-* |
6. 清除 Ceph 集群配置和密钥
如果还没有删除 Ceph 集群的密钥环和配置文件,可以手动清理:
1 | rm -f /etc/ceph/ceph.client.admin.keyring |
7. 删除 ceph-crash
1 | systemctl stop ceph-crash |
8. 清理网络和存储设置
如果配置了 Ceph 使用的特定 网络接口 或 防火墙规则,请手动清理这些设置:
清理防火墙规则:使用 iptables 或 firewalld 清理 Ceph 使用的端口。
删除 虚拟网络接口(如 virtio 等)和 存储挂载点。
9. 重启系统
完成以上步骤后,最好重启系统以确保所有 Ceph 组件完全卸载:
1 | reboot |
10. 检查系统状态
重启后,可以使用以下命令检查系统中是否仍然存在与 Ceph 相关的进程或配置:
- 检查是否有 Ceph 相关的进程:
1 | ps aux | grep ceph |
- 检查 Ceph 配置是否被完全清除:
1 | ls /etc/ceph |
- 检查 LVM 是否有残留的 Ceph 卷:
1 | sudo lvdisplay |
- 使用以下命令检查系统日志是否仍有 Ceph 相关的错误:
1 | tail -f /var/log/syslog |
ZFS
我 2 块 1T 的 pcie4 Gen3 的 nvme 固态硬盘, 分别是 nvme2n1 和 nvme3n1, 还有一块 1T 的 pcie4 Gen4: nvme0n1. 而且后期我可能还会增加其他 nvme 和 ssd. 现在我想在 pve 集群中使用 ZFS, 初步计划是让 nvme0n1 划分为 2 个分区, 分别作为 zfs 的读写缓存, 而其他盘作为数据盘.
下面是具体操作:
1 | parted /dev/nvme0n1 |
1 | zpool create nvmes mirror /dev/nvme2n1 /dev/nvme3n1 |
使用
1. 在 PVE 宿主机中使用 ZFS 存储
PVE 支持直接在宿主机中使用 ZFS 存储池。可以将 ZFS 存储池挂载到宿主机的特定目录,然后将虚拟机和 LXC 容器配置为使用该存储。
挂载 ZFS 存储:
1 | zfs set mountpoint=/mnt/nvmes nvmes |
这将把你的 mypool ZFS 存储池挂载到 /mnt/nvmes 目录。可以在这个目录下创建文件并访问。
创建 ZFS 快照:
如果你想对 ZFS 存储池进行快照,可以使用:
1 | zfs snapshot nvmes@snapshot_name |
2. 在虚拟机中使用 ZFS 存储
要在虚拟机中使用 ZFS 存储,可以通过以下两种方式:
方式 1: 使用 ZFS 作为虚拟机的磁盘
在宿主机中创建一个 ZFS 数据集作为虚拟机的磁盘:
1 | zfs create nvmes/nvmes-disk |
在 PVE 中的虚拟机配置中,将 nvmes/nvmes-disk 数据集作为虚拟磁盘挂载给虚拟机。例如,通过 PVE Web 界面,可以在虚拟机的硬盘设置中选择该数据集,或者通过命令行使用:
1 | qm set VMID -ide0 /dev/zvol/nvmes/nvmes-disk |
方式 2: 使用 ZFS 文件共享给虚拟机
如果不希望直接将 ZFS 存储池作为虚拟磁盘,可以将 ZFS 存储池中的某个目录挂载为共享目录,虚拟机通过网络访问。
- 在宿主机中创建目录:
1 | mkdir /mnt/nvmes/share |
- 设置权限:
1 | chmod -R 777 /mnt/nvmes/share |
- 在虚拟机内挂载 NFS 或 Samba 共享(见下面的“共享 ZFS 存储到局域网”部分)。
3. 在 LXC 容器中使用 ZFS 存储
LXC 容器与虚拟机类似,也可以直接访问宿主机上的 ZFS 存储池。可以通过以下方式将 ZFS 存储挂载到容器内部:
- 挂载 ZFS 存储到容器目录:
可以将宿主机上的 ZFS 存储池挂载到容器的某个目录。假设将 nvmes/share 挂载到容器中的 /mnt/storage,可以在容器配置中添加以下配置:
编辑 /etc/pve/lxc/VMID.conf 配置文件,添加:
1 | mp0: /mnt/nvmes/share,mp=/mnt/storage |
- 重新启动容器:
1 | pct restart VMID |
容器就能访问宿主机上的 ZFS 存储了。
4. 在局域网中共享 ZFS 存储
如果希望将 ZFS 存储共享给局域网中的其他设备(比如其他计算机、服务器或虚拟机),可以使用 NFS 或 Samba。
使用 NFS 共享 ZFS 存储:
- 安装 NFS 服务:
1 | apt install nfs-kernel-server |
- 配置 NFS 共享目录:
在 /etc/exports 文件中添加 ZFS 存储目录:
1 | /mnt/nvmes/share *(rw,sync,no_subtree_check) |
- 重新启动 NFS 服务:
1 | systemctl restart nfs-kernel-server |
- 在客户端(其他计算机)挂载共享:
1 | mount -t nfs <宿主机_IP>:/mnt/nvmes/share /mnt/nfs_share |
使用 Samba 共享 ZFS 存储:
- 安装 Samba:
1 | apt install samba |
- 配置共享目录:
编辑 /etc/samba/smb.conf 文件,添加以下配置:
1 | [nvmes] |
1 | chmod -R 775 /mnt/nvmes |
- 重启 Samba 服务:
1 | systemctl restart smbd |
- 在客户端(其他计算机)访问共享:
通过 smb:// 协议挂载共享:
1 | smbclient //宿主机_IP/nvmes |
网络
qemu-guest-agent
虚拟机执行命令:
1 | sudo apt install qemu-guest-agent -y |
不过报错了:
1 | (base) ➜ ~ sudo systemctl start qemu-guest-agent |
虚拟机内的 QEMU Guest Agent 无法找到 /dev/virtio-ports/org.qemu.guest_agent.0 设备,通常是因为 PVE 的 VM 配置没有正确启用 QEMU Guest Agent。
所以需要在 PVE 宿主机上开启虚拟机的 Guest Agent:
1 | qm set 102 --agent enabled=1 |
然后还是启动失败:
1 | (base) ➜ ~ sudo systemctl status qemu-guest-agent |
查阅资料后发现是需要添加一个 virtio-serial 的设备:
1 | qm set 102 -serial0 socket |
然后再次启动 agent:
1 | (base) ➜ ~ sudo systemctl status qemu-guest-agent |
显示启动成功了, 能够正常获取 IP 信息:
服务器上查看虚拟机信息:
1 | qm agent <vmid> <cmd> |
参考:
Cloud-init
参考
备份
https://zhuanlan.zhihu.com/p/661921259
https://kb.synology.cn/zh-cn/DSM/tutorial/back_up_restore_proxmox_vm