|
长期以来都是小透明和资深潜水党在社区里吸取大佬们的营养和指导, 近日折腾了一下小主机和 aio, 并且将过程整理成教程在社区里发表出来, 不求能够指导别人, 但求别人能有个参考, 并且一起交流学习.
各位说话好听 头发多 精力旺盛 过年涨薪的 佬们 觉得可以的话 就给我点个赞吧.
另外本人热爱分享, 热爱搞机, 馒头 pt 上传100T+,发种100+,做种500+, 做种时间一年(数据准备另开一贴贴出), 希望基于此能得到大佬的厚爱发个邀请:(btschool,聆音, 红叶,emp峨眉派/P0 rNbay都行,), 丰富下自己的下载中心, 再过几周我就可以回来发馒头药了
系列文章目录: 自己动手搭建了 PVE all in one 之后,在使用过程中,随着我们需求的变化和实际体验的反馈,对各个虚拟机的配置也会有所调整,例如内存不够了,存储空间不够了,不同虚拟机的软硬资源分配要重新平衡等等。本文从个人遇到过的几个案例入手,简述 PVE 下的系统管理。
扩容虚拟机硬盘
Windows 的磁盘的扩容步骤与群晖一样,后面分区的步骤则采用 UI 的方式比较简单,不做介绍了。 Ubuntu 系统则较为复杂,如果要将新分区融入到老分区,挂载给 / 根目录,由于分区的非连续性,需要执行分区的交换操作,风险较高,我所以就直接重装系统了,重新分配个大的空间一劳永逸。
PVE 下群晖磁盘扩容。
在 PVE 中给虚拟机分配磁盘空间的卷组是默认的 local-lvm. 据此使用 lvdisplay lvreduce lvextend 等命令进行管理. 使用 lvdisplay 命令查看分配给虚拟机的逻辑卷, 以下列出群晖系统其中一个逻辑卷,其名字为 vm-106-disk-1, 对应下图中的 PVE WEBUI 中 群晖系统的磁盘。可以看见 在一开始分配了 96GB 的容量, 映射大小为 70.68%, 就是实际使用了 96GB*0.7, 但是我们分配了106GB,可能未完全分配吧。
- <pre style="overflow-wrap: initial; background: rgb(248, 248, 250); border-radius: 4px; font-size: 0.9em; overflow: auto; padding: calc(0.888889em); word-break: initial; color: rgb(25, 27, 31);"><code class="language-bash" style="background-color: inherit; border-radius: 0px; font-family: Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; font-size: inherit;">$ lvdisplay
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);"># ...</span>
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);"># ...</span>
- --- Logical volume ---
- LV Path /dev/pve/vm-106-disk-1
- LV Name vm-106-disk-1
- VG Name pve
- LV UUID 0RzgyO-61vc-7ybv-8Z1h-vfv1-xoY6-1lhkfq
- LV Write Access read/write
- LV Creation host, <span class="nb" style="color: rgb(23, 114, 246);">time</span> pvesmall, 2024-09-25 23:16:07 +0800
- LV Pool name data
- LV Status available
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);"># open 1</span>
- LV Size 96.00 GiB
- Mapped size 70.68%
- Current LE <span class="m" style="color: rgb(23, 114, 246);">24576</span>
- Segments <span class="m" style="color: rgb(23, 114, 246);">1</span>
- Allocation inherit
- Read ahead sectors auto
- - currently <span class="nb" style="color: rgb(23, 114, 246);">set</span> to <span class="m" style="color: rgb(23, 114, 246);">256</span>
- Block device 252:7
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);">#...</span>
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);">#...</span></code></pre>
复制代码

PVE WEBUI 中 群晖系统的磁盘
假如空间告急了,我们需要运行 lvextend 命令给它扩容,也可以在 webui 操作。 虽然 webui 无法用到 缩容的功能,但实际上也是有的,不过缩容命令有风险,你最好清楚你在干什么,否则不要缩容,我因为直接缩容后,被缩容的虚拟机系统盘被截断了部分数据,无法启动了。
- <pre style="overflow-wrap: initial; background: rgb(248, 248, 250); border-radius: 4px; font-size: 0.9em; overflow: auto; padding: calc(0.888889em); word-break: initial; color: rgb(25, 27, 31);"><code class="language-bash" style="background-color: inherit; border-radius: 0px; font-family: Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; font-size: inherit;"><span class="c1" style="font-style: italic; color: rgb(145, 150, 161);"># 扩展磁盘大小</span>
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);"># 调整之后 PVE 页面显示并没有更新,实测可以在页面操作再增加 1G 的方式触发更新</span>
- $ lvextend -L +100G /dev/pve/vm-061-disk-1
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);"># 缩减磁盘大小</span>
- <span class="c1" style="font-style: italic; color: rgb(145, 150, 161);"># $ lvreduce -L -10G /dev/pve/vm-106-disk-1</span></code></pre>
复制代码
接着(可能需要重启群晖), 可以在存储管理器看见磁盘的容量变化了, 但是存储池的大小固定, 即新增的空间处于未分区的状态, 未分配的状态。
通过 ssh 登录到 群晖 root 账号,列出设备信息
- <pre style="overflow-wrap: initial; background: rgb(248, 248, 250); border-radius: 4px; font-size: 0.9em; overflow: auto; padding: calc(0.888889em); word-break: initial;"><code class="language-bash" style="background-color: inherit; border-radius: 0px; font-family: Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; font-size: inherit;">ls /dev/sd* /dev/sata*</code></pre>
复制代码

上述结果表明我的群晖系统有 /dev/sata1, sata3, sata4, sata5 四个 sata 硬盘设备,对应 pve webui 中的磁盘分配。

接着使用 fdisk 查看哪个sata磁盘才是需要扩容的. 首先执行命令 fdisk /dev/sata1 进入 sata1 设备的磁盘管理界面,接着按下 p 命令然后回车,来查看该磁盘的分区情况, 在如下打印的信息可以知道,/dev/sata1 的磁盘有96GB的空间,有三个分区 sata1p1, sata1p2, sata1p3, 这三个分区是群晖创建的,前两个相当于系统分区,最后一个作为存储池存储数据。这里是已经最大利用的结果,如果仅仅执行了 lvextend 命令扩容后,第三个分区 /dev/sata1p3 的大小会小于 /dev/sata1 总空间。
- <pre style="overflow-wrap: initial; background: rgb(248, 248, 250); border-radius: 4px; font-size: 0.9em; overflow: auto; padding: calc(0.888889em); word-break: initial;"><code class="language-bash" style="background-color: inherit; border-radius: 0px; font-family: Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; font-size: inherit;">root@home-nas-SA6400:~# fdisk /dev/sata1
- Welcome to fdisk <span class="o" style="font-weight: 600;">(</span>util-linux 2.33.2<span class="o" style="font-weight: 600;">)</span>.
- Changes will remain in memory only, <span class="k" style="font-weight: 600;">until</span> you decide to write them.
- Be careful before using the write command.
- Command <span class="o" style="font-weight: 600;">(</span>m <span class="k" style="font-weight: 600;">for</span> <span class="nb" style="color: rgb(23, 114, 246);">help</span><span class="o" style="font-weight: 600;">)</span>: p
- Disk /dev/sata1: <span class="m" style="color: rgb(23, 114, 246);">96</span> GiB, <span class="m" style="color: rgb(23, 114, 246);">103079215104</span> bytes, <span class="m" style="color: rgb(23, 114, 246);">201326592</span> sectors
- Disk model: HARDDISK
- Units: sectors of <span class="m" style="color: rgb(23, 114, 246);">1</span> * <span class="nv" style="color: rgb(23, 114, 246);">512</span> <span class="o" style="font-weight: 600;">=</span> <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes
- Sector size <span class="o" style="font-weight: 600;">(</span>logical/physical<span class="o" style="font-weight: 600;">)</span>: <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes / <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes
- I/O size <span class="o" style="font-weight: 600;">(</span>minimum/optimal<span class="o" style="font-weight: 600;">)</span>: <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes / <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes
- Disklabel type: dos
- Disk identifier: 0x3f977b2b
- Device Boot Start End Sectors Size Id Type
- /dev/sata1p1 <span class="m" style="color: rgb(23, 114, 246);">8192</span> <span class="m" style="color: rgb(23, 114, 246);">16785407</span> <span class="m" style="color: rgb(23, 114, 246);">16777216</span> 8G fd Linux raid autodetect
- /dev/sata1p2 <span class="m" style="color: rgb(23, 114, 246);">16785408</span> <span class="m" style="color: rgb(23, 114, 246);">20979711</span> <span class="m" style="color: rgb(23, 114, 246);">4194304</span> 2G fd Linux raid autodetect
- /dev/sata1p3 <span class="m" style="color: rgb(23, 114, 246);">21241856</span> <span class="m" style="color: rgb(23, 114, 246);">201326591</span> <span class="m" style="color: rgb(23, 114, 246);">180084736</span> 85.9G fd Linux raid autodetect</code></pre>
复制代码
同理查看 /dev/sata4. 这个硬盘是我的大盘。用来存数据,冷备数据。 - <pre style="overflow-wrap: initial; background: rgb(248, 248, 250); border-radius: 4px; font-size: 0.9em; overflow: auto; padding: calc(0.888889em); word-break: initial;"><code class="language-bash" style="background-color: inherit; border-radius: 0px; font-family: Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; font-size: inherit;">root@home-nas-SA6400:~# fdisk /dev/sata4
- Welcome to fdisk <span class="o" style="font-weight: 600;">(</span>util-linux 2.33.2<span class="o" style="font-weight: 600;">)</span>.
- Changes will remain in memory only, <span class="k" style="font-weight: 600;">until</span> you decide to write them.
- Be careful before using the write command.
- Command <span class="o" style="font-weight: 600;">(</span>m <span class="k" style="font-weight: 600;">for</span> <span class="nb" style="color: rgb(23, 114, 246);">help</span><span class="o" style="font-weight: 600;">)</span>: p
- Disk /dev/sata4: 5.2 TiB, <span class="m" style="color: rgb(23, 114, 246);">5716601470976</span> bytes, <span class="m" style="color: rgb(23, 114, 246);">11165237248</span> sectors
- Disk model: HARDDISK
- Units: sectors of <span class="m" style="color: rgb(23, 114, 246);">1</span> * <span class="nv" style="color: rgb(23, 114, 246);">512</span> <span class="o" style="font-weight: 600;">=</span> <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes
- Sector size <span class="o" style="font-weight: 600;">(</span>logical/physical<span class="o" style="font-weight: 600;">)</span>: <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes / <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes
- I/O size <span class="o" style="font-weight: 600;">(</span>minimum/optimal<span class="o" style="font-weight: 600;">)</span>: <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes / <span class="m" style="color: rgb(23, 114, 246);">512</span> bytes
- Disklabel type: **
- Disk identifier: D13C6280-3BFC-42A1-A456-B801FA78A6E3
- Device Start End Sectors Size Type
- /dev/sata4p1 <span class="m" style="color: rgb(23, 114, 246);">8192</span> <span class="m" style="color: rgb(23, 114, 246);">16785407</span> <span class="m" style="color: rgb(23, 114, 246);">16777216</span> 8G Linux RAID
- /dev/sata4p2 <span class="m" style="color: rgb(23, 114, 246);">16785408</span> <span class="m" style="color: rgb(23, 114, 246);">20979711</span> <span class="m" style="color: rgb(23, 114, 246);">4194304</span> 2G Linux RAID
- /dev/sata4p3 <span class="m" style="color: rgb(23, 114, 246);">21241856</span> <span class="m" style="color: rgb(23, 114, 246);">11165032447</span> <span class="m" style="color: rgb(23, 114, 246);">11143790592</span> 5.2T Linux RAID
- Command <span class="o" style="font-weight: 600;">(</span>m <span class="k" style="font-weight: 600;">for</span> <span class="nb" style="color: rgb(23, 114, 246);">help</span><span class="o" style="font-weight: 600;">)</span>:</code></pre>
复制代码
此时要扩容要将 /dev/sata1 新扩容得到的空间全部分配给群晖 用作存储池, 需要使用 parted 工具,并执行命令
- parted /dev/sata1 resizepart 3100%
复制代码
此时再到群晖对应的存储池管理页面, 会看到有可以扩充容量的 超链接, 点击扩充即可.

这里是示意图,实际会有个让你扩充的按钮最后通过在群晖上执行几个命令查看即可,或者你在群晖的存储池页面已经看到增长了的空间,那就大功告成了。
- <div>df -h
- fdisk /dev/sata1
- fdisk -l</div>
复制代码
系统备份(包括套件及其数据) docker 容器备份Openwrt 备份
如下是一个 Openwrt 的备份脚本,收集 ssh、网络接口、防火墙、passwall、docker根目录的容器配置文件夹等数据, 并打包到 /tmp/router.backup.20240101120101.tar.gz 日后将他解压和重新覆盖源文件或者提取旧配置恢复即可。
- config_files=(
- # ssh 配置和验证密钥
- "/etc/config/dropbear"
- "/etc/dropbear/authorized_keys"
- # ddns-go
- "/etc/ddns-go/ddnsgo-config.yaml"
-
- # 网络接口
- "/etc/config/network"
- # dhcpdns
- "/etc/config/dhcp"
-
- # 防火墙
- "/etc/config/firewall"
-
- # 无缝网络
- # passwall **
- "/etc/config/passwall"
- "/etc/config/passwall_server"
- "/usr/share/passwall/rules/direct_ip"
- "/usr/share/passwall/rules/direct_host"
- "/usr/share/passwall/rules/proxy_host"
- "/usr/share/passwall/rules/proxy_ip"
- # docker 容器配置
- # nginx proxy manager 配置
- "/mnt/sata1-4/docker/user_containers/nginx_proxy_manager"
- )
- backup_helper() {
- backup_dir=/tmp/router.backup.$(date +"%Y.%m.%d.%H.%M.%S")
- mkdir $backup_dir
- for file in "${config_files[@]}"; do
- cp -r $file $backup_dir/
- done
- tar -C /tmp -czf $backup_dir.tar.gz $(basename $backup_dir)
- echo "备份文件为 ${backup_dir}.tar.gz"
- }
复制代码
群晖备份群晖系统备份分为如下几个类别 - 群晖系统偏好设置,需要登录群晖账号进行云备份
- 群晖套件及其数据,通过 Hyper Backup 备份
- docker 容器数据, 参考 Docker中容器的备份、恢复和迁移 - wq3435 - 博客园 或者直接打包 你的docker目录, 首先通过 du -sh /volume1/docker 查看 docker 目录有多大,接着执行命令打包 docker 目录: tar -C /volume1 -czf /tmp/docker.backup.$(date +"%Y.%m.%d.%H.%M.%S").tar.gz docker
- 整个群晖系统镜像备份。首先到 pve 的 webui 将几个大盘 分离,只剩下安装套件的磁盘和引导磁盘(相当于系统盘,体积小),然后立即备份,日后崩了也容易恢复。
Ubuntu 备份
跟 Openwrt 比较相似, 根据需要可以在 config_files 添加需要备份的文件。如果有重复文件名的话,可以修改一下命名规则。
- onfig_files=(
- # ssh
- "$HOME/.ssh"
- # shell
- "$HOME/.zshrc"
- "$HOME/.zsh_aliases"
- "$HOME/.zsh_history"
- "$HOME/.bashrc"
- "$HOME/.bash_history"
- "$HOME/.bash_logout"
- "$HOME/.p10k.zsh"
- "$HOME/.mru"
- # tmux session manager
- "$HOME/.tmux.conf"
- # git
- "$HOME/.gitconfig"
- # vim
- "$HOME/.config/nvim"
- # mysql
- "$HOME/.myclirc"
- "$HOME/.mycli-history"
- "$HOME/.mysql_history"
- # vscode
- "$HOME/.vscode-server/extensions/extensions.json"
- "$HOME/.vscode-server/data/Machine/settings.json"
- # 网络接口
- "/etc/netplan"
- # docker 容器配置
- "$HOME/containers"
- )
- backup_helper() {
- backup_dir=/tmp/bighomelab.backup.$(date +"%Y.%m.%d.%H.%M.%S")
- mkdir $backup_dir
- for file in "${config_files[@]}"; do
- cp -r $file $backup_dir/
- done
- tar -C /tmp -czf $backup_dir.tar.gz $(basename $backup_dir)
- echo "备份文件为 ${backup_dir}.tar.gz"
- }
复制代码
部署 MySQL
这其实不属于系统管理了,属于一些应用的数据库了。 同样首先创建目录 mysql, 及其配置文件夹和日志文件夹,同时因为数据量比较大,我将它保存到另外一个位置 /volume2/AppData/mysql 同时准备好 my.cnf mysql 配置文件,如果没有不准备也行,他会采用默认的,这样就需要删掉 docker-compose.yml 中卷绑定的一行 /volume1/docker/mysql/my.cnf:/etc/mysql/my.cnf
- [ ! -d /volume1/docker/mysql/log ] && mkdir -p /volume1/docker/mysql/log
- [ ! -d /volume2/AppData/mysql ] && mkdir -p /volume2/AppData/mysql
复制代码
接着将如下内容拷贝到新创建的 /volume1/docker/mysql/docker-compose.yml 文件中,进入 cd /volume1/docker/mysql 目录,并且执行 docker up -d 即可运行,接着通过执行 docker ps 查看容器是否正常启动,通过 docker logs container_id 查看日志输出是否正常。然后登录上去看看。
- # 部署在群晖上
- version: '3'
- services:
- mysql-test:
- image: mysql:8.0
- restart: always
- container_name: mysql_container
- hostname: mysqldb
- environment:
- MYSQL_ROOT_PASSWORD: 111111
- TZ: Asia/Shanghai
- MYSQL_DATABASE: db # 这里你需要创建的 数据库名称
- MYSQL_USER: foo # 用户名
- MYSQL_PASSWORD: 111111 # 用户密码
- ports:
- - 3306:3306 # 暴露的端口号。
- volumes:
- - /volume1/docker/mysql/log/mysqld.log:/var/log/mysqld.log # 日志
- - /volume1/docker/mysql/my.cnf:/etc/mysql/my.cnf # 配置文件
- - /volume2/AppData/mysql:/var/lib/mysql # 数据目录
- healthcheck:
- test: ["CMD-SHELL", "curl --silent localhost:3306 >/dev/null || exit 1"]
- interval: 10s
- timeout: 10s
- retries: 3
复制代码
将外置 USB 营口盘挂载到 PVE 下并建立卷组提供给群晖使用
sata 硬盘直通就比较简单了, 这里讲讲如何将 usb 设备当做 sata 设备给 群晖用. 此操作会导致删除磁盘所有数据!!!, 请确保数据已经经备份!!! 查看哪个设备是 usb 设备, 可见以下设备的容量吻合
- ❯ lsblk
- NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
- sda 8:0 0 2.7T 0 disk
- ├─vg_usb-thinpool_tmeta 252:14 0 352M 0 lvm
- │ └─vg_usb-thinpool 252:16 0 2.7T 0 lvm
- └─vg_usb-thinpool_tdata 252:15 0 2.7T 0 lvm
- └─vg_usb-thinpool 252:16 0 2.7T 0 lvm
- nvme0n1
复制代码
删除所有分区以及残余信息, 避免创建物理卷时失败. 通过 命令 fdisk /dev/sda 进入管理界面, 后按 p 查看分区, 按 d 删除指定分区, 直至删除全部.
- sudo fdisk /dev/sda
- Command (m for help): p
- Disk /dev/sda: 2.73 TiB, 3000592986112 bytes, 5860533176 sectors
- Disk model: 00FYYZ-01UL1B2
- Units: sectors of 1 * 512 = 512 bytes
- Sector size (logical/physical): 512 bytes / 4096 bytes
- I/O size (minimum/optimal): 4096 bytes / 4096 bytes
- Disklabel type: **
- Disk identifier: 2999E1B9-99C7-4419-97A2-6ED1033D244B
- Command (m for help): d
- No partition is defined yet!
复制代码
同理使用 gdisk 继续删除,
sudo gdisk /dev/sda
清除残留信息:
- # 使用 wipefs 清除分区表. wipefs 工具可以清除磁盘上的文件系统、RAID 或分区表签名。
- sudo wipefs --all /dev/sda
- # 使用 dd 清除磁盘头部. 你也可以使用 dd 命令来清除磁盘头部的一些数据,以确保没有任何残留的分区信息。
- sudo dd if=/dev/zero of=/dev/sda bs=1M count=100
复制代码
再次尝试创建物理卷 (PV)
sudo pvcreate /dev/sda
创建卷组 (VG)
sudo vgcreate vg_usb /dev/sda
将磁盘100%的空间来创建 thinpool
sudo lvcreate -l 100%FREE --thinpool thinpool vg_usb --chunksize 512k -Zn
在 webui, 从该卷组中添加存储, 供备份或者虚拟机使用. 接下来就可以像原本的 lvm-d 那样正常使用了.

将第二块硬盘加入卷组:(这里重新操作,连同第一块硬盘一起搞, 参考 chat**)
要在 PVE 中使用两块 USB 硬盘 /dev/sdb 和 /dev/sdc 创建一个新的卷组,并设置 LVM 薄层(LVM Thin Provisioning)来作为 VM 的磁盘,您可以按照以下步骤操作:
1. 初始化物理卷: 首先,需要将这两块硬盘初始化为物理卷。
1pvcreate /dev/sdb /dev/sdc
2. 创建卷组: 接下来,创建一个卷组并将这两块物理卷添加到其中。假设您想将卷组命名为 vg_usb。
1vgcreate vg_usb /dev/sdb /dev/sdc
3. 创建thinpool: 在卷组中创建一个薄池。薄池是一个特殊的逻辑卷,用于管理多个薄置备的逻辑卷。假设您想创建一个名为 thinpool 的薄池,大小为 5300GB, 因为我的两个硬盘加起来是接近6T的空间.
lvcreate -L 5300G -T vg_usb/thinpool
4. 创建逻辑卷: 使用薄池创建一个或多个逻辑卷。这些逻辑卷可以动态扩展,非常适合用作虚拟机的磁盘。例如,创建一个名为 `vm-106-disk-0` 的 5200GB 薄置备逻辑卷。
lvcreate -V 5200GB -T vg_usb/thinpool -n vm-106-disk-0
5. 验证创建的逻辑卷: 您可以使用以下命令验证创建的逻辑卷和薄池的信息。
lvdisplay vg_usb
6. 在 Proxmox VE 中使用新的逻辑卷: 最后,在 Proxmox VE 的 Web 界面中,将新创建的逻辑卷添加为存储资源。进入“数据中心” -> “存储” -> “添加” -> “LVM-Thin”,选择相应的卷组和薄池。
通过以上步骤,您就可以成功地在 PVE 中使用两块 USB 硬盘创建一个 LVM 薄层卷组,并将其用作虚拟机的磁盘了。
最后在 群晖 虚拟机界面添加磁盘即可. 并且重启, 然后再创建存储池和存储空间即可.

|
|