Compare commits

...
69 Commits
Author SHA1 Message Date
CallMeR 9f86e73f61 更新 PVE 虚拟机克隆 2023-06-28 13:04:33 +08:00
CallMeR fdceec75ba 更新 PVE 制作虚拟机模板 2023-06-28 00:30:32 +08:00
CallMeR 182a939f5e 更新 PVE 系统调整 2023-06-28 00:24:19 +08:00
CallMeR b71d013431 更新 PVE 虚拟机克隆 2023-06-28 00:12:07 +08:00
CallMeR e64d6f9b7f 更新 PVE 创建模板虚拟机 2023-06-27 22:32:10 +08:00
CallMeR 5c71c12916 更新 PVE 虚拟机克隆 2023-06-27 17:17:46 +08:00
CallMeR 56cf129f79 更新 PVE 制作虚拟机模板 2023-06-27 17:07:42 +08:00
CallMeR 452ce84b1e 更新 PVE 创建模板虚拟机 2023-06-27 16:47:55 +08:00
CallMeR 4359c9f07e 更新 PVE 创建模板虚拟机 2023-06-27 16:39:05 +08:00
CallMeR 7d03feae01 更新 PVE 初始化配置 2023-06-27 15:51:33 +08:00
CallMeR ded81638c7 更新 PVE 初始化配置 2023-06-27 15:47:44 +08:00
CallMeR dfdc931239 更新 PVE 虚拟机克隆 2023-06-27 15:34:24 +08:00
CallMeR 4d5ca028cd 更新 PVE 虚拟机自动备份 2023-06-27 15:31:32 +08:00
CallMeR a4d9985094 更新 PVE 虚拟机克隆 2023-06-27 14:43:14 +08:00
CallMeR 00fa47d9ba 更新 PVE 创建模板虚拟机 2023-06-27 14:26:32 +08:00
CallMeR bbfec4df8f 更新 PVE 初始化配置 2023-06-27 13:08:33 +08:00
CallMeR f92cd8ed93 更新 PVE 虚拟机克隆 2023-06-27 01:43:46 +08:00
CallMeR 5400e733d2 更新 README 2023-06-27 01:41:24 +08:00
CallMeR fd80ec7b1a 更新 PVE 初始化配置 2023-06-27 01:29:45 +08:00
CallMeR 6ae69e21c2 更新 PVE 虚拟机克隆 2023-06-27 01:23:12 +08:00
CallMeR 10b623cd52 更新 PVE 虚拟机克隆 2023-06-27 01:21:19 +08:00
CallMeR e6161182e7 更新 PVE 制作虚拟机模板 2023-06-27 01:05:22 +08:00
CallMeR 88891aa1f5 更新 PVE 制作虚拟机模板 2023-06-26 21:58:03 +08:00
CallMeR d3b67c178e 更新 PVE 创建模板虚拟机 2023-06-26 21:47:41 +08:00
CallMeR 3313d23879 更新 PVE 初始化配置 2023-06-26 21:28:58 +08:00
CallMeR 5d594998e3 更新 PVE 制作虚拟机模板 2023-06-26 20:29:47 +08:00
CallMeR 525ece3b7b 更新 PVE 创建模板虚拟机 2023-06-26 20:13:44 +08:00
CallMeR 21b1156c06 更新 PVE 初始化配置 2023-06-26 20:10:59 +08:00
CallMeR 32e67f530b 更新 PVE 系统安装 2023-06-26 20:05:46 +08:00
CallMeR 91998771d3 更新 PVE 系统调整 2023-06-26 20:03:38 +08:00
CallMeR 66bf4d3782 更新 PVE 系统调整 2023-06-26 19:41:46 +08:00
CallMeR b5febddb8a 更新 PVE 系统调整 2023-06-26 19:34:00 +08:00
CallMeR b4f173b2cc 更新 PVE 制作虚拟机模板 2023-06-26 19:17:52 +08:00
CallMeR 2239a0f309 更新 PVE 制作虚拟机模板 2023-06-26 19:07:11 +08:00
CallMeR 475e4bfccb 更新 PVE 制作虚拟机模板 2023-06-26 18:53:43 +08:00
CallMeR c5fb7b4e57 更新 PVE 系统调整 2023-06-26 18:46:38 +08:00
CallMeR 90d8bccd46 更新 PVE 系统调整 2023-06-26 18:43:18 +08:00
CallMeR cc41053e85 更新 PVE 初始化配置 2023-06-26 18:15:01 +08:00
CallMeR 025d3ae558 更新 PVE 制作虚拟机模板 2023-06-26 18:07:49 +08:00
CallMeR 2dc5780c17 更新 PVE 制作虚拟机模板 2023-06-26 17:45:34 +08:00
CallMeR 2cc4e7a81c 更新 PVE 制作虚拟机模板 2023-06-26 17:38:44 +08:00
CallMeR 6e01bd7a6b 更新 PVE 系统调整 2023-06-26 15:42:43 +08:00
CallMeR 6b035dd176 更新 PVE 初始化配置 2023-06-26 15:36:23 +08:00
CallMeR 294d2a1473 更新 PVE 创建模板虚拟机 2023-06-26 15:27:33 +08:00
CallMeR db464c6e83 更新 PVE 制作虚拟机模板 2023-06-26 15:21:46 +08:00
CallMeR bef84818ec 更新 PVE 制作虚拟机模板 2023-06-26 13:30:46 +08:00
CallMeR f5cd88087b 更新 PVE 制作虚拟机模板 2023-06-26 02:06:14 +08:00
CallMeR 1816de1e1c 更新 PVE 创建模板虚拟机 2023-06-26 01:31:34 +08:00
CallMeR b72a110bee 更新 PVE 创建模板虚拟机 2023-06-25 22:29:18 +08:00
CallMeR 1081883de7 更新 PVE 创建模板虚拟机 2023-06-25 21:37:48 +08:00
CallMeR e789308ae7 更新 PVE 系统调整 2023-06-25 15:47:47 +08:00
CallMeR 79531b8431 更新 PVE 系统调整 2023-06-25 15:43:02 +08:00
CallMeR 1bc34548c2 更新 PVE 系统调整 2023-06-25 15:37:44 +08:00
CallMeR 19bb9605da 更新 PVE 系统调整 2023-06-25 15:33:49 +08:00
CallMeR c6c02fb6fc 更新 PVE 系统调整 2023-06-25 15:00:46 +08:00
CallMeR a120553cda 更新 PVE 系统调整 2023-06-25 14:47:49 +08:00
CallMeR 45f67c0575 更新 PVE 初始化配置 2023-06-25 01:07:39 +08:00
CallMeR 8ec0a03aef 更新 PVE 初始化配置 2023-06-25 00:55:36 +08:00
CallMeR 4682d5b06f 更新 PVE 初始化配置 2023-06-25 00:48:47 +08:00
CallMeR 9b7a9c4480 更新 PVE 初始化配置 2023-06-24 20:14:54 +08:00
CallMeR 9ee5a6eab3 更新 PVE 初始化配置 2023-06-24 12:49:49 +08:00
CallMeR 31185a456b 更新 PVE 初始化配置 2023-06-24 12:28:57 +08:00
CallMeR 512f178314 更新 PVE 初始化配置 2023-06-24 12:24:27 +08:00
CallMeR dde5487fcf 更新设置 BIOS 2023-06-23 20:29:28 +08:00
CallMeR 7a53c915f1 更新 PVE 系统安装 2023-06-23 20:21:12 +08:00
CallMeR 91c6fc7394 更新 PVE 系统安装 2023-06-23 20:00:23 +08:00
CallMeR d1c7e090ab 更新设置 BIOS 2023-06-23 17:33:19 +08:00
狐狸Nomad 81ad54cbe9 更新系统 hostname 2023-03-07 18:51:48 +08:00
狐狸Nomad 33518cec15 更新内网地址规划 2023-03-07 14:24:58 +08:00
177 changed files with 1308 additions and 1193 deletions
+33 -24
View File
@@ -1,67 +1,76 @@
## 1.虚拟化功能确认
## 1.虚拟化选项
进入 `Advanced` 菜单的子菜单 `CPU Configuration`
![cpu设置](img/p00/bios_cpu.png)
![cpu设置](img/p00/bios_cpu.jpeg)
检查 `Intel (VMX) Virtualization Technology` 选项为 `Enabled` 状态:
![cpu设置-vmx](img/p00/bios_cpu_vmx.png)
![cpu设置-vmx](img/p00/bios_cpu_vmx.jpeg)
## 2.CPU功耗确认
## 2. CPU 功耗
进入 `Advanced` 菜单的子菜单 `Power & Performance`
![cpu功耗](img/p00/bios_power.png)
![cpu功耗](img/p00/bios_power.jpeg)
进入 `CPU - Power Management Control`
![cpu功耗控制](img/p00/bios_power_control.png)
![cpu功耗控制](img/p00/bios_power_control.jpeg)
检查 `C states` **默认** 选项为 `Enabled` 状态
检查 `C states` **默认** 选项为 `Enabled` 状态,如果遇到网卡 **无法跑满** 的情况,可以尝试将该选项关闭:
如果遇到网卡 **无法跑满** 的情况,可以尝试将该选项关闭:
![c-states](img/p00/bios_c_states.png)
![c-states](img/p00/bios_c_states.jpeg)
再进入 `HDC Control` 菜单的子菜单 `View/Configure Turbo Options`
![turbo选项](img/p00/bios_turbo_options.png)
![turbo选项](img/p00/bios_turbo_options.jpeg)
检查以下内容,适当调整以改变功耗墙:
- `Power Limit 1 Override` 选项:`Enabled`
- `Power Limit 1` 选项:`15000`
- `Power Limit 1` 选项:`50000`
- `Power Limit 1 Time Window` 选项:为最大 `128`
![turbo选项确认](img/p00/bios_turbo_max.png)
![turbo选项确认](img/p00/bios_turbo_max.jpeg)
## 3.来电自启确认
## 3.温控风扇
进入 `Advanced` 菜单的子菜单 `Hardware Monitor`
![硬件监控](img/p00/bios_hardware_monitor.png)
![硬件监控](img/p00/bios_hardware_monitor.jpeg)
确认 `Restore AC Power Loss` 选项为 `Power On` 状态
进入 `Smart Fan Function`
![来电自启](img/p00/bios_hardware_ac.png)
![风扇状态](img/p00/bios_smart_fan.jpeg)
可对温控风扇参数进行调整:
## 4.设置快速启动
![风扇设置](img/p00/bios_smart_fan_config.jpeg)
## 4.来电自启
进入 `Chipset` 菜单的子菜单 `PCH-IO Configuration`
![硬件监控](img/p00/bios_pch.jpeg)
确认 `State After G3` 选项为 `Power On` 状态:
![来电自启](img/p00/bios_hardware_ac.jpeg)
## 5.快速启动
PVE 系统安装完成后,进入 `Boot` 菜单,将 `Fast Boot` 选项设置为 `Enabled` 状态:
![快速启动](img/p00/bios_fast_boot.png)
![快速启动](img/p00/bios_fast_boot.jpeg)
调整系统启动顺序,将 `Proxmox` 设置为第一启动项,并关闭其他启动项内容:
![启动顺序](img/p00/bios_boot_order.png)
![启动顺序](img/p00/bios_boot_order.jpeg)
最后保存 BIOS 设置 `Save Changes and Exit`
![保存BIOS](img/p00/bios_save.png)
![保存BIOS](img/p00/bios_save.jpeg)
使用键盘左右方向键选择 `yes` 并回车键执行保存:
![确认保存](img/p00/bios_save_yeahhhh.png)
![确认保存](img/p00/bios_save_yeahhhh.jpeg)
+101 -97
View File
@@ -1,69 +1,66 @@
## 0.安装前准备
## 0.前准备
PVE 系统正式安装之前,需要准备 PVE 的安装镜像和一些必要安装工具。
PVE 系统正式安装之前,需要准备 PVE 的安装镜像和一些必要的配套工具。
### 0.1. PVE 镜像下载
### 0.1.PVE镜像下载
PVE 下载地址:https://www.proxmox.com/en/downloads
PVE 下载地址:https://www.proxmox.com/en/downloads
![下载PVE ISO文件](img/p01/pve_download_iso.png)
页面中可能有多个 PVE 的安装 ISO ,可以根据需要进行选择,目前以最新的 `Proxmox VE 8.0 ISO` 作为演示。
点击 `Proxmox VE 7.x ISO Installer` 链接。此处可能有多个 PVE 的安装 ISO,可以根据需要进行选择。
![下载PVE ISO文件](img/p01/pve_download_iso.jpeg)
此处我以目前最新的 `Proxmox VE 7.2 ISO` 作为演示
![输入图片说明](img/p01/pve_iso_hash.png)
点击 `Proxmox VE 8.x ISO Installer` 链接
下载 ISO 时请注意 `SHA256SUM` ,后续将使用该校验信息对下载下来的 ISO 进行校验,以确保 ISO 文件的完整性。
![输入图片说明](img/p01/pve_iso_hash.jpeg)
### 0.2.启动盘制作工具
考虑到制作 PVE 启动盘时,所使用的操作系统可能有 Windows、macOS、Linux,因此这里推荐几个常用的写盘工具。
考虑到制作 PVE 启动盘时,所使用的操作系统可能有 Windows 、macOS 、Linux ,因此这里推荐几个常用的写盘工具。
#### Ventoy
官方网站地址:https://www.ventoy.net/cn/index.html
强烈推荐的引导盘制作工具,也是我目前在用的写盘工具,优点是可以在一个 U 盘中放入复数个可引导的 ISO 文件。
强烈推荐的引导盘制作工具,优点是可以在一个 U 盘中放入复数个可引导的 ISO 文件。
免去了多次格式化 U 盘再写入 ISO 文件的操作,非常友好。
缺点是只支持 Windows、Linux
![Ventoy写盘工具](img/p01/pve_ventoy.png)
缺点是只支持 Windows 、Linux
![Ventoy写盘工具](img/p01/pve_ventoy.jpeg)
#### Etcher
官方网站地址:https://www.balena.io/etcher/
官方网站地址:https://etcher.balena.io/
跨平台的写盘工具,开源,写盘速度很快缺点是该软件体积较大,下载缓慢。
跨平台的写盘工具,开源,写盘速度很快缺点是该软件体积较大,下载缓慢。
支持 Windows、macOS、Linux。
支持 Windows 、macOS 、Linux
![Etcher写盘工具](img/p01/pve_etcher.png)
![Etcher写盘工具](img/p01/pve_etcher.jpeg)
#### Rufus
官方网站地址:https://rufus.ie/zh/
轻便小巧的写盘工具,仅支持 Windows。
轻便小巧的写盘工具,仅支持 Windows
![Rufus写盘工具](img/p01/pve_rufus.png)
![Rufus写盘工具](img/p01/pve_rufus.jpeg)
### 0.3. SSH 工具
### 0.3.SSH工具
考虑到配置 PVE 服务器、路由器、DNS 服务器时,需要在 CLI 中输入命令,因此我这里推荐几个常用的 SSH 工具。
考虑到配置 PVE 服务器、路由器、DNS 服务器时,需要在 CLI 中输入命令,因此这里推荐几个常用的 SSH 工具
#### Tabby
官方网站地址:https://tabby.sh
基于 Electron 开发的开源跨平台终端工具,内部集成了 SFTP,可以在 Github 平台上进行下载。
基于 Electron 开发的开源跨平台终端工具,内部集成了 SFTP ,可以在 Github 平台上进行下载。
支持 Windows、macOS、Linux。
支持 Windows 、macOS 、Linux
![Tabby SSH工具](img/p01/pve_tabby.png)
@@ -71,139 +68,146 @@ PVE 下载地址:https://www.proxmox.com/en/downloads
官方地址:https://mobaxterm.mobatek.net
功能强大的 SSH 工具,仅支持 Windows。
功能强大的 SSH 工具,仅支持 Windows
![MobaXterm](img/p01/pve_mobaxterm.png)
## 01.PVE系统安装
## 1. PVE 系统安装
由于机型不同,BIOS 的设置也不同,所以本文不演示具体如何将机器设置成从 U 盘启动。
在设置BIOS时需要注意以下几点:
- 暂时关闭 **“安全启动”**
- 确保打开硬件虚拟化支持
- 确保硬盘的模式为“AHCI”
- 确保设备来电自动启动
- 对于不支持UEFI启动的设备,检查Legacy引导模式
- 检查CPU的功耗设置(可选)
在设置 BIOS 时需要注意以下几点:
- 建议暂时关闭 **安全启动**
- 确保打开硬件虚拟化支持
- 确保设备来电自动启动
- 对于不支持 `UEFI` 启动的设备,检查 `Legacy` 引导模式
- 检查 CPU 的功耗设置(可选)
### 1.1.设备引导
使用 Ventoy 进行设备引导后,出现如下画面,选择 PVE 的安装 ISO
使用 Ventoy 进行设备引导后,出现如下画面,选择 PVE 的安装 ISO
![Ventoy引导设备](img/p01/pve_ventoy_boot.png)
![Ventoy引导设备](img/p01/pve_ventoy_boot.jpeg)
等待引导跑码完成后,即进入 PVE 的安装界面。
使用 `Boot in normal mode` 选项进行启动,等待引导跑码完成后,即进入 PVE 的安装界面。
### 1.2.PVE安装选项
![Ventoy引导模式](img/p01/pve_ventoy_boot_mode.jpeg)
选择第一项 `Install Proxmox VE` 开始安装 PVE 。
### 1.2. PVE 安装选项
![PVE安装选项](img/p01/pve_option.png)
新版 PVE 安装程序支持纯键盘操作,常用快捷键如下。
设备将会继续跑码,直到 EULA 最终用户许可协议出现,选择 `I agree`
|键盘按键|作用|说明|
|--|--|--|
|Esc|返回|返回上一步骤|
|Enter|确认|确认输入,激活选项或进入下一步骤|
|方向键|导航|用于选项选择,或切换输入焦点|
|Tab|导航|与方向键功能类似|
|ALT + N|下一步|进入下一步骤|
![PVE用户协议](img/p01/pve_eula.png)
使用 `方向键` 选择第一项 `Install Proxmox VE (Graphical)` 图形化安装界面,按键盘 `Enter` 进入下一步骤。
### 1.3.PVE磁盘选项
![PVE安装选项](img/p01/pve_option.jpeg)
此时会出现 `Target Harddisk` 选项,会显示出设备中存在的磁盘列表
设备将继续跑码,直到出现最终用户许可协议 EULA ,按键盘组合键 `ALT + N ` 进入下一步骤
可以通过下拉框选择希望安装 PVE 的物理磁盘。
![PVE用户协议](img/p01/pve_eula.jpeg)
![PVE选择安装磁盘](img/p01/pve_hd_choose.png)
### 1.3. PVE 硬盘选项
点击磁盘列表右侧的 **Options** ,对 PVE 的磁盘安装参数进行一些调整
此时会出现 `Target Harddisk` 选项,会显示出设备中存在的硬盘列表,可通过下拉框选择安装 PVE 的目标硬盘
我推荐将 `Filesystem` 也就是磁盘的文件系统格式,设置成 **xfs**
![PVE选择安装硬盘](img/p01/pve_hd_choose.jpeg)
如果设备安装的内存比较小,比如只有 `4GB``8GB` ,可以酌情考虑将 `swapsize` 改大,比如 `8`(此处无需填写单位 GB
点击硬盘列表右侧的 `Options` ,对 PVE 的硬盘安装参数进行一些调整
![PVE磁盘文件系统](img/p01/pve_hd_fs.png)
推荐将 `Filesystem` 也就是硬盘的文件系统,设置成 `xfs`
虽然 PVE 系统会根据设备安装的内存大小自动计算合理的 `swapsize` ,但我安装了 `16GB` 内存,因此我此处仅给了 `4GB` 的空间作为交换空间。
![PVE文件系统](img/p01/pve_hd_fs.jpeg)
### 1.4.PVE时区选项
### 1.4. PVE 时区选项
PVE 此时处于未接入互联网的 “离线” 安装状态,因此不会从互联网中读取时区信息,我们需要手动修改时区。
此时 PVE 处于未联网的 “离线” 状态,因此不会从互联网中读取时区信息,需要手动设置时区。
`Contry` 处手动输入 `China` ,下方的 `Time zone` 将自动变更为 `Asia/Shanghai`
`Contry` 处手动输入 `China` ,下方的 `Time zone` 将自动变更为 `Asia/Shanghai`
![PVE时区](img/p01/pve_timezone.png)
![PVE时区](img/p01/pve_timezone.jpeg)
### 1.5.PVE账户与邮箱
### 1.5. PVE 账户与邮箱
PVE 为最关键的虚拟化层,建议使用强密码,包含大小写字母、数字以及特殊符号。
`Email` 必须为一个 “合法” 的邮箱地址,不然系统会判定邮箱地址不合法并拒绝继续安装。
![PVE邮箱设置](img/p01/pve_email.png)
![PVE邮箱设置](img/p01/pve_email.jpeg)
### 1.6.PVE网络设置
### 1.6. PVE 网络设置
PVE 必须选择一个管理网口,默认情况下,PVE 会使用编号较小的第一个网口作为管理口。
默认情况下,PVE 会使用编号较小的第一个网口作为管理口。
有的设备物理网口顺序与该页面显示的网口顺序 **不一致** ,因此此处保持默认的第一个网口
某些设备,其物理网口顺序与该页面显示的网口顺序 **不一致** ,因此保持默认设置即可
当 PVE 完全安装好之后, **会在 PVE 提供的 WEB 页面中对该管理网口设置进行调整**
![PVE管理网口设置](img/p01/pve_eth.jpeg)
![PVE管理网口设置](img/p01/pve_eth.png)
FQDN 为 PVE 的域,PVE 将使用 FQDN 中的二级域名作为其主机名。
根据我们之前的规划,对 PVE 的管理 IP(`172.16.1.250`)进行设置
演示中 FQDN 为 `node01.fox.local` ,因此 PVE 的主机名为 `node01`
需要说明的是 `Hostname` ,即 PVE 主机的名称,PVE 将使用输入的 “二级域名” 的名称作为自己的名称
根据规划,PVE 的 IPv4 管理地址为 `172.16.1.254`
演示内容输入的为 `hyper.fox.lab` ,因此 PVE 获取的主机名称为 `hyper`
未来主路由的 IPv4 地址为 `172.16.1.1` ,因此均使用该地址作为 PVE 的网关地址和 DNS 地址
我们规划未来主路由的IP地址为 `172.16.1.1` ,因此我们网关和 DNS 地址均使用该地址
当 PVE 安装完成后, 将使用 PVE 提供的 WEB 管理页面,进一步对该管理口的设置进行调整
- Hostname (FQDN)
- hyper.fox.lab
- IP Address (CIDR)
- 172.16.1.250/24
- Gateway
- 172.16.1.1
- DNS Server
- 172.16.1.1
|参数|值|说明|
|--|--|--|
|Hostname (FQDN)|`node01.fox.local`|设置 PVE `域``主机名` |
|IP Address (CIDR)|`172.16.1.254/24`|设置 PVE IPv4 地址|
|Gateway|`172.16.1.1`|设置 PVE IPv4 网关|
|DNS Server|`172.16.1.1`|设置 PVE IPv4 DNS |
![PVE管理IP地址](img/p01/pve_ip.png)
![PVE管理IP地址](img/p01/pve_ip.jpeg)
### 1.7.PVE参数确认与安装
### 1.7. PVE 参数确认
最后会显示当前 PVE 安装配置清单,确认无误后即可开始安装。
该页面会显示当前 PVE 安装配置总览,确认无误后即可开始安装。
![PVE安装确认](img/p01/pve_install_confirm.png)
![PVE安装确认](img/p01/pve_install_confirm.jpeg)
安装完成后,PVE 会告知用户登录的 `IP 地址``端口`
安装完成后,PVE 会告知用户登录的 `IP 地址``端口`
![PVE安装完成](img/p01/pve_install_finish.png)
![PVE安装完成](img/p01/pve_install_finish.jpeg)
## 2.PVE安装后检查
## 2. PVE 安装后检查
PVE 安装完成后会自动重启,等待系统重启完成会显示如下界面,并使用 `root` 账户进行登录,密码为刚才设置的管理密码。
**注意:Linux 操作系统,在输入密码时是不显示任何字符信息的,输入完成后输入回车即可。**
**注意:Linux 操作系统,在输入密码时是不显示任何字符信息的,输入完成后输入回车即可。**
![PVE首次重启](img/p01/pve_first_boot.png)
登录系统后,我们使用一些命令来查看一些基本信息:
![PVE系统信息](img/p01/pve_sys_info.png)
![PVE首次重启](img/p01/pve_first_boot.jpeg)
登录系统后,使用一些命令来查看一些基本信息。
```bash
## 查看系统盘与挂载
df -hT
## 查看系统盘与挂载
$ df -hT
cat /etc/fstab
$ df -hiT
$ cat /etc/fstab
## 查看系统代号
cat /etc/os-release
$ cat /etc/os-release
```
此处显示出 PVE 底层使用的是 Debian 的系统,代号为 `bullseye` ,该代号后续会使用到。
此处显示出 PVE 底层使用的是 Debian 的系统,代号为 `bookworm` ,该代号后续会使用到。
![PVE系统信息](img/p01/pve_sys_info.jpeg)
至此 PVE 的安装步骤已经完成。
至此 PVE 的安装步骤已经完成,后续将对管理网口的设置以及系统源进行调整,使用国内镜像源,去掉 PVE 的订阅仓库,使用开源 PVE 仓库。
+168 -157
View File
@@ -1,289 +1,300 @@
## 1.更换系统软件源
## 1.更换软件源
在上一篇文章 [01.PVE系统安装](./01.PVE系统安装.md) 中,我们从刚装好的 PVE 系统中获取了系统的一些参数
在上一篇文章 [01.PVE系统安装](./01.PVE系统安装.md) 中,从刚装好的 PVE 系统中获取了系统的一些参数
![PVE系统信息](img/p01/pve_sys_info.png)
![PVE系统信息](img/p01/pve_sys_info.jpeg)
此处显示出 PVE 底层使用的是 Debian 的系统,代号为 `bullseye`
此处显示出 PVE 底层使用的是 Debian 的系统,代号为 `bookworm`
为了后续能对 PVE 系统进行升级,需要更换其镜像仓库,也就是大家熟知的软件源。
为了后续能对 PVE 系统进行升级,需要更换其镜像仓库,也就是大家熟知的软件源。
由于我们目前处于 **“离线”** 安装状态,因此更换完软件源后,在没有网络的情况下无法对系统更新。
由于目前处于 **“离线”** 安装状态,因此更换完软件源后,在没有网络的情况下无法对系统更新。
### 1.1.系统软件源替换
### 1.1.系统软件源
使用 SSH 工具登录到 PVE 服务器,首先对现有的软件源配置进行备份
使用 SSH 工具登录到 PVE 服务器,首先对现有的软件源配置进行备份
```bash
## 进入系统软件源配置文件目录
cd /etc/apt
$ cd /etc/apt
## 查看系统默认镜像配置
$ cat sources.list
## 将默认软件源配置文件进行备份
cp sources.list sources.list.bak
$ cp sources.list sources.list.bak
```
这里我将使用 [中国科技大(USTC](http://mirrors.ustc.edu.cn/help/proxmox.html) 的镜像仓库进行替换,使用如下命令:
系统默认镜像配置记录如下。
**注意:该命令为两行,在输入时请逐行输入并回车执行**
```bash
deb http://ftp.debian.org/debian bookworm main contrib
deb http://ftp.debian.org/debian bookworm-updates main contrib
# security updates
deb http://security.debian.org bookworm-security main contrib
```
这里我将使用 [中国科技大(USTC](http://mirrors.ustc.edu.cn/help/proxmox.html) 的镜像仓库进行替换,使用如下命令。
**注意:该命令为两行,在输入时请逐行输入并回车执行。**
```bash
## 替换系统软件仓库
sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
$ 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
$ sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
```
执行完成后,检查是否执行正确:
如果希望能更新 CPU 的 `microcode` ,则需要手动添加镜像 `non-free``non-free-firmware` 参数,完整系统源示例如下。
```bash
## 输出系统源配置文件,检查是否正确
cat /etc/apt/sources.list
```
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
如果输出结果中有 USTC 的镜像地址,则表示命令已经正确执行。
如果希望能更新 CPU 的 `microcode` ,则需要手动添加镜像的 `non-free` 参数,完整系统源示例如下:
```bash
deb https://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
deb https://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# security updates
deb https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free
deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware
```
此处我放出 Debian Bullseye 的完整镜像源以供参考, **非常不建议** 将 PVE 的系统源替换成完整的 Debian 源,以避免系统故障。
### 1.2. PVE 软件源
默认情况下,PVE 额外启用了 2 个官方源,且为订阅收费制,因此需要替换为免费源。
删除 PVE 官方付费软件源,使用以下命令。
**注意:rm 为高风险命令,请正确使用,请勿手抖,请勿手抖。**
```bash
## Debian Bullseye 完整源 USTC
deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
## 删除付费软件源
$ rm -rvf /etc/apt/sources.list.d/*.list
```
可以看到,PVE 的系统源和 Debian 完整源的差异在于 `non-free``bullseye-backports`
创建 PVE 免费软件源
如果小伙伴在一些软件或者驱动(比如闭源 GPU 驱动)上遇到麻烦,才需尝试 Debian 的完整镜像源。
### 1.2.PVE 订阅源替换
默认情况下,PVE 启用了一个官方的源,而该源为订阅制收费,我们需要替换为免费的源。
进入订阅源的目录:
**注意:rm 命令为高危险操作命令,请正确使用,请勿手抖,请勿手抖**
```bash
## 进入订阅源目录
cd /etc/apt/sources.list.d
## 删除该目录下的所有配置
rm -rvf *.list
```
创建 PVE 免费源:
**注意:该命令为两行,在输入时请逐行输入并回车执行**
**注意:该命令为三行,在输入时请逐行输入并回车执行。**
```bash
## 创建 PVE 免费源
source /etc/os-release
$ 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
$ echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy $VERSION_CODENAME no-subscription" > /etc/apt/sources.list.d/ceph-no-subscription.list
$ echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $VERSION_CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
```
创建完成后对其进行检查
创建完成后对其进行检查
```bash
## 检查PVE免费源
cat /etc/apt/sources.list.d/pve-no-subscription.list
$ cat /etc/apt/sources.list.d/ceph-no-subscription.list
$ cat /etc/apt/sources.list.d/pve-no-subscription.list
```
如果输出结果中有 USTC 的镜像地址,则表示命令已经正确执行
如果输出结果中有 USTC 的镜像地址,则表示命令已经正确执行
```bash
## 输出内容参考:
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription
#### PVE 免费软件源示例输出
#### Ceph
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
#### PVE
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription
```
### 1.3.PVE CT Templates 替换
### 1.3. PVE CT
如果需要使用 Proxmox 网页端下载 CT Templates,可替换 CT Templates 源。
如果需要使用 Proxmox 网页端下载 CT Templates ,可替换 CT Templates 源。
该功能我未使用,因此只做记录
由于该功能暂时未被使用,因此本文只做记录
```bash
## 替换 CT Templates 源
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm.bak
$ cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm.bak
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
$ sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
```
如果修改了 CT Templates 地址,需要重启 PVE 服务器才能生效。
### 1.4.镜像同步
### 1.4.替换后操作
更换完成系统源之后,需要同步系统源数据。
更换完成系统源之后,需要更新系统源的同步:
考虑到 **“离线”** 安装时无法同步系统源,因此该步骤可以等到 PVE 正确连接 Internet 后再执行。
```bash
## 清理软件包
apt clean && apt autoclean && apt autoremove --purge
$ apt clean && apt autoclean && apt autoremove --purge
## 同步软件源
apt update
$ apt update
## 更新系统
apt dist-upgrade
$ apt dist-upgrade
```
考虑到 **“离线”** 安装时无法同步系统源,因此该步骤可以等到 PVE 中安装好了 RouterOS 软路由或其他路由系统并正确连接 Internet 后再执行。
或者家庭网络环境中还有一个 `172.16.1.0/24` 网段的,已经连接 Internet 的路由器 A ,将路由器 A 的 LAN 口与 PVE 的管理网口连接,此时 PVE 可访问外网。
## 2.安装必要软件
安装软件前,同样要让 PVE 能够访问外网。
安装软件前,同样要让 PVE 能够访问外网。
```bash
## 同步镜像仓库
apt update
## 安装系统软件
apt install htop lm-sensors unzip vim tmux unattended-upgrades apt-listchanges powermgmt-base
## 安装网络工具
apt install iperf iperf3 iftop ethtool
## 安装CPU调度调整工具
apt install cpufrequtils
## 根据CPU厂商安装CPU微码工具
apt install intel-microcode (amd64-microcode)
## 更新 PCI 数据库
update-pciids
```
安装 `iperf3` 后,系统将询问是否将其作为系统服务开机自启,选择 `no` 即可。
其中 `unattended-upgrades` 为系统自动更新服务,后续会对其进行配置。
`cpufrequtils` 为 CPU 调度器的配置工具,后续会对 CPU 调度算法进行调整。
```bash
## 同步镜像仓库
$ apt update
## 3.配置 PVE 网桥和管理网口
## 安装系统软件
$ apt install htop lm-sensors unzip vim tmux unattended-upgrades powermgmt-base
设置电脑的 IP 地址为静态 IP ,IP 地址段与 PVE 的 IP 地址段保持一致。
## 安装网络工具
$ apt install iperf iperf3 iftop
## 安装 CPU 调度调整工具
$ apt install cpufrequtils
## 根据 CPU 厂商安装 CPU 微码工具
$ apt install intel-microcode (amd64-microcode)
## 更新 PCI 数据库
$ update-pciids
```
## 3.配置 PVE 网络
设置电脑的 IPv4 地址为静态地址,电脑 IPv4 地址段需要与 PVE 的地址段保持一致。
用网线将电脑的网口与 PVE 的管理网口,此时应该为编号最小的第一个网口,相连接。
访问 PVE 的 WEB 管理界面,对 PVE 的网络进行一些调整。
根据 **网络设备** 规划, PVE 中虚拟机规划如下。
|系统|作用|说明|
|--|--|--|
|RouterOS|主路由|PPPoE 拨号上网|
|Debian12|Linux 服务器|内网 DNS 服务器|
|OpenWrt|旁路由|内网插件服务|
根据 **内部网络地址** 规划,PVE IP 地址规划如下。
|地址类型|作用|值|说明|
|--|--|--|--|
|IPv4|管理地址|`172.16.1.254`|PVE IPv4 地址|
||网关地址|`172.16.1.1`|PVE IPv4 网关|
||DNS 地址|`172.16.1.1`|PVE IPv4 DNS 服务器|
|IPv6|管理地址|`fdac::fe`|PVE IPv6 地址|
||网关地址|`-`|IPv6 网关将使用 `LLA` 自动配置|
||DNS 地址|`fdac::1`|PVE IPv6 DNS 服务器|
![PVE网络规划](img/p02/pve_net_schematization.png)
在设置 PVE 的网络之前,需要对网络内部结构做一个规划
初次登录 PVE 的 WEB 管理后台,打开网络管理页面,此时只有一个 `vmbr0`
在前篇的网络地址段规划时,我们有如下规划内容:
- PVE IP `172.16.1.250/24` IPv6 `fc00::fa/64`
- PVE 网关: `172.16.1.1` IPv6 网关将使用 `Link-Local Address` 自动配置)
- PVE DNS `172.16.1.1` IPv6 DNS `fc00::1`
`vmbr0` 与列表中的第一个物理网口绑定,且在 `CIDR``网关` 处有 IP 地址参数,说明 `vmbr0` 为当前管理网口。
我们预计在 PVE 内部安装 RouterOS 用于主路由,2 个 Adguard Home 虚拟机用于提供内网的 DNS 服务以及去广告,且 RouterOS 需要能让 PVE 自身访问外网。
![PVE网桥最终设置显示](img/p02/pve_net_default.jpeg)
因此,在 PVE 中除了创建多个绑定物理网口的虚拟网桥外(具体数量依据物理网口数而定),还需 1 个额外的纯内部网桥
接下来将修改 PVE 网络配置,在修改完成前, **请不要点击 “应用配置”** ,否则会导致 PVE 无法访问
先放出 PVE 网桥设置完成后的配置页面:
PVE 内部网络设置完成后,将如图所示。
![PVE网桥最终设置显示](img/p02/pve_net_preview.png)
![PVE网桥最终设置显示](img/p02/pve_net_preview.jpeg)
在实地考察了 PVE 软路由在弱电箱的摆放位置后,本次决定使用 ETH0 口,也就是第一个物理网口,作为 RouterOS 的拨号网口,ETH3 口作为 PVE 的管理网口。
### 3.1.修改 vmbr0
在初次登录 PVE 的 WEB 管理后台,并访问网络管理页面时,会发现只有一个 `vmbr0`
`vmbr0` 绑定的物理口为列表中的第一个网口,且在 `CIDR``网关` 处有 IP 地址参数,说明 `vmbr0` 就是目前的管理网口。
造成该状态的原因是我们在安装 PVE 阶段,选择的网口就是第一个网口,因此我们需要对其进行修改。
首先我们需要对每个物理网口创建网桥,并对其进行配置修改,在修改完成前, **请不要点击“应用配置”** ,不然会导致 PVE 无法访问。
### 3.1.修改默认网桥 vmbr0
首先双击 `vmbr0` ,进入配置界面:
![修改vmbr0](img/p02/pve_modify_vmbr0.png)
鼠标双击 `vmbr0` ,进入网桥配置界面
删除 `IPv4/CIDR``网关` 信息,确保 `自动启动` 为勾选状态。
在备注处填写 `For WAN` ,然后点击 `OK` 按钮。
在备注处填写 `wan` ,然后点击 `OK` 按钮。
### 3.2.物理网口创建网桥
![修改vmbr0](img/p02/pve_modify_vmbr0.jpeg)
### 3.2.创建网桥
点击左上角的 `创建` 按钮,选择 `Linux Bridge`
![创建物理接口网桥](img/p02/pve_br_create.png)
![创建物理接口网桥](img/p02/pve_br_create.jpeg)
因为 `vmbr0` 名称已被使用,因此名称填写 `vmbr1` ,桥接端口填写顺序的第二个网卡名称,我演示这里为 `enp3s0`
因为 `vmbr0` 名称已被使用,因此名称填写 `vmbr1`
![指定物理接口](img/p02/pve_br_phyport.png)
桥接端口填写顺序的第二个网卡名称,演示中为 `enp3s0`
确保 `自动启动` 为勾选状态,在备注处填写 `For LAN1` ,点击 `创建` 按钮。
确保 `自动启动` 为勾选状态,在备注处填写 `lan1` ,点击 `创建` 按钮。
然后,依次创建所有物理接口的内部网桥,直到最后一个
然后,依次创建所有物理接口的内部网桥,直到最后一个网桥,即 PVE 的管理网口。
![最后的物理接口网桥](img/p02/pve_br_last_phyport.png)
![指定物理接口](img/p02/pve_br_phyport.jpeg)
在创建最后一个物理网口的 PVE 网桥时,需要额外配置 `IPv4` 地址和对应的 `网关` 参数。
### 3.3.创建管理网口
`IPv6` 仅需填写地址,无需填写 `网关` 参数。
在创建最后一个物理网口的网桥时,需要额外配置 `IPv4` 地址和对应的 `网关` 参数。
![最后的物理接口网桥](img/p02/pve_br_last_phyport.jpeg)
额外说明:
1. 如非特殊需求,通常情况下 PVE 系统无需使用 IPv6 网络。
2. 根据实际测试,仅 PVE 纯内部网桥( `vmbr4` )可通过主路由获取公网 GUA IPv6 地址。
3. 主路由未配置 ULA IPv6 网段时,例如本文演示地址 `fdac::/64` ,无需填写 `IPv6/CIDR` 参数。
4. 通常情况下 IPv6 无需填写 `网关` 参数,IPv6 网关将通过 LLA IPv6 地址自动配置。
![最后的物理接口网桥](img/p02/pve_br_last_phyport_ipv6.jpeg)
在所有物理网口的 PVE 网桥创建完成后,可以点击 `应用配置` 按钮,此时页面会失去连接。
无需担心,只需要将电脑的网线从 PVE 物理机的第一个网口拔出,并插入到最后一个网口即可。
如果万一还是无法访问到 PVE,可以尝试使用网线“拔插”方法,挨个测试 PVE 网口的访问情况。
如果万一还是无法访问到 PVE,可以尝试使用网线 “拔插” 方法,挨个测试 PVE 网口的访问情况。
### 3.3.创建 PVE 纯内部网桥
### 3.4.创建内部网桥
![纯内部网桥](img/p02/pve_br_nophyport.png)
纯内部网桥,在没有内部路由系统提供额外桥接的情况下,无法直接通过物理网口进行访问。
纯内部网桥的创建方法与创建物理网口的网桥方法基本一致,唯一区别是在 **“桥接端口”处为空** 即可
只有在主路由(例如 RouterOS )安装完成并建立了内部网桥后,才可正常使用
纯内部网桥在没有内部路由的情况下是无法访问的,我这里只有在 RouterOS 安装完成并建立了内部网桥后,才可被访问到;主要作用通过 RouterOS 给内部其他虚拟机提供外网连接
纯内部网桥,其主要作用通过 **主路由** 给内部其他虚拟机提供 **统一** 的网络访问接口
当然内部网桥的作用不仅如此,比如还可以作为内部级联路由的连接器
创建纯内部网桥的方法,与创建物理网口网桥的方法基本一致,唯一区别是 `桥接端口` 参数为 **空** 即可
例如安装了 OPNsense 和 RouterOS 两个虚拟机,OPNsense 作为防火墙使用,RouterOS 作为二级路由使用,OPNsense 的 LAN 口需要与 RouterOS 的 WAN 口互通。
![纯内部网桥](img/p02/pve_br_nophyport.jpeg)
此时如果 OPNsense 和 RouterOS 均使用了绑定物理网口的 PVE 网桥,则需要用网线在 PVE 服务器外面连接两个网口,浪费宝贵的网线不说,还占用了网口,得不偿失。而使用纯内部网桥则可以很好的解决该问题,有了这个纯内部网桥,不论多少个虚拟机使用了该网桥,只要是同网段,都可以相互访问。
当然,内部网桥的作用不仅如此,比如还可以作为内部级联路由的连接器。
例如,安装了 OPNsense 和 RouterOS 两个虚拟机,OPNsense 作为网关防火墙使用。
## 4.配置 PVE DNS 服务器
此时 RouterOS 作为二级路由系统,OPNsense 的 LAN 口需要与 RouterOS 的 WAN 口相连。
在 PVE 的安装过程中设置了 PVE 服务器的 DNS 地址为 `172.16.1.1` ,但并未设置 DNS 的 IPv6 地址
如果 OPNsense 和 RouterOS 均使用了绑定物理网口的 PVE 网桥,则需用网线在 PVE 服务器上连接两个物理网口
在 PVE 系统的 DNS 设置页面中,新增 DNS 服务器的 IPv6 地址,即主路由的 LAN IPv6 地址:
浪费了宝贵的网线不说,还占用了网口,得不偿失。
![PVE添加IPv6DNS](img/p02/pve_add_ipv6_dns.png)
而纯内部网桥则能很好的解决该问题,有了纯内部网桥,不论多少个虚拟机使用该网桥,只要 IP 地址段相同,即可相互访问。
## 4.配置 PVE DNS
## 5.后续配置
在 PVE 系统的安装过程中,设置了 DNS 的 IPv4 地址 `172.16.1.1` ,但并未设置 DNS 的 IPv6 地址。
至此,PVE的初始化配置完成
在 PVE 的 DNS 设置页面,手动添加 DNS IPv6 地址,即主路由 LAN 口 ULA IPv6 地址
同样,若 PVE 不使用 IPv6 网络或主路由未配置 ULA IPv6 网段,本步骤可跳过。
![PVE添加IPv6DNS](img/p02/pve_add_ipv6_dns.jpeg)
至此,PVE 的初始化配置完成。
后续将会对 PVE 的一些服务进行配置,例如安全加固、调整 CPU 的调度算法节能省钱、PVE 的自动更新等内容。
+350 -172
View File
@@ -1,64 +1,59 @@
## 0.必要条件
在上一篇文章 [02.PVE初始化配置](./02.PVE初始化配置.md) 中,我们已经初始化了 PVE 系统,接下来需要对 PVE 系统进一步调整。
在上一篇文章 [02.PVE初始化配置](./02.PVE初始化配置.md) 中,初始化了 PVE 系统,接下来需要对 PVE 系统进一步调整。
在 PVE 系统调整之前,请确必要的软件包已经安装完成
在 PVE 系统调整之前,请确必要的软件包已经安装完成,本文后续命令均在 SSH 终端下执行。
```bash
## 同步镜像仓库
apt update
$ apt update
## 安装系统软件
apt install htop lm-sensors unzip vim tmux unattended-upgrades apt-listchanges powermgmt-base
$ apt install htop lm-sensors unzip vim tmux unattended-upgrades powermgmt-base
## 安装网络工具
apt install iperf iperf3 iftop ethtool
$ apt install iperf iperf3 iftop
## 安装CPU调度调整工具
apt install cpufrequtils
## 安装 CPU 调度调整工具
$ apt install cpufrequtils
## 根据CPU厂商安装CPU微码工具
apt install intel-microcode (amd64-microcode)
## 根据 CPU 厂商安装 CPU 微码工具
$ apt install intel-microcode (amd64-microcode)
## 更新 PCI 数据库
update-pciids
$ update-pciids
```
本文后续命令,均在 SSH 终端下完成。
## 1.系统时区
## 1.系统时区配置
如果在安装 PVE 系统时选错了时区,导致系统时间和北京时间不一致,可以使用以下命令修正:
```bash
## 修改系统时区
timedatectl set-timezone Asia/Shanghai
## 检查系统时间
date -R
## 参考输出
Wed, 20 Jul 2022 16:21:28 +0800
```
如果在安装 PVE 系统时选错了时区,导致系统时间和北京时间不一致,可以使用以下命令修正。
输出结果如果和北京时间一致,则代表修改正确。
```bash
## 修改系统时区
$ timedatectl set-timezone Asia/Shanghai
## 检查系统时间
$ date -R
#### 系统时间示例输出
Sun, 25 Jun 2023 12:12:12 +0800
```
Debian 系统常用 `systemd-timesyncd.service` 来同步时间,而 PVE 系统使用 `chrony.service` 来同步时间。
为了使用国内的 NTP 服务器,需要对 `chrony.service` 进行配置。
执行以下命令对 `chrony` 的配置文件进行修改:
为了使用国内的 NTP 服务器,需要对 `chrony.service` 进行配置,执行以下命令
```bash
## 编辑 chrony 配置文件
nano /etc/chrony/chrony.conf
$ nano /etc/chrony/chrony.conf
```
在编辑器对话框中,将 `pool 2.debian.pool.ntp.org iburst` 这行内容 “注释” 掉,并添加国内的 NTP 服务器,参考如下内容:
在编辑器对话框中,将 `pool 2.debian.pool.ntp.org iburst` “注释” 掉,并添加国内的 NTP 服务器
```bash
## chrony 服务配置文件示例
## chrony 配置项
# Use Debian vendor zone.
# pool 2.debian.pool.ntp.org iburst ## 在这行前面增加注释符 # 来注释
@@ -66,45 +61,34 @@ nano /etc/chrony/chrony.conf
# Use Custom vendor zone.
pool ntp.tencent.com iburst
pool ntp.aliyun.com iburst
```
保存该配置文件后,重启 `chrony` 服务:
保存该配置文件后,重启 `chrony.service` ,并再次检查系统 NTP 服务器地址。
```bash
## 重启 chrony 服务
systemctl restart chrony.service
```
$ systemctl restart chrony.service
再检查系统 NTP 服务器是否被正确修改:
```bash
## 检查系统 NTP 服务器
chronyc sources -V
```
$ chronyc sources -V
如果输出以下类似内容,则表示系统 NTP 服务设置正确:
```bash
## NTP 服务示例输出
MS Name/IP address Stratum Poll Reach LastRx Last sample
#### 系统 NTP 服务器示例输出
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 139.199.215.251 2 10 177 244 -1669us[-1757us] +/- 67ms
^* 203.107.6.88 2 10 377 105 -1005us[-1094us] +/- 19ms
^+ 106.55.184.199 2 6 17 11 +752us[ +273us] +/- 40ms
^* 203.107.6.88 2 6 17 11 -1868us[-2348us] +/- 17ms
```
## 2.CPU调度器配置
## 2. CPU 调度器
安装好 `cpufrequtils` 后,检查当前 CPU 调度器
安装好 `cpufrequtils` 后,检查 CPU 当前调度器
```bash
## 检查 CPU 当前调度器
cpufreq-info
```
**设备 CPU - J4125 参考输出**
$ cpufreq-info
```bash
## J4125 参考输出
#### 设备 CPU - J4125 示例输出
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
@@ -118,12 +102,8 @@ analyzing CPU 0:
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 1.84 GHz.
```
**设备 CPU - N5105 参考输出**
```bash
## N5105 参考输出
#### 设备 CPU - N6005 示例输出
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
@@ -131,175 +111,219 @@ analyzing CPU 0:
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 4294.55 ms.
hardware limits: 800 MHz - 2.90 GHz
hardware limits: 800 MHz - 3.30 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 800 MHz and 2.90 GHz.
current policy: frequency should be within 800 MHz and 3.30 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.36 GHz.
current CPU frequency is 2.00 GHz.
```
这里面主要关注两个点:
- driver: `intel_cpufreq``intel_pstate`
- current policy: `governor "ondemand"``governor "performance"`
当然还有另外一个命令可用来显示 CPU 调度器
还有另外一个命令可用来显示 CPU 当前调度器
```bash
## 检查 CPU 当前调度器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
## J4125 参考输出
#### 设备 CPU - J4125 示例输出
ondemand
## N5105 参考输出
#### 设备 CPU - N6005 示例输出
performance
```
驱动一般不建议手动调整,而 `governor` 后面的参数则显示了当前 CPU 调度器是什么
CPU 驱动一般不建议手动调整,而 `governor` 后面的参数表示 CPU 当前调度器设置
接下来,我们需要了解当前系统 CPU 支持的调度器有哪些
接下来,需要了解 CPU 支持的调度器有哪些,使用以下命令。
```bash
## 检查 CPU 调度器支持情况
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
## J4125 参考输出
conservative ondemand userspace powersave performance schedutil
#### 设备 CPU - J4125 示例输出
conservative ondemand userspace powersave performance schedutil
## N5105 参考输出
#### 设备 CPU - N6005 示例输出
performance powersave
```
根据 CPU 所使用的驱动不同,可选调度器也不同,至于每种调度器有什么优劣,欢迎大家深度挖掘。
CPU 驱动为 `intel_pstate` 时,建议使用 `powersave` 调度器。
- CPU 驱动为 `intel_cpufreq` 时,推荐使用 `schedutil` 调度器。
CPU 驱动为 `intel_cpufreq` 时,建议使用 `schedutil` 调度器。
- CPU 驱动为 `intel_pstate` 时,推荐使用 `powersave` 调度器。
本文使用 `powersave` 调度器为演示。
本文使用 `powersave` 调度器为演示,使用 `nano` 编辑器来编辑 `cpufrequtils` 的配置文件
使用 `vim` 编辑器来编辑 `cpufrequtils` 的配置文件:
因为该配置文件很长,完整的配置文件可查看 [pve_cpufrequtils.conf](./src/pve_cpufrequtils.conf) 以便对比。
修改完成后,需要重启 PVE 服务器来使参数生效。
```bash
## 修改 cpufrequtils 配置文件
vim /etc/init.d/cpufrequtils
## 编辑 cpufrequtils 配置文件
$ nano /etc/init.d/cpufrequtils
```
## 在配置文件中修改调度器
在配置文件中修改以下配置项,并保存。
```bash
## cpufrequtils 配置项
ENABLE="true"
GOVERNOR="powersave" ## 修改本行的调度器为 powersave
MAX_SPEED="0"
MIN_SPEED="0"
```
`i` 键进入编辑模式,`esc` 键退出编辑模式,`:wq` 命令保存退出
PVE 服务器重启完成后需再次查看 CPU 调度器,检验配置文件是否生效
因为该配置文件很长,文章中留下一份已配置好的文件 [pve_cpufrequtils.conf](./src/pve_cpufrequtils.conf) ,以便对比
修改完成后,需要重新启动 PVE 服务器来使参数生效。
PVE 服务器重启完成后记得重新检查当前 CPU 的调度器,看配置文件是否生效。
这里提供两个命令,分别来实时查看当前 CPU 的频率和内部温度传感器的数值:
这里提供两个额外命令,方便实时查看 CPU 当前频率和温度状况
```bash
## 查看 CPU 当前频率
watch cat /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq
$ watch cat /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq
## 查看内部温度
watch sensors
$ watch -d sensors
```
## 3.PVE定时重启配置
## 3. PVE 定时重启
有时候我们需要让 PVE 服务器周期性的定时重启,则可使用以下命令
有时需要让 PVE 服务器周期性的定时重启,则可使用以下命令
参数表示每月 `1``16` 号的 `5``0` 分执行系统重启命令。
```bash
## 编辑系统 crontab
crontab -e
## 查看系统定时任务
$ crontab -l
## 编辑系统定时任务,编辑器选择 nano
$ crontab -e
```
在配置文件末尾,增加以下配置项。
```bash
## 定时任务配置项
## 选择 nano 编辑器,粘贴以下内容并保存
0 5 1,16 * * /usr/sbin/reboot
```
这表示每月 1、16 号的 5 点 0 分执行系统重启命令。
## 4. PVE 自动更新
可以使用以下命令来查看当前系统的计划任务:
### 4.1.系统定时器
```bash
## 显示系统 crontab
crontab -l
```
配置系统自动更新之前,需检查系统当前定时器状态。
## 4.PVE系统自动更新
### 4.1.检查系统定时器
配置系统自动更新之前,先检查当前系统定时器状态:
后续将手动调整该定时器的时间,使其每 `5` 天凌晨 `02:00` 进行触发。
```bash
## 检查系统定时器
systemctl status apt-daily-upgrade.timer
$ systemctl status apt-daily-upgrade.timer
## 示例输出
● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/apt-daily-upgrade.timer.d
└─override.conf
Active: active (waiting) since Sat 2022-07-16 07:03:53 CST; 4 days ago
Trigger: Thu 2022-07-17 06:52:50 CST; 13h left
Triggers: ● apt-daily-upgrade.service
Jul 16 12:03:53 hyper systemd[1]: Started Daily apt upgrade and clean activities.
#### 系统定时器示例输出
● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; preset: enabled)
Active: active (waiting) since Fri 2023-06-23 18:55:58 CST; 1 day 18h ago
Until: Fri 2023-06-23 18:55:58 CST; 1 day 18h ago
Trigger: Mon 2023-06-26 06:26:25 CST; 16h left
Triggers: ● apt-daily-upgrade.service
Jun 23 18:55:58 node01 systemd[1]: Started apt-daily-upgrade.timer - Daily apt upgrade and clean activities.
```
我们后续将手动调整该定时器的时间为,每 10 天的凌晨 02:00 进行触发。
### 4.2.配置更新策略
### 4.2.配置自动更新策略
使用以下命令,启用系统自动更新。
执行命令后,使用 “左右” 方向键进行选择,“回车” 键进行确认。
```bash
## 配置自动更新策略
dpkg-reconfigure -plow unattended-upgrades
$ dpkg-reconfigure -plow unattended-upgrades
## 选择 “是” (“YES”)
## 示例输出
#### 系统自动更新示例输出
Creating config file /etc/apt/apt.conf.d/20auto-upgrades with new version
```
执行命令后,使用“左右”方向键进行选择,“回车”键进行确认
然后开始调整 apt 的 `20auto-upgrades` 配置文件:
进一步调整 `20auto-upgrades` 配置文件
```bash
## 进入 apt 的配置目录
cd /etc/apt/apt.conf.d
$ cd /etc/apt/apt.conf.d
## 编辑 20auto-upgrades 配置文件
vim 20auto-upgrades
## 删除里面全部内容并填写以下内容
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "10";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::CleanInterval "1";
$ nano /etc/apt/apt.conf.d/20auto-upgrades
```
其中,用来控制 PVE 更新周期的为 `APT::Periodic::Unattended-Upgrade` 这行内容,其中的 “10” 表示更新周期为 “10” 天
删除里面全部内容,添加以下配置项,并保存
接下来调整 apt 的 `50unattended-upgrades` 配置文件,所有修改项目汇聚如下:
配置文件中,用来控制更新周期的参数为 `APT::Periodic::Unattended-Upgrade` `5` 表示更新周期为 `5` 天。
```bash
## 系统更新周期配置项
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "5";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::CleanInterval "1";
```
进一步调整 `50unattended-upgrades` 配置文件。
```bash
## 编辑 50unattended-upgrades 配置文件
vim 50unattended-upgrades
$ nano /etc/apt/apt.conf.d/50unattended-upgrades
```
配置文件中,被修改的参数解释如下:
- 启用了 Debian `bookworm-updates` 相关更新。
- 增加并启用 PVE 自有仓库的更新。
- 增加并启用 PVE Ceph 仓库的更新,请按需启用。
- 自动修复被打断的 Dpkg 安装。
- 自动移除无用的的内核包。
- 自动移除因更新而出现的无用依赖包。
- 自动移除以前的无用依赖包。
- 自动重启:开启。
- 自动重启时间:`05:00`
因为该配置文件很长,完整的配置文件可查看 [pve_50unattended_upgrades.conf](./src/pve_50unattended_upgrades.conf) 以便对比。
```bash
## 删除以下行前面的注释符 // ,代表启用
"origin=Debian,codename=${distro_codename}-updates";
## 添加 PVE 本身的更新项目
## 添加 PVE 系统更新项目
"origin=Proxmox,codename=${distro_codename},label=Proxmox Debian Repository";
## 删除以下行前面的注释符,代表启用,并调整参数
## 按需添加 PVE Ceph 更新项目
"origin=Proxmox,codename=${distro_codename},label=Proxmox Ceph Debian Repository";
## 在配置文件末尾增加以下配置项,代表启用,并调整参数
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
@@ -311,60 +335,214 @@ Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "05:00";
```
分别表示:
- 启用了 Debian bullseye-updates 相关更新。
- 增加并启用 PVE 自有仓库的更新,确保不会遗漏自有仓库的更新内容。
- 自动修复被打断的Dpkg安装。
- 自动移除无用的的内核包。
- 自动移除因更新而出现的无用依赖包。
- 自动移除以前的无用依赖包。
- 自动重启:开启。
- 自动重启时间:05:00。
### 4.3.重设触发器
因为该配置文件很长,文章中留下一份 PVE 7.2 中已配置好的文件 [pve_50unattended_upgrades.conf](./src/pve_50unattended_upgrades.conf) ,以便对比
系统自动更新配置文件修改完成后,需要重设自动更新定时器,执行以下命令
仔细再仔细确认无误后,`esc` 键退出编辑模式,`:wq` 命令保存退出
### 4.3.重设自动更新触发器
完整的配置文件可查看 [pve_apt_daily_upgrade.conf](./src/pve_apt_daily_upgrade.conf) 以便对比
```bash
## 重设自动更新触发器时间为凌晨 02:00
systemctl edit apt-daily-upgrade.timer
## 配置系统定时器
$ systemctl edit apt-daily-upgrade.timer
```
根据配置文件中的提示,在中间空白处填入以下配置项。
```bash
## 定时器配置项
## 根据文件中的提示,在中间空白处填入以下内容
[Timer]
OnCalendar=
OnCalendar=02:00
RandomizedDelaySec=0
```
完整的配置文件可查看 [pve_apt_daily_upgrade.conf](./src/pve_apt_daily_upgrade.conf),以便对比
设置完成后重启自动更新的触发器:
设置完成后,重启自动更新触发器
```bash
## 重启触发器
systemctl restart apt-daily-upgrade.timer
$ systemctl restart apt-daily-upgrade.timer
## 再次检查触发器状态
systemctl status apt-daily-upgrade.timer
$ systemctl status apt-daily-upgrade.timer
## 参考输出
● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/apt-daily-upgrade.timer.d
└─override.conf
Active: active (waiting) since Wed 2022-07-20 17:36:40 CST; 11s ago
Trigger: Thu 2022-07-21 02:00:00 CST; 8h left
Triggers: ● apt-daily-upgrade.service
Jul 20 17:36:40 hyper systemd[1]: Stopped Daily apt upgrade and clean activities.
Jul 20 17:36:40 hyper systemd[1]: Stopping Daily apt upgrade and clean activities.
Jul 20 17:36:40 hyper systemd[1]: Started Daily apt upgrade and clean activities.
#### 系统自动更新触发器示例输出
● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; preset: enabled)
Drop-In: /etc/systemd/system/apt-daily-upgrade.timer.d
└─override.conf
Active: active (waiting) since Sun 2023-06-25 14:35:06 CST; 9s ago
Until: Sun 2023-06-25 14:35:06 CST; 9s ago
Trigger: Mon 2023-06-26 02:00:00 CST; 11h left
Triggers: ● apt-daily-upgrade.service
Jun 25 14:35:06 node01 systemd[1]: Stopped apt-daily-upgrade.timer - Daily apt upgrade and clean activities.
Jun 25 14:35:06 node01 systemd[1]: Stopping apt-daily-upgrade.timer - Daily apt upgrade and clean activities...
Jun 25 14:35:06 node01 systemd[1]: Started apt-daily-upgrade.timer - Daily apt upgrade and clean activities.
```
至此 PVE 的系统调整已经完成,重启设备后,可以愉快使用了。
## 5.硬件直通
Plug in & Forget :)
### 5.1.修改 Grub
参考官方文档 [qm_pci_passthrough](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_pci_passthrough) 和 [Pci passthrough](https://pve.proxmox.com/wiki/Pci_passthrough) 开启 PVE 硬件直通功能。
使用 SSH 工具登录到 PVE 服务器,编辑系统 `Grub` 的配置文件 `/etc/default/grub`
```bash
## 编辑 Grub 配置文件
$ nano /etc/default/grub
```
在编辑器对话框中修改 `GRUB_CMDLINE_LINUX_DEFAULT` 参数,注意命令中间的空格。
```bash
## Intel 处理器添加参数
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
```
根据官方文档的说明,AMD 处理器下硬件直通功能将会自动打开,否则需要手动修改 `Grub` 配置文件。
```bash
## AMD 处理器添加参数
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
```
修改并保存后,需要更新系统 `Grub`
```bash
## 更新系统 Grub
$ update-grub
```
### 5.2.添加内核模块
修改系统 `/etc/modules` 配置文件,增加必要的系统模块。
```bash
## 编辑系统配置文件
$ nano /etc/modules
```
在配置文件中添加以下配置项,并保存。
```bash
## 硬件直通配置项
vfio
vfio_iommu_type1
vfio_pci
```
使用以下命令更新 `initramfs` ,更新完成后,建议重启 PVE 服务器。
```bash
## 更新 initramfs
$ update-initramfs -u -k all
```
### 5.3.检查硬件直通
PVE 服务器重启完成后,再次使用 SSH 工具登录,并使用以下命令检查硬件直通状态。
主要查看 `IOMMU``Directed I/O``Interrupt Remapping` 的启用状态。
```bash
## 检查系统硬件直通状态
$ dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
#### 设备 CPU - N6005 示例输出
[ 0.017937] ACPI: DMAR 0x00000000746C2000 000088 (v02 INTEL EDK2 00000002 01000013)
[ 0.017965] ACPI: Reserving DMAR table memory at [mem 0x746c2000-0x746c2087]
[ 0.047812] DMAR: IOMMU enabled
[ 0.116031] DMAR: Host address width 39
[ 0.116032] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.116038] DMAR: dmar0: reg_base_addr fed90000 ver 4:0 cap 1c0000c40660462 ecap 49e2ff0505e
[ 0.116041] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.116046] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[ 0.116048] DMAR: RMRR base: 0x0000007b800000 end: 0x0000007fbfffff
[ 0.116051] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.116052] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.116053] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.117774] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 1.746431] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[ 2.290116] DMAR: No ATSR found
[ 2.290117] DMAR: No SATC found
[ 2.290118] DMAR: IOMMU feature fl1gp_support inconsistent
[ 2.290119] DMAR: IOMMU feature pgsel_inv inconsistent
[ 2.290120] DMAR: IOMMU feature nwfs inconsistent
[ 2.290121] DMAR: IOMMU feature pds inconsistent
[ 2.290122] DMAR: IOMMU feature eafs inconsistent
[ 2.290123] DMAR: IOMMU feature prs inconsistent
[ 2.290123] DMAR: IOMMU feature nest inconsistent
[ 2.290124] DMAR: IOMMU feature mts inconsistent
[ 2.290124] DMAR: IOMMU feature sc_support inconsistent
[ 2.290125] DMAR: IOMMU feature dev_iotlb_support inconsistent
[ 2.290126] DMAR: dmar0: Using Queued invalidation
[ 2.290129] DMAR: dmar1: Using Queued invalidation
[ 2.290568] DMAR: Intel(R) Virtualization Technology for Directed I/O
```
检查系统 `IOMMU` 分组,使用以下命令。
```bash
## 检查 IOMMU group
$ find /sys/kernel/iommu_groups/ -type l
#### 设备 CPU - N6005 示例输出
/sys/kernel/iommu_groups/7/devices/0000:00:1c.4
/sys/kernel/iommu_groups/15/devices/0000:04:00.0
/sys/kernel/iommu_groups/5/devices/0000:00:17.0
/sys/kernel/iommu_groups/13/devices/0000:02:00.0
/sys/kernel/iommu_groups/3/devices/0000:00:15.2
/sys/kernel/iommu_groups/3/devices/0000:00:15.0
/sys/kernel/iommu_groups/11/devices/0000:00:1f.0
/sys/kernel/iommu_groups/11/devices/0000:00:1f.5
/sys/kernel/iommu_groups/11/devices/0000:00:1f.3
/sys/kernel/iommu_groups/11/devices/0000:00:1f.4
/sys/kernel/iommu_groups/1/devices/0000:00:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:1c.5
/sys/kernel/iommu_groups/16/devices/0000:05:00.0
/sys/kernel/iommu_groups/6/devices/0000:00:1c.0
/sys/kernel/iommu_groups/14/devices/0000:03:00.0
/sys/kernel/iommu_groups/4/devices/0000:00:16.0
/sys/kernel/iommu_groups/12/devices/0000:01:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.5
/sys/kernel/iommu_groups/2/devices/0000:00:14.2
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/10/devices/0000:00:1c.7
/sys/kernel/iommu_groups/0/devices/0000:00:02.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.6
```
## 6.系统清理
PVE 系统配置完成后,可逐条执行以下命令,对系统进行清理。
```bash
## 清理系统软件包
$ apt clean && apt autoclean && apt autoremove --purge
## 清理系统缓存
$ rm -rvf /var/cache/apt/* /var/lib/apt/lists/* /tmp/*
## 清理系统日志
$ find /var/log/ -type f | xargs rm -rvf
## 清理命令历史记录文件
$ rm -rvf ~/.bash_history
## 清理命令历史
$ history -c
```
至此 PVE 的系统调整已经完成。
+140 -106
View File
@@ -1,185 +1,193 @@
## 0.前期准备
将虚拟机制作成模板,可在后续新建虚拟机时快速从模板中创建,减少系统安装配置时间。
将虚拟机制作成模板,可在后续新建虚拟机时快速从模板中创建,减少系统安装配置时间。
本文将使用 Debian 的云镜像 `debian-11-genericcloud-amd64.qcow2` 作为模板虚拟机的镜像
该虚拟机模板主要作为内网 DNS 服务器使用,并会安装 Adguard Home
访问 [Debian Official Cloud Images](https://cloud.debian.org/images/cloud/) 官方网站,下载最新版 `Bullseye` 云镜像以及对应的校验文件:
本文将使用 Debian 的云镜像 `debian-12-genericcloud-amd64.qcow2` 作为模板虚拟机的镜像。
![下载镜像](img/p04/download_genericcloud_image_qcow2.png)
访问 [Debian Official Cloud Images](https://cloud.debian.org/images/cloud/) 官方网站,下载最新版 `Bookworm` 云镜像以及对应的校验文件。
该虚拟机模板主要作为内网 DNS 服务器使用,并会安装 Adguard Home 。
![下载镜像](img/p04/download_genericcloud_image_qcow2.jpeg)
## 1.创建虚拟机
登录 PVE 管理后台,点击页面右上角 `创建虚拟机` ,进入虚拟机创建流程。
### 1.1.常规
登录到 PVE 后台后,进入新建虚拟机流程,并勾选底部 “高级” ,打开虚拟机创建页面的高级选项。
勾选底部 `高级` 选项,显示完整的配置参数,节点即 “本机” ,`VM ID``名称` 可自定义。
节点即本机,`VM ID``名称` 可以自由定义。
![虚拟机名称](img/p04/vm_id.png)
![虚拟机名称](img/p04/vm_id.jpeg)
### 1.2.操作系统
无需使用任何安装介质。
无需使用任何安装介质,客户机操作系统类别选择 `Linux` 版本选择 `6.x - 2.6 Kernel` 即可
操作系统类别选择 `Linux` 、版本选择 `5.x - 2.6 Kernel` 即可。
![虚拟机操作系统](img/p04/vm_os.png)
![虚拟机操作系统](img/p04/vm_os.jpeg)
### 1.3.系统
系统部分需要修改一些内容,以满足 Debian 使用 `UEFI` 启动需求
SCSI 控制器保持默认 `VirtIO SCSI single` ,并勾选 `Qemu代理` 选项
显卡选择 `默认`,图中使用的 `SPICE` 仅供测试。
机型一般选择 `默认` 即可,使用 `q35` 主要为了测试 `UEFI` 启动。
SCSI 控制器选择 `VirtIO SCSI single` ,勾选 `Qemu代理` 选项。
在固件处需要针对 `UEFI` 进行调整,BIOS 选择 `OVMF (UEFI)` ,勾选 `添加EFI磁盘` EFI 存储选择 `local-lvm`
![虚拟机系统](img/p04/vm_system.png)
![虚拟机系统](img/p04/vm_system.jpeg)
### 1.4.磁盘
一般情况下,如果该虚拟机仅为 ADH 服务器,`16G` 磁盘空间足够使用。
一般情况下,如果该虚拟机仅为 Adguard Home 服务器,`20G` 磁盘空间足够使用。
由于使用 Cloud Image 制作虚拟机模板,此处删除所有磁盘:
由于使用 Debian 云镜像制作虚拟机模板,此处删除所有 `磁盘`
![虚拟机磁盘](img/p04/vm_hd.png)
![虚拟机磁盘](img/p04/vm_hd.jpeg)
### 1.5.CPU
CPU类别选择 `host` 核心根据物理 CPU 核心数进行酌情设置。
CPU `类别` 选择 `host` `插槽``核心`根据物理 CPU 核心数进行酌情设置。
若 PVE 服务器内有多颗物理 CPU ,则推荐启用 `NUMA`
若 PVE 服务器内有多颗物理 CPU ,则推荐勾选 `启用NUMA` 选项。
![虚拟机CPU](img/p04/vm_cpu.png)
![虚拟机CPU](img/p04/vm_cpu.jpeg)
### 1.6.内存
内存一般 2G 足够使用,关闭 `Ballooning` 设备选项:
内存一般 `2G` 足够使用,取消勾选 `Ballooning设备`
![虚拟机内存](img/p04/vm_mem.png)
![虚拟机内存](img/p04/vm_mem.jpeg)
### 1.7.网络
PVE 的 [网络设](./02.PVE初始化配置.md#3配置-pve-网桥和管理网口) 中,曾创建了一个没有桥接任何物理网口的内部网桥。
[02.PVE初始化配](./02.PVE初始化配置.md) 中,曾创建了一个没有桥接任何物理网口的内部网桥。
并且该网桥接口为主路由 RouterOS 的 LAN 的成员接口。
内部网桥接口同属于主路由内部网桥成员接口。
因此 Debian 虚拟机的网络设备选择该内部网桥即可,演示环境为 `vmbr4`
因此,模板虚拟机的 `桥接` 参数可设置为该纯内部网桥。
![虚拟机网口](img/p04/vm_network_port.png)
![虚拟机网口](img/p04/vm_network_port.jpeg)
取消网口的 `防火墙` ,并根据虚拟机 vCPU 数,指定 `Multiqueue` 的数量,演示环境为 `2`
由于演示环境中暂未安装主路由系统,因此选择其他网桥接口替代。
![虚拟机网卡多队列](img/p04/vm_network_queue.png)
通常情况下无需使用 PVE 内建防火墙,因此 **取消勾选** 网络设备的 `防火墙` 选项。
推荐在 `Multiqueue` 处根据前面设置的 CPU 核心数进行网卡多队列设置,设置比例为 1:1 。
即有 n 个 CPU 核心,此处多队列也设置为 n 。
![虚拟机网卡多队列](img/p04/vm_network_queue.jpeg)
### 1.8.确认
接下来查看设置总览,确认无误即可点击 “完成”
接下来查看设置总览,确认无误即可点击 `完成`
![虚拟机确认](img/p04/vm_confirm.png)
![虚拟机确认](img/p04/vm_confirm.jpeg)
## 2.调整虚拟机硬件参数
## 2.调整硬件参数
### 2.1.删除虚拟机光驱
### 2.1.删除光驱
此时,查看虚拟机详情页,可以看到我们刚才创建的 Debian 虚拟机,删除 `CD/DVD驱动器`
查看虚拟机详情页,在虚拟机硬件配置页面,移除其 `CD/DVD驱动器`
![虚拟机删除光驱](img/p04/vm_delete_cd.png)
![虚拟机删除光驱](img/p04/vm_delete_cd.jpeg)
### 2.2.虚拟机导入磁盘镜像
### 2.2.导入镜像文件
使用 SSH 工具登录 PVE 服务器,并进入 `tmp` 目录,逐条执行以下命令创建一个文件夹
使用 SSH 工具登录 PVE 服务器,并进入 `tmp` 目录,逐条执行以下命令创建一个文件夹
```bash
# 进入 tmp 目录
cd /tmp
## 进入 tmp 目录
$ cd /tmp
# 创建文件夹
mkdir Debian
## 创建文件夹
$ mkdir Debian
# 进入文件夹
cd Debian
## 进入文件夹
$ cd Debian
```
将 Debian 云镜像 `debian-11-genericcloud-amd64.qcow2`传到该文件夹,并检查 `hash`
将 Debian 云镜像传到该文件夹,并检查 `hash`
```bash
# 检查文件是否存在
ls -la
## 下载云镜像校验文件
$ wget https://cloud.debian.org/images/cloud/bookworm/latest/SHA512SUMS
# 计算文件 hash
sha512sum debian-11-genericcloud-amd64.qcow2
## 下载云镜像
$ wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
## 检查文件是否存在
$ ls -la
## 显示校验文件内容
$ cat SHA512SUMS
## 计算文件 hash
$ sha512sum debian-12-genericcloud-amd64.qcow2
```
确认无误后,将 Debian 云镜像导入刚才创建的虚拟机,命令中的 `VM ID` 需要根据实际情况替换,演示为 `1000`
确认无误后,将镜像文件导入刚才创建的虚拟机,命令中的 `VM ID` 需要根据实际情况替换,演示为 `1000`
```bash
# 将 qcow2 镜像导入虚拟机中
qm importdisk 1000 debian-11-genericcloud-amd64.qcow2 local-lvm
## 将 qcow2 镜像导入虚拟机中
$ qm importdisk 1000 debian-12-genericcloud-amd64.qcow2 local-lvm
# 输出结果为以下类似内容表示成功
Successfully imported disk as 'unused0:local-lvm:vm-1000-disk-1'
#### 镜像导入示例输出
Successfully imported disk as 'unused0:local-lvm:vm-1000-disk-0'
```
![虚拟机新磁盘](img/p04/vm_unused_hd.png)
![虚拟机新磁盘](img/p04/vm_unused_hd.jpeg)
鼠标 **双击** 该未使用的磁盘,勾选 `IO thread` ,点击添加按钮:
鼠标 **双击** 该未使用的磁盘,点击 `添加`
![虚拟机使用该磁盘](img/p04/vm_enable_hd.png)
![虚拟机使用该磁盘](img/p04/vm_enable_hd.jpeg)
导入的磁盘只有 `2G` 磁盘空间,为了后续方便使用,先给磁盘扩容 `16G` 的磁盘空间
导入的镜像只有 `2G` 磁盘空间,为了后续方便使用,需要对磁盘进行扩容
鼠标 **单击** 选中该磁盘,选择页面顶部 `Disk Action` 菜单的子菜单 `Resize`
鼠标 **单击** 选中该磁盘,选择页面顶部 `磁盘操作` 菜单的子菜单 `调整大小`
![虚拟机磁盘扩容](img/p04/vm_hd_resize.png)
![虚拟机磁盘扩容](img/p04/vm_hd_resize.jpeg)
在弹出的对话框中,给该磁盘增加 `16G` 磁盘空间
在弹出的对话框中,给该磁盘增加 `18G` 磁盘空间
![虚拟机磁盘增加16G](img/p04/vm_hd_16g.png)
![虚拟机磁盘增加18G](img/p04/vm_hd_18g.jpeg)
### 2.3.虚拟机添加CloudInit设备
### 2.3.添加 CloudInit
为了能够正使用 Cloud-Init 初始化系统,需要给 Debian 虚拟机添加 `CloudInit设备`
为了能够正使用 Cloud-Init 初始化系统,需要给模板虚拟机添加 `CloudInit设备`
点击顶部 `添加` 按钮,选择 `CloudInit设备`
点击顶部 `添加` 菜单,选择 `CloudInit设备`
![虚拟机添加ci](img/p04/vm_cloudinit.png)
![虚拟机添加ci](img/p04/vm_cloudinit.jpeg)
`总线/设备` 选择 `SCSI` ,编号为 `1` 存储选择 `local-lvm`
`总线/设备` 选择 `SCSI` ,编号为 `1` `存储` 选择 `local-lvm`
![虚拟机ci参数](img/p04/vm_ci_details.png)
![虚拟机ci参数](img/p04/vm_ci_details.jpeg)
### 2.4.虚拟机添加串行端口
### 2.4.添加串行端口
有些云镜像需要用 `serial` 端口作为视频输出端口,不然虚拟机无法启动,因此给 Debian 虚拟机添加串行端口。
部分云镜像需要使`serial` 端口作为视频输出端口,否则虚拟机无法启动,因此给模板虚拟机添加串行端口。
点击顶部 `添加` 按钮,选择 `串行端口`
点击顶部 `添加` 菜单,选择 `串行端口`
![虚拟机添加串口](img/p04/vm_serial.png)
![虚拟机添加串口](img/p04/vm_serial.jpeg)
串行端口编号为 `0`
串行端口编号为 `0`
![虚拟机串口参数](img/p04/vm_serial_details.png)
![虚拟机串口参数](img/p04/vm_serial_details.jpeg)
虚拟机硬件设备修改完成后,如下图所示
虚拟机硬件设备修改完成后,如下图所示
![虚拟机全部硬件](img/p04/vm_hardware_all.png)
![虚拟机全部硬件](img/p04/vm_hardware_all.jpeg)
## 3.调整虚拟机配置参数
## 3.调整配置参数
进入左侧虚拟机 `选项` 菜单,可以看到当前虚拟机的配置参数。
进入左侧虚拟机 `选项` 页面,可以看到当前虚拟机的配置参数。
通常情况下,Debian 虚拟机的配置参数需要修改以下几个:
通常情况下,模板虚拟机的配置参数需要修改以下内容:
1. 开机自启动(模板无需修改,克隆的虚拟机需要修改)
2. 启动/关机顺序(模板无需修改,克隆的虚拟机需要修改)
3. 引导顺序(仅模板需要修改)
4. 使用平板指针(仅模板需要修改)
### 3.1.修改引导顺序
@@ -188,43 +196,69 @@ Successfully imported disk as 'unused0:local-lvm:vm-1000-disk-1'
`scsi0` 设备处,勾选前面的 “已启用” 复选框,并使用行首的排序功能,将该设备拖拽到第一个。
然后点击 `OK` 按钮
然后点击 `OK` 按钮
![虚拟机引导顺序](img/p04/vm_boot.png)
![虚拟机引导顺序](img/p04/vm_boot.jpeg)
### 3.2.修改平板指针设置
### 3.2.设置平板指针
关闭 `使用平板指针` 选项,可以一定程度上降低虚拟机的 CPU 使用率。
![虚拟机平板指针](img/p04/vm_tablet.png)
![虚拟机平板指针](img/p04/vm_tablet.jpeg)
## 4.设置Cloud-Init
## 4.设置 Cloud-Init
进入左侧虚拟机 `Cloud-Init` 菜单,可以看到当前虚拟机的初始化参数。
根据之前的网络规划,内网的 IP 地址段为 `172.16.1.0/24` ,因此 Debian 虚拟机模板的参数如下:
### 4.1.自动配置 IPv6
根据之前的网络规划,内网的 IP 地址段为 `172.16.1.0/24` ,因此模板虚拟机的参数如下。
|参数|值|说明|
|--|--|--|
|用户|fox|新系统的管理员账户|
|密码|********|使用强密码|
|DNS域|fox.lab|内网域名(可选)|
|DNS服务器|`172.16.1.1 fc00::1`|本机DNS服务器,用空格隔开|
|SSH公钥||使用秘钥登录服务器,暂不使用|
|IP配置(net0)|`ip=172.16.1.240/24,gw=172.16.1.1,ip6=fc00::f0/64`|模板的 IP 设置|
|用户|`fox`|新系统的管理员账户|
|密码|`********`|使用强密码|
|DNS域|`fox.local`|内网域名(可选)|
|DNS服务器|`172.16.1.1`|本机 DNS 服务器|
|SSH公钥|`无`|使用秘钥登录服务器,暂不使用|
|Upgrade packages|`是`|启动时更新软件包,保持默认即可|
|IP配置(net0)|`ip=172.16.1.250/24,gw=172.16.1.1,ip6=auto`|模板的 IP 设置|
**说明:**
**额外说明:**
修改 `Cloud-Init` 参数时,需要在虚拟机关机情况下修改才会生效。
1. 修改 `Cloud-Init` 参数时,需要在虚拟机关机情况下修改才会生效。
`DNS服务器` 设置部分,如果先设置了 `127.0.0.1` 作为虚拟机 DNS 服务器,后续其他 DNS 的 IP 地址将被虚拟机忽略
2. `DNS服务器` 参数支持输入多个 IPv4 / IPv6 地址,使用空格隔开
此时内网没有其他 DNS 服务器存在,因此 `DNS服务器` 先设置为 `172.16.1.1 fc00::1` IP 之间用空格隔开
3. 当前 `DNS服务器` 参数为主路由 LAN 口 IPv4 地址,确保虚拟机能正常联网
在使用 Debian 模板克隆出新虚拟机之后,再对新虚拟机调整 IP 设置比较好。
![CI网络配置](img/p04/vm_ci_dns.jpeg)
`Cloud-Init``IP配置` ,如下图所示
`Cloud-Init``IP配置` IPv4 使用静态地址,IPv6 使用 `SLAAC` 自动配置,如下图所示
![CI网络配置](img/p04/vm_ci_network.png)
![CI网络配置](img/p04/vm_ci_network_slaac.jpeg)
### 4.2.手动配置 IPv6
当主路由配置了 ULA IPv6 网段,且希望指定内网 DNS 服务器的 ULA IPv6 地址时,需要调整 `Cloud-Init` 参数。
本文 ULA IPv6 演示地址为 `fdac::/64` `DNS服务器``IP配置` 参数调整如下。
|参数|值|说明|
|--|--|--|
|DNS域|`fox.local`|内网域名(可选)|
|DNS服务器|`172.16.1.1 fdac::1`|本机 DNS 服务器|
|IP配置(net0)|`ip=172.16.1.250/24,gw=172.16.1.1,ip6=fdac::fa/64`|模板的 IP 设置|
`DNS服务器` 参数中需要加入主路由 LAN 口 ULA IPv6 地址。
![CI网络配置](img/p04/vm_ci_dns_ula.jpeg)
`IP配置` 参数,IPv4 使用静态地址,IPv6 同样使用静态地址,如下图所示。
IPv6 使用静态地址后,并不影响虚拟机通过主路由获取公网 GUA IPv6 地址。
![CI网络配置](img/p04/vm_ci_network_static.jpeg)
至此,模板虚拟机创建完成,可将该虚拟机开机。
设置完成后,Debian 虚拟机必要参数全部设置完成,可以将该虚拟机开机。
+240 -376
View File
@@ -1,228 +1,183 @@
## 1.配置Debian系统
## 1.配置系统
在上一篇文章 [04.PVE创建模板虚拟机](./04.PVE创建模板虚拟机.md) 中,我们已经创建好了用于制作虚拟机模板的 Debian 虚拟机。
在上一篇文章 [04.PVE创建模板虚拟机](./04.PVE创建模板虚拟机.md) 中,已经创建好了用于制作虚拟机模板的模板虚拟机。
并调整了模板虚拟机的硬件参数、配置参数,但还需对 Debian 系统进行调整。
此时可以将 Debian 虚拟机开机,使用 `Cloud-Init` 中设置的账号密码进行登录。
此时将模板虚拟机开机,使用 `Cloud-Init` 中设置的账号密码进行登录。
### 1.1.启用SSH密码登录
### 1.1.配置 SSH
因为 Debian 的云镜像默认使用秘钥登录,因此切换到左侧菜单的 `控制台` 进行操作:
因为 Debian 的云镜像默认使用 SSH 秘钥登录,因此切换到左侧菜单的 `控制台` 进行登录。
![登录Debian操作系统](img/p05/os_login.png)
![登录Debian操作系统](img/p05/os_login.jpeg)
Debian 虚拟机的命令行界面,使用 `nano` 编辑器编辑 `sshd` 服务的配置文件,执行以下命令
在虚拟机的命令行界面,使用 `vim` 编辑器编辑 `sshd` 服务的配置文件,执行以下命令
`vim` 编辑器常用操作如下:
- 编辑文件,按下键盘 `i` 键,进入编辑模式。
- 保存文件,按下键盘 `Esc` 键,退出编辑模式,再输入组合键 `:wq` 即可保存。
```bash
## 编辑 ssh 配置文件
sudo nano /etc/ssh/sshd_config.d/fox_sshd.conf
$ sudo vim /etc/ssh/sshd_config.d/server_sshd.conf
```
编辑器对话框中输入以下内容,注意命令中间的空格:
配置文件中添加以下配置项,并保存。
```bash
## SSH 配置项
PasswordAuthentication yes
PermitEmptyPasswords no
UseDNS no
```
`nano` 编辑器常用操作如下:
- 在编辑文件时,可以用键盘 `方向键` 移动光标位置
- 在保存文件时,按下键盘 `ctrl 和 x` 组合键,再按下键盘 `y` 键,即可保存
然后,重启 SSH 服务:
修改完成后,需要重启 SSH 服务。
```bash
## 重启 sshd
sudo systemctl restart ssh.service
$ sudo systemctl restart ssh.service
```
就可以像往常一样,通过 SSH 工具远程访问 Debian 虚拟机了。
### 1.2.配置软件源
### 1.2.配置系统软件源
使用 SSH 工具登录模板虚拟机,常用 SSH 工具请参阅 [01.PVE系统安装](./01.PVE系统安装.md) 。
使用 SSH 工具登录 Debian 虚拟机,常用 SSH 工具可以看之前文章中的 [SSH 工具推荐](./01.PVE系统安装.md#03ssh工具)
首先需要对 Debian 系统软件源进行修改,这里使用 [USTC](http://mirrors.ustc.edu.cn/help/debian.html) 镜像站作为演示
首先需要对 Debian 系统的软件源进行修改,这里使用 USTC 镜像站作为演示
当系统版本发生变化时,请参考使用 snullp 大叔开发的 [配置生成器](https://mirrors.ustc.edu.cn/repogen/)
以后当系统版本发生变化时,请参考使用 snullp 大叔开发的 [配置生成器](https://mirrors.ustc.edu.cn/repogen/)
逐条执行以下命令:
Debian12 云镜像的软件源配置采用了 `DEB822` 格式,新版 `sources.list` 配置文件内容如下
```bash
## 进入系统源配置文件目录
cd /etc/apt/
## 查看镜像配置文件
$ cat /etc/apt/sources.list
## 备份旧的系统源配置文件
sudo mv sources.list sources.list.bak
## 创建新的系统源配置文件
sudo nano sources.list
#### 配置文件示例输出
# See /etc/apt/sources.list.d/debian.sources
```
`nano` 编辑器对话框中输入以下内容(注释了 `deb-src` 以便加快软件源同步速度),并保存:
进一步查看新配置文件 `debian.sources` 的内容,其配置包含 `3` 个部分。
```bash
deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
## 查看新版镜像配置文件
$ cat /etc/apt/sources.list.d/debian.sources
deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
#### 新版配置文件示例输出 (主体部分)
Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian.list
Suites: bookworm bookworm-updates bookworm-backports
Components: main
deb https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian-security.list
Suites: bookworm-security
Components: main
## 查看关联的配置文件
$ cat /etc/apt/mirrors/debian.list
#### 关联配置文件示例输出 (关联部分 1 )
https://deb.debian.org/debian
## 查看关联的配置文件
$ cat /etc/apt/mirrors/debian-security.list
#### 关联配置文件示例输出 (关联部分 2 )
https://deb.debian.org/debian-security
deb https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
# deb-src https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
```
更新软件源的同步内容,并更新系统,逐条执行以下命令:
因此,修改 Debian12 软件源的方式也有两种,本文将尝试使用第 `2` 种修改方案。
1. 删除当前软件源配置文件,重新启用常规 `sources.list` 配置文件的配置方案。
2. 根据当前软件源配置文件的语法规则,仅修改配置文件。
使用 `vim` 编辑器编辑 `debian.sources` 配置文件,执行以下命令。
```bash
## 编辑 debian.sources 配置文件
$ sudo vim /etc/apt/sources.list.d/debian.sources
```
删除里面全部内容,添加以下配置项,并保存。
```bash
## 系统软件源配置项
Types: deb
URIs: https://mirrors.ustc.edu.cn/debian
Suites: bookworm bookworm-updates bookworm-backports
Components: main contrib non-free non-free-firmware
Types: deb
URIs: https://mirrors.ustc.edu.cn/debian-security
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
```
为了防止 `Cloud-Init` 服务意外修改软件源配置,需要添加文件保护,执行以下命令。
```bash
## 增加文件保护
$ sudo chattr +i /etc/apt/sources.list.d/debian.sources
## 检查文件保护
$ lsattr /etc/apt/sources.list.d/debian.sources
#### 示例输出
----i---------e------- /etc/apt/sources.list.d/debian.sources
```
### 1.3.安装软件
软件源设置完成后,需要更新系统,逐行执行以下命令。
```bash
## 清理不必要的包
sudo apt clean && sudo apt autoclean && sudo apt autoremove --purge
$ sudo apt clean && sudo apt autoclean && sudo apt autoremove --purge
## 更新软件源
sudo apt update
$ sudo apt update
## 更新系统
sudo apt dist-upgrade
$ sudo apt dist-upgrade
```
接下来安装系统必要软件,Adguard Home 将采用 `snap` 形式安装,逐条执行以下命令:
接下来安装系统必要软件,安装 `iperf3` 后,系统将询问是否将其作为系统服务开机自启,选择 `no` 即可。
```bash
## 安装系统软件
sudo apt install qemu-guest-agent zsh git curl htop lm-sensors vim tmux nftables sshguard
$ sudo apt install qemu-guest-agent zsh git htop tmux cron nftables sshguard
## 安装系统自动更新工具
sudo apt install unattended-upgrades apt-listchanges powermgmt-base python3-gi
$ sudo apt install unattended-upgrades powermgmt-base python3-gi
## 安装网络工具
sudo apt install iperf iperf3 iftop lsof ldnsutils dhcpcd5
## 安装 snap
sudo apt install snapd
## 安装 Adguard Home
sudo snap install adguard-home
$ sudo apt install iperf iperf3 iftop lsof ldnsutils
## 写入磁盘
sudo sync
$ sudo sync
```
Adguard Home 安装完成后,先停止其服务:
### 1.4.调整内核参数
```bash
## 停止 Adguard Home
sudo snap stop adguard-home
```
由于该 Debian 虚拟机模板将用于克隆内网 DNS 服务器,因此需要调整内核参数来简单优化性能。
### 1.3.配置网卡IPv4
使用 `Cloud-Init` 并给虚拟机分配了静态 IPv4 地址后,虚拟机的网卡还会从路由器的 DHCP 再获取一个 IPv4 地址。
这个功能在给虚拟机添加网卡设备时很有用,但本 Debian 虚拟机模板的使用场景只需要一个静态 IPv4 地址,因此需要禁用网卡自动获取 IPv4 地址的功能。
执行以下命令对网卡的配置文件进行修改:
```bash
## 修改 Debian 网卡配置文件
sudo nano /etc/network/interfaces
```
`nano` 编辑器对话框中,将 `source-directory /run/network/interfaces.d` 这行内容 “注释” 掉,参考如下内容:
```bash
## 网卡配置文件示例
# Cloud images dynamically generate config fragments for newly
# attached interfaces. See /etc/udev/rules.d/75-cloud-ifupdown.rules
# and /etc/network/cloud-ifupdown-helper. Dynamically generated
# configuration fragments are stored in /run:
# source-directory /run/network/interfaces.d ## 在这行前面增加注释符 # 来注释
```
将配置保存后,可以将模板虚拟机重启。
在系统重启完成后,执行以下命令检查系统的 IPv4 地址状态:
```bash
## 检查系统 IP 地址状态
ip a
```
如果系统网卡有且仅有一个 IPv4 地址,且该 IPv4 地址与 `Cloud-Init` 中设置的 IPv4 地址相同,则表示系统网卡已正确设置。
### 1.4.配置网卡IPv6
使用 `Cloud-Init` 并给虚拟机分配了静态 IPv6 地址后,该地址为私有 ULA 地址,此时虚拟机的网卡不会以 `SLAAC` 的方式配置 IPv6 地址。
如果上级路由器没有设置 `NAT66` ,且将公网 GUA 地址的 `Prefix` 通告到内网时,虚拟机将无法自动生成 GUA 地址,从而导致无法访问 IPv6 网络。
因此引入 `dhcpcd` 工具,在正确配置虚拟机 IPv6 地址的同时,保持与 `Cloud-Init` 网卡配置的兼容性。
执行以下命令对网卡的配置文件进行修改:
```bash
## 备份 dhcpcd 配置文件
sudo mv /etc/dhcpcd.conf /etc/dhcpcd.conf.bak
## 修改 dhcpcd 配置文件
sudo nano /etc/dhcpcd.conf
```
在编辑器对话框中输入以下内容,注意命令中间的空格:
```bash
# This configuration file is customized by fox
# Optimize dhcpcd parameters for dns server
# Only configure IPv6
ipv6only
# Inform the DHCP server of our hostname for DDNS.
hostname
# A list of options to request from the DHCP server.
nooption domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Respect the network MTU.
option interface_mtu
# A ServerID is required by RFC2131.
require dhcp_server_identifier
# Generate Stable Private IPv6 Addresses based from the DUID
slaac private
# Don't send any ARP requests.
noarp
```
保存该配置文件后,重启系统或者执行以下命令重启 `dhcpcd` 服务:
```bash
## 重启 dhcpcd 服务
sudo systemctl restart dhcpcd.service
```
### 1.5.调整系统内核参数
由于该 Debian 虚拟机模板将用于克隆内网 DNS 服务器,因此需要调整一部分系统内核参数来简单优化性能。
使用 `nano` 编辑器编辑 **内核参数** 配置文件,执行以下命令:
使用 `vim` 编辑器编辑 **内核参数** 配置文件,执行以下命令。
```bash
## 编辑 内核参数 配置文件
sudo nano /etc/sysctl.d/99-sysctl.conf
$ sudo vim /etc/sysctl.d/99-sysctl.conf
```
在配置文件末尾输入以下内容,注意命令中间的空格
在配置文件末尾输入以下配置项,注意配置中间的空格
```bash
# This configuration file is customized by fox
@@ -249,134 +204,146 @@ net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.use_tempaddr = 0
```
保存该配置文件后,重启系统或者执行以下命令让配置生效
保存该配置文件后,重启系统或者执行以下命令让配置生效
```bash
## 让内核参数生效
sudo sysctl -f
$ sudo sysctl -f
```
### 1.6.调整系统时间
### 1.5.调整系统时间
默认情况下 Debian 云镜像的系统时间可能不正确,执行以下命令将系统时区设置为中国时区
默认情况下 Debian 云镜像的系统时间需要调整,执行以下命令将系统时区设置为中国时区
```bash
## 设置系统时区
sudo timedatectl set-timezone Asia/Shanghai
$ sudo timedatectl set-timezone Asia/Shanghai
## 检查系统时间
$ date -R
#### 系统时间示例输出
Mon, 26 Jun 2023 16:16:16 +0800
```
设置完成后,执行以下命令检查系统时间:
Debian 云镜像默认使用 `systemd-timesyncd.service` 同步时间,且需要调整为使用国内 NTP 服务器。
调整 NTP 服务器参数,逐行执行以下命令。
```bash
## 检查系统时区
date -R
## 创建 NTP 配置文件的文件夹
$ sudo mkdir /etc/systemd/timesyncd.conf.d
## 创建 NTP 配置文件
$ sudo vim /etc/systemd/timesyncd.conf.d/server_ntp.conf
```
Debian 普通镜像常用 `systemd-timesyncd.service` 来同步时间,而 Debian 云镜像使用 `chrony.service` 来同步时间
为了使用国内的 NTP 服务器,需要对 `chrony.service` 进行配置。
执行以下命令对 `chrony` 的配置文件进行修改:
在配置文件中添加以下配置项,并保存
```bash
## 编辑 chrony 配置文件
sudo nano /etc/chrony/chrony.conf
## NTP 配置
[Time]
NTP=ntp.tencent.com ntp.aliyun.com
```
在编辑器对话框中,将 `pool 2.debian.pool.ntp.org iburst` 这行内容 “注释” 掉,并添加国内的 NTP 服务器,参考如下内容:
```bash
## chrony 服务配置文件示例
# Use Debian vendor zone.
# pool 2.debian.pool.ntp.org iburst ## 在这行前面增加注释符 # 来注释
# Use Custom vendor zone.
pool ntp.tencent.com iburst
pool ntp.aliyun.com iburst
```
保存该配置文件后,重启 `chrony` 服务:
保存该配置文件后,需重启 `systemd-timesyncd.service` 服务,并再次检查系统 NTP 服务器地址。
```bash
## 重启 chrony 服务
sudo systemctl restart chrony.service
```
$ sudo systemctl restart systemd-timesyncd.service
再检查系统 NTP 服务器是否被正确修改:
```bash
## 检查系统 NTP 服务器
chronyc sources -V
$ sudo systemctl status systemd-timesyncd.service
```
如果输出以下类似内容,则表示系统 NTP 服务设置正确
如果输出以下类似内容,则表示系统 NTP 服务设置正确
```bash
## NTP 服务示例输出
#### NTP 服务示例输出
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
Active: active (running) since Mon 2023-06-26 16:16:00 CST; 16s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 18829 (systemd-timesyn)
Status: "Contacted time server 106.55.184.199:123 (ntp.tencent.com)."
Tasks: 2 (limit: 2355)
Memory: 1.4M
CPU: 37ms
CGroup: /system.slice/systemd-timesyncd.service
└─18829 /lib/systemd/systemd-timesyncd
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 139.199.215.251 2 10 177 244 -1669us[-1757us] +/- 67ms
^* 203.107.6.88 2 10 377 105 -1005us[-1094us] +/- 19ms
Jun 26 16:48:00 DNST01 systemd[1]: Starting systemd-timesyncd.service - Network Time Synchronization...
Jun 26 16:48:00 DNST01 systemd[1]: Started systemd-timesyncd.service - Network Time Synchronization.
Jun 26 16:48:00 DNST01 systemd-timesyncd[18829]: Contacted time server 106.55.184.199:123 (ntp.tencent.com).
Jun 26 16:48:00 DNST01 systemd-timesyncd[18829]: Initial clock synchronization to Mon 2023-06-26 16:16:16.000000 CST.
```
### 1.7.配置系统自动更新
### 1.6.配置自动更新
配置 Debian 模板虚拟机的系统自动更新,与配置 PVE 系统自动更新方法基本一致,参阅 [PVE系统自动更新](./03.PVE系统调整.md#5pve系统自动更新) 。
配置 Debian 云镜像的系统自动更新,与配置 PVE 系统自动更新方法基本一致,参阅 [03.PVE系统调整](./03.PVE系统调整.md) 。
配置系统更新之前,先检查当前系统定时器状态
配置系统更新之前,先检查当前系统定时器状态
```bash
## 检查系统定时器
sudo systemctl status apt-daily-upgrade.timer
$ sudo systemctl status apt-daily-upgrade.timer
```
配置系统自动更新策略,执行以下命令,使用键盘 `左右方向键` 进行选择,`回车键` 进行确认
配置系统自动更新策略,执行以下命令,使用键盘 `左右方向键` 进行选择,`回车键` 进行确认
```bash
## 配置自动更新策略
sudo dpkg-reconfigure -plow unattended-upgrades
$ sudo dpkg-reconfigure -plow unattended-upgrades
## 选择 “是” (“YES”)
## 示例输出
#### 系统自动更新示例输出
Creating config file /etc/apt/apt.conf.d/20auto-upgrades with new version
```
接下来调整 apt 的 `20auto-upgrades` 配置文件
进一步调整 `20auto-upgrades` 配置文件
```bash
## 进入 apt 的配置目录
cd /etc/apt/apt.conf.d
## 编辑 20auto-upgrades 配置文件
sudo nano 20auto-upgrades
## 删除里面全部内容并填写以下内容
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "5";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::CleanInterval "1";
$ sudo vim /etc/apt/apt.conf.d/20auto-upgrades
```
其中,用来控制系统更新周期的为 `APT::Periodic::Unattended-Upgrade` 这行内容,其中参数 `"5"` 表示更新周期为 `5`
删除里面全部内容,添加以下配置项,并保存
再调整 apt 的 `50unattended-upgrades` 配置文件,所有修改项目汇聚如下:
配置文件中,用来控制更新周期的参数为 `APT::Periodic::Unattended-Upgrade` `3` 表示更新周期为 `3` 天。
```bash
## 进入 apt 的配置目录
cd /etc/apt/apt.conf.d
## 系统更新周期配置项
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "3";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::CleanInterval "1";
```
进一步调整 `50unattended-upgrades` 配置文件。
```bash
## 编辑 50unattended-upgrades 配置文件
sudo nano 50unattended-upgrades
$ sudo vim /etc/apt/apt.conf.d/50unattended-upgrades
```
根据 “注释” 中相关说明,调整配置文件。
因为该配置文件很长,完整的配置文件可查看 [debian_50unattended_upgrades.conf](./src/debian_50unattended_upgrades.conf) 以便对比。
```bash
## 删除以下行前面的注释符 // ,代表启用
"origin=Debian,codename=${distro_codename}-updates";
## 删除以下行前面的注释符,代表启用,并调整参数
## 在配置文件末尾增加以下配置项,代表启用,并调整参数
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
@@ -388,222 +355,119 @@ Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:30";
```
因为该配置文件很长,文章中留下一份 Debian 中已配置好的文件 [debian_50unattended_upgrades.conf](./src/debian_50unattended_upgrades.conf) ,以便对比
两个配置文件均修改完成后,需要重设系统自动更新触发器,执行以下命令:
系统自动更新配置文件修改完成后,需要重设自动更新定时器,执行以下命令
```bash
## 重设自动更新触发器时间为凌晨02:00
sudo systemctl edit apt-daily-upgrade.timer
## 配置系统定时器
$ sudo systemctl edit apt-daily-upgrade.timer
```
根据配置文件中的提示,在中间空白处填入以下配置项。
```bash
## 定时器配置项
## 根据文件中的提示,在中间空白处填入以下内容
[Timer]
OnCalendar=
OnCalendar=02:00
RandomizedDelaySec=0
```
重启触发器,并检查其状态,执行以下命令
设置完成后,重启自动更新定时器并检查其状态,执行以下命令
在输出结果中看到系统自动更新的触发时间为凌晨 `02:00` 则表示设置正确。
```bash
## 重启触发器
sudo systemctl restart apt-daily-upgrade.timer
$ sudo systemctl restart apt-daily-upgrade.timer
## 再次检查触发器状态
sudo systemctl status apt-daily-upgrade.timer
$ sudo systemctl status apt-daily-upgrade.timer
```
在输出结果中看到系统自动更新的触发时间为凌晨 `02:00` 则表示设置正确。
### 1.7.配置定时任务
### 1.8.配置Snap自动更新
先查看 Snap 当前的更新策略,执行以下命令:
```bash
## 显示当前 Snap 自动更新设置
sudo snap refresh --time
```
将 Snap 自动更新时间设置为每天 `2:30-3:30``14:30-15:30` 两个时间段:
```bash
## 修改 Snap 自动更新时间
sudo snap set system refresh.timer=2:30-3:30,14:30-15:30
## 其他 Snap 自动更新时间设置语法参考
sudo snap set system refresh.timer=mon,2:30,,fri,2:30
```
### 1.9.配置系统定时任务
本步骤为可选操作,主要设置定时重启 Snap 服务以及操作系统。
本步骤为可选操作,主要设置系统定时重启。
```bash
## 查看系统定时任务
sudo crontab -l
$ sudo crontab -l
## 编辑系统定时任务,编辑器选择 nano
sudo crontab -e
## 定时重启 Snap 服务、操作系统
0 5 * * * /usr/bin/snap restart adguard-home
0 6 8,24 * * /usr/sbin/reboot
$ sudo crontab -e
```
### 1.10.配置ZSH
在配置文件末尾,增加以下配置项。
`Zsh` 是比 `Bash` 好用的 `Shell` 程序,使用 `oh-my-zsh` 进行配置:
```bash
## 定时任务配置项
0 6 8,24 * * /usr/sbin/reboot
```
### 1.8.配置 ZSH
`Zsh` 是比 `Bash` 好用的 `Shell` 程序,使用 `oh-my-zsh` 进行配置。
```bash
## 返回 home 目录
cd
$ cd
## 使用 curl 安装 oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
## 或者使用 wget 安装 oh-my-zsh
sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
$ sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
## 询问是否切换默认 shell,输入 Y
## 示例输出
#### 示例输出
Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] y
```
### 1.11.清理系统
### 1.9.清理系统
Debian 模板虚拟机已经配置完成,在将其转换为模板前需要对系统进行清理。
逐条执行以下命令,注意命令中的空格
逐条执行以下命令,注意命令中的空格
```bash
## 清理系统软件包
sudo apt clean && sudo apt autoclean && sudo apt autoremove --purge
$ sudo apt clean && sudo apt autoclean && sudo apt autoremove --purge
## 清理系统缓存
sudo rm -rvf /var/cache/apt/* /var/lib/apt/lists/* /tmp/*
$ sudo rm -rvf /var/cache/apt/* /var/lib/apt/lists/* /tmp/*
## 清理系统日志
sudo find /var/log/ -type f | xargs sudo rm -rvf
$ sudo find /var/log/ -type f | xargs sudo rm -rvf
## 清理命令历史记录文件
rm -rvf ~/.bash_history ~/.zsh_history
$ rm -rvf ~/.bash_history ~/.zsh_history
## 清理命令历史
history -c
$ history -c
## 关闭系统
$ sudo shutdown now
```
## 2.虚拟机转为模板
Debian 模板虚拟机关机,进入 PVE 的 WEB 管理界面。
Debian 模板虚拟机关机,进入 PVE 的 WEB 管理界面。
在左侧虚拟机列表中,鼠标 **右键单击** Debian 模板虚拟机,在弹出的菜单中选择 `转换成模板`
![虚拟机转模板](img/p05/vm_to_template.png)
在左侧虚拟机列表中,鼠标 **右键单击** Debian 模板虚拟机,在弹出的菜单中选择 `转换成模板`
需要说明的是,虚拟机 `转换成模板` 的操作是不可逆的。
如果某些 Debian 系统的配置项有问题,只能在用该模板克隆出来的新虚拟机中进行修改,或者删除并重新制作模板。
## 3.额外说明
![虚拟机转模板](img/p05/vm_to_template.jpeg)
本文中 Debian 云镜像的系统配置方法大多也适用于 Debian 普通镜像
至此 Debian 虚拟机模板制作完成
但有关 IP 地址、DNS、系统时区等内容的配置方法在 Debian 普通镜像上有区别。
而且,如果使用 Debian 普通镜像制作虚拟机模板,建议不要使用 `Cloud-Init` ,以避免某些配置发生变化。
使用 Debian ISO 镜像安装完操作系统后,修改网卡 IP 地址配置,需要执行以下命令:
```bash
## Debian 普通镜像调整网卡配置
sudo vim /etc/network/interfaces
```
在网卡的配置文件中需要修改 `address``dns-nameservers` 等参数,完整配置文件参考如下:
```bash
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug ens18
iface ens18 inet static
address 172.16.1.2/24
gateway 172.16.1.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 172.16.1.3
dns-search fox.lab
```
检查系统的 `hosts` ,执行以下命令:
```bash
## 检查系统 hosts
cat /etc/hosts
## 示例输出
127.0.0.1 localhost
172.16.1.2 dns001.fox.lab dns001
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
```
Debian 普通镜像需要手动修改系统 DNS 配置,执行以下命令:
```bash
## Debian 普通镜像修改系统 DNS
sudo vim /etc/resolv.conf
```
在编辑器对话框中输入以下内容,注意命令中间的空格:
```bash
search fox.lab
nameserver 172.16.1.3
nameserver fc00::3
nameserver 127.0.0.1
```
Debian 普通镜像使用 `systemd-timesyncd.service` 来同步系统时间,检查服务状态:
```bash
## 检查 Debian 普通镜像 NTP 服务器状态
sudo systemctl status systemd-timesyncd.service
```
调整 NTP 服务,逐条执行以下命令:
```bash
## 创建 NTP 配置文件的文件夹
sudo mkdir /etc/systemd/timesyncd.conf.d
## 创建 NTP 配置文件
sudo nano /etc/systemd/timesyncd.conf.d/server_ntp.conf
```
在 nano 编辑器对话框中输入以下内容,并保存:
```bash
[Time]
NTP=ntp.tencent.com ntp.aliyun.com
```
重启 NTP 服务:
```bash
## 重启 NTP 服务
sudo systemctl restart systemd-timesyncd.service
```
+151 -33
View File
@@ -1,63 +1,181 @@
## 1.克隆虚拟机
在上一篇文章 [5.PVE创建模板虚拟机](./05.PVE制作虚拟机模板.md) 中,我们已经制作好了虚拟机模板。
在上一篇文章 [05.PVE制作虚拟机模板](./05.PVE制作虚拟机模板.md) 中,已经制作好了虚拟机模板。
接下来将使用该模板克隆出新的虚拟机,并使用 Adguard Home 作为内网的 DNS 服务器。
接下来将使用该模板克隆出新的虚拟机,并安装 Adguard Home 作为内网的 DNS 服务器。
鼠标 **右键单击** 虚拟机模板,在弹出的菜单中选择 `克隆`
鼠标 **右键单击** 虚拟机模板,在弹出的菜单中选择 `克隆`
![克隆虚拟机](img/p06/vm_clone.png)
![克隆虚拟机](img/p06/vm_clone.jpeg)
在弹出的虚拟机克隆对话框中,根据实际情况及下方表格内容,修改虚拟机参数
在弹出的虚拟机克隆对话框中,根据实际情况及下方表格内容,修改虚拟机参数
|参数|值|说明|
|--|--|--|
|目标节点|hyper|当前 PVE 服务器节点|
|VM ID|501|可自定义,不能与现存虚拟机 `VM ID` 相同|
|名称|DNS001|可自定义,`Cloud-Init` 将使用该名称作为虚拟机 `hostname` |
|模式|完整克隆|选择虚拟机的克隆模式|
|目标存储|local-lvm|克隆出的虚拟机文件存储位置|
|目标节点|`node01`|当前 PVE 服务器节点|
|VM ID|`201`|可自定义,不能与现存虚拟机 `VM ID` 相同|
|名称|`DNS01`|可自定义,`Cloud-Init` 将使用该名称作为虚拟机 `hostname` |
|模式|`完整克隆`|选择虚拟机的克隆模式|
|目标存储|`local-lvm`|克隆出的虚拟机文件存储位置|
![克隆虚拟机参数](img/p06/vm_clone_vmid.png)
修改参数后,点击 `克隆` ,即可使用该模板克隆出新的虚拟机。
参数修改完成后,点击 `克隆` 按钮即可使用该模板克隆出新的虚拟机。
![克隆虚拟机参数](img/p06/vm_clone_vmid.jpeg)
## 2.调整新虚拟机Cloud-Init
## 2.调整 Cloud-Init
克隆出来的虚拟机的 `Cloud-Init` 参数默认与模板完全一致。
根据之前的网络规划,内网 DNS 服务器 IP 地址分别为:
- `172.16.1.2/24 (fc00::2/64)`
- `172.16.1.3/24 (fc00::3/64)`
根据 **内部网络地址** 规划,内网 DNS 服务器 IP 地址分别为:
因此需要调整新虚拟机的 `Cloud-Init` 参数:
- `172.16.1.2/24 (fdac::2/64)`
![调整新虚拟机Cloud-Init](img/p06/vm_clone_ci.png)
- `172.16.1.3/24 (fdac::3/64)`
- `DNS服务器` 参数为 `172.16.1.3 fc00::3 127.0.0.1`
- `IP配置` 中的 IPv4 地址参数为 `172.16.1.2/24` ,网关保持 `172.16.1.1` 不变
- `IP配置` 中的 IPv6 地址参数为 `fc00::2/64` ,网关保持为空
因此需要调整新虚拟机的 `Cloud-Init` 参数。
这样设置的用意是,让内网两台 DNS 服务器相互提供 DNS 服务。
- `IP配置` 中的 IPv4 地址参数为 `172.16.1.2/24` ,网关保持 `172.16.1.1` 不变。
但如果内网中仅需一台 DNS 服务器,则 `DNS服务器` 参数可设为本机地址,即 `172.16.1.2 fc00::2 127.0.0.1`
- `IP配置` 中的 IPv6 地址参数为 `fdac::2/64` ,网关保持为空。
此处需要注意的是,如果修改了 `用户` 参数,相当于新建了一个系统管理员,之前设置的 `oh-my-zsh` 需要在新管理员下重新设置。
需要注意的是,如果修改了 `用户` 参数,相当于新建了一个系统管理员,之前设置的 `oh-my-zsh` 需要在新管理员下重新设置。
## 3.调整新虚拟机配置参数
![调整新虚拟机Cloud-Init](img/p06/vm_clone_ci_slaac.jpeg)
在创建模板虚拟机的文章中有提到过,新虚拟机需要修改 [配置参数](./04.PVE创建模板虚拟机.md#3调整虚拟机配置参数) 才能自动启动
当主路由配置了 ULA IPv6 网段,且指定了内网 DNS 服务器的 ULA IPv6 地址时,参数如下
将新虚拟机的 `开机自启动` 设置为 `是`
![调整新虚拟机Cloud-Init](img/p06/vm_clone_ci_static.jpeg)
![克隆虚拟机自动启动](img/p06/vm_clone_autostart.png)
## 3.调整配置参数
鼠标 **双击** `启动/关机顺序` 选项,调整新虚拟机的自动开机参数:
在 [04.PVE创建模板虚拟机](./04.PVE创建模板虚拟机.md) 中提到过,新虚拟机需要修改配置参数才能自动启动。
![克隆虚拟机自动启动顺序](img/p06/vm_clone_autostart_order.png)
进入左侧虚拟机 `选项` 页面,将虚拟机 `开机自启动` 参数设置为 `是`
`启动/关机顺序``2` ,表示该虚拟机第二个启动,倒数第二个关机。
![克隆虚拟机自动启动](img/p06/vm_clone_autostart.jpeg)
`启动延时``15` ,表示该虚拟机在 PVE 启动完成后,延迟 15 秒自行启动
鼠标 **双击** `启动/关机顺序` 选项,可调整虚拟机的自动开机参数
`启动/关机顺序``2` ,表示该虚拟机第 `2` 个启动,倒数第 `2` 个关机。
`启动延时``10` ,表示该虚拟机在 PVE 启动后,延迟 `10` 秒后自动启动。
![克隆虚拟机自动启动顺序](img/p06/vm_clone_autostart_order.jpeg)
## 4.调整系统端口
设置完成后,将该虚拟机开机,并使用 SSH 工具登录。
Adguard Home 需监听系统 `53` 端口来提供 DNS 服务,使用以下命令检查端口占用。
```bash
## 检查 53 端口占用
$ sudo lsof -i :53
#### 端口占用示例输出
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 347 systemd-resolve 17u IPv4 13445 0t0 UDP localhost:domain
systemd-r 347 systemd-resolve 18u IPv4 13446 0t0 TCP localhost:domain (LISTEN)
systemd-r 347 systemd-resolve 19u IPv4 13447 0t0 UDP localhost:domain
systemd-r 347 systemd-resolve 20u IPv4 13448 0t0 TCP localhost:domain (LISTEN)
```
当前系统 `53` 端口被 `systemd-resolved.service` 占用,会导致 Adguard Home 监听端口失败。
为了正常使用 Adguard Home ,需要对 `systemd-resolved.service` 进行配置,逐行执行以下命令。
```bash
## 创建 systemd-resolved 配置文件夹
$ sudo mkdir -p /etc/systemd/resolved.conf.d
## 创建 systemd-resolved 配置文件
$ sudo vim /etc/systemd/resolved.conf.d/adguardhome.conf
```
在配置文件中添加以下配置项,并保存。
```bash
## systemd-resolved 配置项
[Resolve]
DNS=127.0.0.1
DNSStubListener=no
```
保存该配置文件后,还需调整系统 `resolv.conf` 配置文件,逐行执行以下命令。
```bash
## 备份 resolv.conf 配置文件
$ sudo mv /etc/resolv.conf /etc/resolv.conf.bak
## 创建 resolv.conf 软链接
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
```
配置完成后,需重启 `systemd-resolved.service` 服务,并再次检查系统 `53` 端口占用。
```bash
## 重启 systemd-resolved 服务
$ sudo systemctl restart systemd-resolved.service
```
## 5.安装 Adguard Home
Adguard Home 将采用 `snap` 形式安装,逐行执行以下命令。
```bash
## 安装 snap
$ sudo apt install snapd
## 安装 Adguard Home
$ sudo snap install adguard-home
```
### 5.1. Snap 自动更新
查看 Snap 当前的更新策略,执行以下命令。
```bash
## 显示当前 Snap 自动更新设置
$ sudo snap refresh --time
```
将 Snap 自动更新时间设置为每天 `2:30-3:30``14:30-15:30` 两个时间段。
```bash
## 修改 Snap 自动更新时间
$ sudo snap set system refresh.timer=2:30-3:30,14:30-15:30
## 其他 Snap 自动更新时间设置语法参考
$ sudo snap set system refresh.timer=mon,2:30,,fri,2:30
```
### 5.2. Snap 定时任务
本步骤为可选操作,主要设置定时重启 Snap 服务。
```bash
## 查看系统定时任务
$ sudo crontab -l
## 编辑系统定时任务,编辑器选择 nano
$ sudo crontab -e
```
在配置文件末尾,增加以下配置项。
```bash
## 定时任务配置项
0 5 * * * /usr/bin/snap restart adguard-home
```
## 6.配置 Adguard Home
关于 Adguard Home 配置相关内容,请参阅 [Adguard Home 折腾手记](https://gitee.com/callmer/agh_toss_notes) 。
至此,新虚拟机已配置完成,可作为内网 DNS 服务器使用。
至此,新虚拟机的 IP 地址设置、DNS 设置、自启动设置已经完成。
+37 -34
View File
@@ -4,66 +4,69 @@
点击 PVE 的 `数据中心` ,在右侧菜单中选择 `备份` 功能。
点击顶部 `添加` 按钮,添加一个备份作业
点击顶部 `添加` 按钮,添加一个 `备份作业`
![添加备份作业](img/p07/vm_new_backup_job.png)
![添加备份作业](img/p07/vm_new_backup_job.jpeg)
### 1.1.备份作业-常规选项
### 1.1.常规选项
在弹出的 `创建:备份作业` 对话框中,勾选底部 `Repeat missed` 选项,并修改参数:
在弹出的 `创建:备份作业` 对话框中,勾选底部 `高级` 选项,`备份作业` 的各项参数如下。
|参数|值|说明|
|--|--|--|
|节点|hyper|选择当前 PVE 服务器节点|
|存储|local|选择存放备份文件的路径|
|计划|`*-01,16 03:30`|备份作业执行的时间计划|
|选择模式|包括选中的VMs|执行备份的虚拟机对象|
|发送邮箱至|your_email@qq.com|备份作业邮件收件人邮箱|
|电子邮件|仅在失败时|何时发送备份作业邮件提醒|
|压缩|ZSTD|选择备份文件的压缩算法|
|模式|停止|选择备份虚拟机的方式,推荐使用 `停止` |
|启用|勾选|表示该备份作业为启用状态|
|Job Comment|`Backup Main Router`|备份作业的备注信息,使用英文输入|
|Repeat missed|勾选|表示当意外错过备份执行时间后,将重试备份|
|节点|`node01`|选择当前 PVE 服务器节点|
|存储|`local`|选择存放备份文件的路径|
|计划|`*-01,16 03:30`|`备份作业` 执行的时间计划|
|选择模式|`包括选中的VMs`|执行备份的虚拟机对象|
|发送邮箱至|`your_email@domain.com`|`备份作业` 邮件收件人邮箱|
|电子邮件|`始终通知`|何时发送 `备份作业` 邮件提醒|
|压缩|`ZSTD`|选择备份文件的压缩算法|
|模式|`停止`|选择备份虚拟机的方式,推荐使用 `停止` |
|启用|**勾选**|表示该 `备份作业` 为启用状态|
|作业评论|`Backup Your Server :)`|`备份作业` 的备注信息,使用英文输入|
|重复错过|**勾选**|表示当意外错过备份执行时间后,将重试备份|
在下方虚拟机列表中,勾选备份作业需要备份的虚拟机(可多选):
**额外说明:**
![备份作业常规选项](img/p07/vm_job_normal.png)
1. 计划中的 `*-01,16 03:30` 表示每个月的 1、16 日凌晨 03:30 进行备份。
**说明:**
2. `备份作业` 在正确配置收件人邮箱之前,并不能发出邮件。
计划中的 `*-01,16 03:30` 表示每个月的 1、16 日凌晨 03:30 进行备份作业
3. `停止` 模式表示备份时会将虚拟机置于关机状态,备份完成后再恢复至之前的状态
PVE 在正确配置邮件发送功能之前,并不能发出邮件
4. 虚拟机列表中,勾选 `备份作业` 需要备份的虚拟机(可多选)
`停止` 模式表示备份时会将虚拟机关机,备份完成后再自动开机。
![备份作业常规选项](img/p07/vm_job_normal.jpeg)
### 1.2.备份作业-保留选项
### 1.2.保留选项
该选项将控制备份文件的保留个数,选择保留最近 3 次的备份文件
该选项将控制备份文件的保留个数,选择保留最近 `3`备份文件
![备份作业保留选项](img/p07/vm_job_keep.png)
![备份作业保留选项](img/p07/vm_job_keep.jpeg)
### 1.3.备份作业-Note Template
### 1.3.日志模板
该选项将按照设置的内容,自动重命名备份文件。
Backup Notes 右侧文本框中输入 `{{vmid}}_{{guestname}}_Auto_Backup`
`备份日志` 右侧文本框中输入 `{{vmid}}_{{guestname}}_Auto_Backup`
![备份作业备注选项](img/p07/vm_job_notes.png)
点击 `创建` 按钮,`备份作业` 创建完成。
点击 `创建` 按钮,备份作业创建完成。
![备份作业备注选项](img/p07/vm_job_notes.jpeg)
## 2.调度模拟器
在创建完成备份作业后,可以使用 `调度模拟器` 来模拟备份作业的执行时间。
在创建完成 `备份作业` 后,可以使用 `调度模拟器` 来模拟 `备份作业` 的执行时间。
鼠标 **单击** 选中一个备份作业,点击右上角的 `调度模拟器`
鼠标 **单击** 选中一个 `备份作业` ,点击右上角的 `调度模拟器`
![备份作业调度模拟器](img/p07/vm_job_time_test.png)
![备份作业调度模拟器](img/p07/vm_job_time_test.jpeg)
`计划` 处将显示 `备份作业` 的执行时间参数,点击 `模拟` 按钮,在右侧将显示模拟的时间结果
`计划` 处将显示 `备份作业` 的执行时间参数,点击 `模拟` 按钮,在右侧将显示模拟的时间结果
![备份作业时间模拟](img/p07/vm_job_time.png)
确认 `备份作业` 的执行时间周期是否符合预期。
![备份作业时间模拟](img/p07/vm_job_time.jpeg)
至此,虚拟机的自动备份已配置完成。
确认备份作业的执行时间周期是否符合预期。
-127
View File
@@ -1,127 +0,0 @@
## 1.修改系统Grub参数
参考官方文档 [qm_pci_passthrough](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_pci_passthrough) 和 [Pci passthrough](https://pve.proxmox.com/wiki/Pci_passthrough) 开启 PVE 硬件直通功能。
使用 SSH 工具登录到 PVE 服务器,编辑系统 Grub 的配置文件 `/etc/default/grub`
```bash
## 编辑 Grub 配置文件
nano /etc/default/grub
```
`nano` 编辑器对话框中修改 `GRUB_CMDLINE_LINUX_DEFAULT` 参数,注意命令中间的空格:
```bash
## Intel 处理器添加参数
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
```
根据官方文档的说明,AMD 处理器下硬件直通功能将会自动打开,否则需要手动修改 Grub 配置文件:
```bash
## AMD 处理器添加参数
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
```
修改并保存后,需要更新系统 Grub :
```bash
## 更新系统 Grub
update-grub
```
## 2.加载系统内核模块
修改系统 `/etc/modules` 配置文件,增加必要的系统模块:
```bash
## 编辑系统配置文件
nano /etc/modules
```
在配置文件末尾输入以下内容:
```txt
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
```
将配置文件保存,并重启 PVE 服务器。
PVE 服务器重启完成后,再次使用 SSH 工具登录,并使用以下命令检查硬件直通状态:
```bash
## 检查系统硬件直通状态
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
```
检查 `IOMMU``Directed I/O``Interrupt Remapping` 的启用状态。
N5105 处理器示例输出如下:
```txt
[ 0.016437] ACPI: DMAR 0x00000000787BF000 000088 (v02 INTEL EDK2 00000002 01000013)
[ 0.016472] ACPI: Reserving DMAR table memory at [mem 0x787bf000-0x787bf087]
[ 0.052437] DMAR: IOMMU enabled
[ 0.144431] DMAR: Host address width 39
[ 0.144432] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.144439] DMAR: dmar0: reg_base_addr fed90000 ver 4:0 cap 1c0000c40660462 ecap 49e2ff0505e
[ 0.144441] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.144446] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[ 0.144449] DMAR: RMRR base: 0x0000007b800000 end: 0x0000007fbfffff
[ 0.144452] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.144453] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.144454] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.146335] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.333509] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[ 0.410824] DMAR: No ATSR found
[ 0.410824] DMAR: No SATC found
[ 0.410826] DMAR: IOMMU feature fl1gp_support inconsistent
[ 0.410827] DMAR: IOMMU feature pgsel_inv inconsistent
[ 0.410829] DMAR: IOMMU feature nwfs inconsistent
[ 0.410829] DMAR: IOMMU feature pds inconsistent
[ 0.410830] DMAR: IOMMU feature eafs inconsistent
[ 0.410831] DMAR: IOMMU feature prs inconsistent
[ 0.410831] DMAR: IOMMU feature nest inconsistent
[ 0.410832] DMAR: IOMMU feature mts inconsistent
[ 0.410832] DMAR: IOMMU feature sc_support inconsistent
[ 0.410833] DMAR: IOMMU feature dev_iotlb_support inconsistent
[ 0.410835] DMAR: dmar0: Using Queued invalidation
[ 0.410838] DMAR: dmar1: Using Queued invalidation
[ 0.412755] DMAR: Intel(R) Virtualization Technology for Directed I/O
```
检查系统 `IOMMU` 分组:
```bash
## 检查 IOMMU group
find /sys/kernel/iommu_groups/ -type l
```
示例输出如下:
```txt
/sys/kernel/iommu_groups/7/devices/0000:00:1c.4
/sys/kernel/iommu_groups/15/devices/0000:04:00.0
/sys/kernel/iommu_groups/5/devices/0000:00:17.0
/sys/kernel/iommu_groups/13/devices/0000:02:00.0
/sys/kernel/iommu_groups/3/devices/0000:00:14.2
/sys/kernel/iommu_groups/3/devices/0000:00:14.0
/sys/kernel/iommu_groups/11/devices/0000:00:1f.0
/sys/kernel/iommu_groups/11/devices/0000:00:1f.5
/sys/kernel/iommu_groups/11/devices/0000:00:1f.3
/sys/kernel/iommu_groups/11/devices/0000:00:1f.4
/sys/kernel/iommu_groups/1/devices/0000:00:02.0
/sys/kernel/iommu_groups/8/devices/0000:00:1c.5
/sys/kernel/iommu_groups/16/devices/0000:05:00.0
/sys/kernel/iommu_groups/6/devices/0000:00:1c.0
/sys/kernel/iommu_groups/14/devices/0000:03:00.0
/sys/kernel/iommu_groups/4/devices/0000:00:16.0
/sys/kernel/iommu_groups/12/devices/0000:01:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:04.0
/sys/kernel/iommu_groups/10/devices/0000:00:1c.7
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.6
```
+21 -21
View File
@@ -3,35 +3,35 @@
## 介绍
PVE 虚拟化平台的安装以及折腾手记。
- PVE ISO 版本:7.2-1 (Last update: 04 May 2022)
- PVE ISO 版本:8.0-2 (更新时间: 2023-06-22)
- 演示机:
- CPUN5105
- 内存:16G
- 硬盘:SSD 512G
- CPU英特尔奔腾 Silver N6005 处理器
- 内存:16 GB
- 网卡:英特尔以太网控制器 I226-V
- 硬盘:500 GB NVMe 固态硬盘
- 内部网络:
- PVE 网络:
- IPv4 网络
- IP 地址:172.16.1.250
- 子网掩码:255.255.255.0
- 网关:172.16.1.1
- DNS172.16.1.1
- IP 地址:`172.16.1.254`
- 子网掩码:`255.255.255.0` ( 即 `/24` )
- 网关:`172.16.1.1`
- DNS`172.16.1.1`
- IPv6 网络
- 前缀:fc00::/64
- IP 地址:fc00::fa
- DNSfc00::1
- 前缀:`fdac::/64`
- IP 地址:`fdac::fe`
- DNS`fdac::1`
### 系列章节
0. [硬件BIOS配置](./00.硬件BIOS配置.md)
1. [PVE系统安装](./01.PVE系统安装.md)
2. [PVE初始化配置](./02.PVE初始化配置.md)
3. [PVE系统调整](./03.PVE系统调整.md)
4. [PVE创建模板虚拟机](./04.PVE创建模板虚拟机.md)
5. [PVE制作虚拟机模板](./05.PVE制作虚拟机模板.md)
6. [PVE用模板克隆虚拟机](./06.PVE用模板克隆虚拟机.md)
7. [PVE自动备份虚拟机](./07.PVE自动备份虚拟机.md)
8. [PVE开启硬件直通功能](./08.PVE开启硬件直通功能.md)
0. [硬件 BIOS 配置](./00.硬件BIOS配置.md)
1. [PVE 系统安装](./01.PVE系统安装.md)
2. [PVE 初始化配置](./02.PVE初始化配置.md)
3. [PVE 系统调整](./03.PVE系统调整.md)
4. [PVE 创建模板虚拟机](./04.PVE创建模板虚拟机.md)
5. [PVE 制作虚拟机模板](./05.PVE制作虚拟机模板.md)
6. [PVE 用模板克隆虚拟机](./06.PVE用模板克隆虚拟机.md)
7. [PVE 自动备份虚拟机](./07.PVE自动备份虚拟机.md)
### 文章说明
Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 375 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 725 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 898 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 978 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 942 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 959 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 599 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 921 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 868 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 734 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Some files were not shown because too many files have changed in this diff Show More