Proxmox VE 基本配置、操作、报错处理

仅针对我本人管理及使用Proxmox VE 7,经常用到的操作命令汇总,还有使用PVE所遇到的一些问题和解决方法。纯粹的个人兴趣爱好折腾,本人非专业人士,谨慎参考。本篇内容会随着不断的折腾,会持续不断的更新或修改完善,最重要的是整理与总结自己折腾过的东西或事情,让其比较整洁,或不那么容易被时间洗刷掉,方便日后在需要的时候,自己可以看懂就好。

安装好PVE后的最基本配置

仅根据自己的使用习惯对PVE系统最基本的配置,需要配置的地方不多,套用Debian的使用习惯来配置也OK

  • 配置vi编辑器,符合自己的使用习惯 /etc/vim/vimrc.tiny
  • 软件源修改为清华镜像源 /etc/apt/sources.list
  • 禁用PVE企业源 /etc/apt/sources.list.d/pve-enterprise.list
  • CT模板源改为清华镜像源 /usr/share/perl5/PVE/APLInfo.pm

配置Vi编辑器:

#切换到root身份
su -

#使用nano编辑器修改Vi配置文件vimrc.tiny
nano /etc/vim/vimrc.tiny 
# 需要修改的内容如下
" set compatible
set nocompatible
set backspace=2

软件源修改为清华镜像源:

# 用vi编辑器修改Debian软件源sources.list
vi /etc/apt/sources.list

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

禁用PVE企业源:

# 禁用PVE企业源
# 注释掉企业源即可。
vi /etc/apt/sources.list.d/pve-enterprise.list
# deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise

CT模板源改为清华镜像源:

# CT Templates LXC模板镜像源,修改为清华镜像站
# 将 /usr/share/perl5/PVE/APLInfo.pm 文件中默认的源地址 http://download.proxmox.com
# 替换为 https://mirrors.tuna.tsinghua.edu.cn/proxmox 即可。
# 可以使用如下命令修改:
# 首先备份APLInfo.pm配置文件
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back

# 修改APLInfo.pm配置文件
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
# 针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,重启后生效。

配置硬件直通

如果玩PVE不玩硬件直通,那是不是就失去了不少的乐趣呢?所以这个步骤也是不能省略的啦。下面按照步骤顺序操作,硬件直通会非常简单且顺利的完成。

1、主板必须开启vt-d

如果主板无法开启VT-D,真没什么搞头啦。

2、修改grub文件

我这只记录Intel的配置,因为我已经很久没有AMD的配置了,AMD即使性能再好我也不会心动啦。

vi /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="quiet"做如下修改(intel的CPU)
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

3、更新grub

update-grub

4、加载内核模块modules

vi /etc/modules
# 内容如下
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

5、刷新initramfs

update-initramfs -u -k all

6、重启主机

7、验证是否开启iommu

dmesg | grep 'remapping'
# 执行命令后显示如下内容,说明开启成功
DMAR-IR: Enabled IRQ remapping in x2apic mode
# 但我的还多了一行,暂时未作处理。
# root@fzpve:~# dmesg | grep 'remapping'
# [    0.152366] DMAR-IR: Enabled IRQ remapping in xapic mode
# [    0.152367] x2apic: IRQ remapping doesn't support X2APIC mode
#此时输入命令
find /sys/kernel/iommu_groups/ -type l
#出现很多直通组,说明成功了。

8、PCI-E直通要求

完成了前面所有步骤之后,虚拟机 → 机器 → 必需要选 → q35

9、关于显卡直通

目前暂时不考虑直通显卡。

  • 据说新版的PVE7无需做驱动屏蔽,直接开启iommu之后,创建的虚拟机 机器q35,然后添加直通设备即可。
  • 关于直通显卡,在Windows上驱动报错43,尝试下载安装最新版的NVIDIA驱动试试吧!

还有更多直通的玩法,以后有时间再慢慢补全。

PVE存储添加、分区、操作、管理等命令

PVE添加存储涉及挺多东西的,反正我是捉摸不透的。存储类型有:文件级存储、块级存储。文件级存储又分别有许多不同的文件系统,块级存储也是如此。实在令人难以选择到底用哪种存储方案,应该要根据实际环境决定吧。我使用的是文件级存储的目录存储(dir)与块级存储的LVM精简池(lvmthin),因此以下相关命令与操作方法内容仅围绕这两个存储类型的折腾总结。

添加PVE存储步骤顺序:

  • 一、fdisk相关操作命令
  • 二、LVM相关操作命令
  • 三、PVE添加存储命令
  • 四、PVE删除存储命令

一、fdisk相关操作命令

fdisk 功能非常强大,我可是只用很少的一些功能,所以都是些简单的操作命令。

# fdisk -l 查看磁盘容量及分区等信息 ##################################
fdisk -l
# 操作示例:
# root@fzpve:~# fdisk -l
# Disk /dev/sdb: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
# Disk model: CT1000MX500SSD1 
# Units: sectors of 1 * 512 = 512 bytes
# Sector size (logical/physical): 512 bytes / 512 bytes
# I/O size (minimum/optimal): 512 bytes / 512 bytes

# Disk /dev/sda: 119.24 GiB, 128035676160 bytes, 250069680 sectors
# Disk model: SanDisk SDSSDHP1
# Units: sectors of 1 * 512 = 512 bytes
# Sector size (logical/physical): 512 bytes / 512 bytes
# I/O size (minimum/optimal): 512 bytes / 512 bytes
# Disklabel type: gpt
# Disk identifier: A91B586C-3EDC-4722-81A6-525F1F2A13FF

# Device       Start       End   Sectors   Size Type
# /dev/sda1       34      2047      2014  1007K BIOS boot
# /dev/sda2     2048   1050623   1048576   512M EFI System
# /dev/sda3  1050624 250069646 249019023 118.7G Linux LVM

# 使用fdisk进行管理磁盘 #########################################
fdisk /dev/sdc
# 创建GPT分区表
Command (m for help): g
# 确认无误,按w,保存并退出
Command (m for help): w
# 再次fdisk查看磁盘,已经是gpt分区表。
fdisk -l /dev/sdc
# root@fzpve:~# fdisk -l /dev/sdc
# Disk /dev/sdc: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
# Disk model: ST3000DM001-1ER1
# 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: gpt
# Disk identifier: E45D408D-E74D-7F40-B447-594B45C8ADFA

# 使用fdisk进行管理磁盘
fdisk /dev/sdc
# 按p查看分区参数
Command (m for help): p
# Disk /dev/sdc: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
# Disk model: ST3000DM001-1ER1
# 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: gpt
# Disk identifier: E45D408D-E74D-7F40-B447-594B45C8ADFA

# 按n进行分区 #####################################################
Command (m for help): n
# 创建第一个分区
Partition number (1-128, default 1): 1
# 第一个分区起始,默认2048
First sector (2048-5860533134, default 2048):
# 第一个分区分配200GB空间
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-5860533134, default 5860533134): +200G

# Created a new partition 1 of type 'Linux filesystem' and of size 200 GiB.

# 按n再次分区
Command (m for help): n
# 第二个分区
Partition number (2-128, default 2):
# 从第一个分区结尾,之后的剩余空间都分配给第二个分区。
First sector (419432448-5860533134, default 419432448):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (419432448-5860533134, default 5860533134):

# Created a new partition 2 of type 'Linux filesystem' and of size 2.5 TiB.

# 按t修改分区类型,分区2修改为lvm #####################################
Command (m for help): t
Partition number (1,2, default 2):
Partition type or alias (type L to list all): lvm

# Changed type of partition 'Linux filesystem' to 'Linux LVM'.

# 按t修改分区类型,分区1也修改为lvm
Command (m for help): t
Partition number (1,2, default 2): 1
Partition type or alias (type L to list all): lvm

# Changed type of partition 'Linux filesystem' to 'Linux LVM'.

# 按w保存并退出
Command (m for help): w
# The partition table has been altered.
# Calling ioctl() to re-read partition table.

使用fdisk分区的目的在于一个磁盘分两个区,一个作为块级存储LVM-thin,另一个作为文件级存储dir。使用fdisk将磁盘分区之后,还需配合LVM创建物理卷、卷组、逻辑卷、格式化等操作哟!

二、LVM相关操作命令

LVM相关的命令太多太复杂,下面相关命令仅针对我使用的两种存储类型:块级存储LVM-thin、文件级存储dir。

创建块级存储LVM-thin

创建块级存储LVM-thin,可以不用对磁盘进行分区,直接创建物理卷、卷组、thin-pool(精简池),即可完成。这样操作的话,貌似没有创建分区表,所以不是GPT分区表。

块级存储LVM-thin貌似有点不同,在创建thin-pool(精简池)的时候,需要留一点点空闲的空间,以便以后灵活操作。具体原因我也了解甚少,请自行查阅更多相关的资料。

# 创建物理卷PV ######################################
pvcreate /dev/sdb
# 操作示例:
# root@fzpve:~# pvcreate /dev/sdb
#   Physical volume "/dev/sdb" successfully created.

# 创建卷组VG ########################################
vgcreate vgssd /dev/sdb
# 操作示例:
# root@fzpve:~# vgcreate vgssd /dev/sdb
#   Volume group "vgssd" successfully created

# 查看物理卷 #############
pvs
# 操作示例:
# root@fzpve:~# pvs
#   PV         VG    Fmt  Attr PSize    PFree  
#   /dev/sda3  pve   lvm2 a--  <118.74g   4.74g
#   /dev/sdb   vgssd lvm2 a--   931.51g 931.51g

# 查看卷组 ###############
vgs

# 查看逻辑卷 #############
lvs  
#或查看tdata,tmeta更多信息
lvs -a 

# 创建 thin-pool (精简池) ################################################
# lvcreate -L 100G -n <poolNAME> <VGNAME>
# lvconvert --type thin-pool <VGNAME>/<poolNAME>
lvcreate -L 920G -n ssdpool vgssd
lvconvert --type thin-pool vgssd/ssdpool
# 操作示例:
# root@fzpve:~# lvcreate -L 920G -n ssdpool vgssd
#   Logical volume "ssdpool" created.
# root@fzpve:~# lvconvert --type thin-pool vgssd/ssdpool
#   Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
#   WARNING: Pool zeroing and 512.00 KiB large chunk size slows down thin provisioning.
#   WARNING: Consider disabling zeroing (-Zn) or using smaller chunk size (<512.00 KiB).
#   WARNING: Converting vgssd/ssdpool to thin pool's data volume with metadata wiping.
#   THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
# Do you really want to convert vgssd/ssdpool? [y/n]: y
#   Converted vgssd/ssdpool to thin pool.

扩容tmeta空间(可选,暂不清楚tmeta空间随着存储数据越来越多,是否会出现不够用的情况)

# 查看可用空间
vgs
# root@fzpve:~# vgs
#   VG    #PV #LV #SN Attr   VSize    VFree  
#   pve     1   3   0 wz--n- <118.74g   4.74g
#   vgssd   1   1   0 wz--n-  931.51g <11.29g

# 查看<poolNAME>_tmeta]空间
lvs -a
# root@fzpve:~# lvs -a
#   LV              VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
#   data            pve   twi-a-tz-- <88.00g             0.00   1.61                            
#   [data_tdata]    pve   Twi-ao---- <88.00g                                                    
#   [data_tmeta]    pve   ewi-ao----   1.00g                                                    
#   [lvol0_pmspare] pve   ewi-------   1.00g                                                    
#   root            pve   -wi-ao----  20.00g                                                    
#   swap            pve   -wi-ao----   4.00g                                                    
#   [lvol0_pmspare] vgssd ewi------- 116.00m                                                    
#   ssdpool         vgssd twi-a-tz-- 920.00g             0.00   10.42                           
#   [ssdpool_tdata] vgssd Twi-ao---- 920.00g                                                    
#   [ssdpool_tmeta] vgssd ewi-ao---- 116.00m

# 扩容[<poolNAME>_tmeta]空间 ##############################################################
# lvextend --poolmetadatasize +900M <VGNAME>/<poolNAME>
lvextend --poolmetadatasize +140M vgssd/ssdpool
# 操作示例:
# root@fzpve:~# lvextend --poolmetadatasize +140M vgssd/ssdpool
#   Size of logical volume vgssd/ssdpool_tmeta changed from 116.00 MiB (29 extents) to 256.00 MiB (64 extents).
#   Logical volume vgssd/ssdpool_tmeta successfully resized.

# 查看<poolNAME>_tmeta]空间
lvs -a
# root@fzpve:~# lvs -a
#   LV              VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
#   data            pve   twi-a-tz-- <88.00g             0.00   1.61                            
#   [data_tdata]    pve   Twi-ao---- <88.00g                                                    
#   [data_tmeta]    pve   ewi-ao----   1.00g                                                    
#   [lvol0_pmspare] pve   ewi-------   1.00g                                                    
#   root            pve   -wi-ao----  20.00g                                                    
#   swap            pve   -wi-ao----   4.00g                                                    
#   [lvol0_pmspare] vgssd ewi------- 256.00m                                                    
#   ssdpool         vgssd twi-a-tz-- 920.00g             0.00   6.45                            
#   [ssdpool_tdata] vgssd Twi-ao---- 920.00g                                                    
#   [ssdpool_tmeta] vgssd ewi-ao---- 256.00m 

创建文件级存储dir

方法与块级存储LVM-thin差不多,稍微有点点区别。在使用fdisk分区的时候已经创建了lvm类型的物理卷,因此下面直接创建卷组、逻辑卷、格式化、挂载。

# 创建卷组
vgcreate vgstdir /dev/sdc1

# 创建逻辑卷
lvcreate -l 100%FREE -n lvstdir vgstdir

# 格式化
mkfs.ext4 /dev/mapper/vgstdir-lvstdir

# 创建挂载目录
mkdir /st200g

# 挂载到目录
mount /dev/mapper/vgstdir-lvstdir /st200g

# 开机自动挂载
echo "/dev/mapper/vgstdir-lvstdir /st200g ext4 defaults 0 0" >> /etc/fstab

有没有发现文件级存储dir需要配置开机自动挂载,而块级存储不需要,是不是由于我添加文件级存储dir的方法不对?这个问题以后再说

重命名LVM逻辑卷

重点是重命名PVE里的虚拟磁盘,我使用的虚拟机磁盘格式为raw格式,有时候虚拟磁盘挂载到不同的虚拟机使用,需要将虚拟磁盘重命名。我发现虚拟磁盘也是LV逻辑卷,重命名虚拟磁盘就变得简单了。

# 重命名虚拟磁盘
# lvrename <VG_Name> <VM_Disk_Name> <New_VM_Disk_Name>
lvrename vgssd vm-101-disk-0 vm-103-disk-0
# 操作示例:
# root@fzpve:~# lvrename vgssd vm-101-disk-0 vm-103-disk-0
#   Renamed "vm-101-disk-0" to "vm-103-disk-0" in volume group "vgssd"

删除LVM逻辑卷、卷组、物理卷

  • 创建LVM顺序是:创建PV,创建VG,创建LV
  • 删除LVM顺序是:删除LV,删除VG,删除PV

thin-pool(精简池) 也是逻辑卷,下面是相关操作命令的例子

# 列出LV逻辑卷
lvdisplay

# 删除LV逻辑卷
lvremove /dev/<VG_Name>/<LV_Name>

# 列出VG卷组
vgdisplay

# 删除VG卷组
vgremove <VG_Name>

# 列出PV物理卷
pvdisplay

# 删除PV物理卷
# pvremove /dev/<sda,sdb,... 或 sda1,sda2,...>
pvremove /dev/sdc1

三、PVE添加存储

无论是块级存储LVM-thin,还是文件级存储dir,创建好后,都必需将其添加到PVE存储配置,这样PVE才能愉快的使用。

# 添加块级存储LVM-thin
# pvesm add lvmthin <STORAGE_ID> --vgname <VGNAME> --thinpool <poolNAME>
pvesm add lvmthin hdd-backup --vgname vghddst --thinpool hddstpool

# 添加目录存储dir
# pvesm add dir <STORAGE_ID> --path /<PATH>
pvesm add dir st200g-dir --path /st200g

# 查看PVE存储状态
pvesm status

四、PVE删除存储

删除PVE存储并不会删除任何数据,也不会断开连接或卸载任何东西,只是删除了存储配置。

# 简单的一句命令
# pvesm remove <STORAGE_ID>
pvesm remove hdd-backup

LXC容器使用及管理常用命令

目前我主要使用管理LXC的命令不多,也就这些。但不代表就只有这些!

# 进入指定容器
# pct enter <vmid>
pct enter 103

# 退出
exit

# 命令容器开机
# pct start <vmid>
pct start 103

# 命令容器关机
# pct shutdown <vmid>
pct shutdown 103

# 移除容器挂载点mp0,不是删除数据。移除后该磁盘配置变成未使用磁盘。
# 如果此时再删除未使用磁盘,那么就是删除数据了!谨慎操作!
# pct set <vmid> -delete mp[n]
pct set 103 -delete mp0

# 将虚拟磁盘挂载到指定容器,replicate=0 跳过复制。没有backup参数,默认不备份。
# pct set <vmid> -mp[n] <STORAGE_ID>:<VM-Disk-Name>,mp=/<PATH>,replicate=<0|1>
pct set 103 -mp0 ssd-data:vm-103-disk-0,mp=/site-data,replicate=0

# 建立快照
# pct snapshot <vmid> <snapname> [OPTIONS]
pct snapshot 103 debian11_snap_2021110101

使用PVE遇到的问题与解决方法

第一次使用PVE,讲真的:从安装好使用到目前10多天了,非常稳定,好用,舒服,省心。但毕竟是刚刚与PVE相处,生疏尴尬肯定会有,需要慢慢去熟悉与磨合!

软件无法更新

软件包zfs-initramfszfs-zed无法更新

最近遇到软件无法更新的情况,实际上很早就发现有两个软件包zfs-initramfszfs-zed无法更新的,我一直都没有去理会。

但是,不解决这两个软件包的更新,后续的软件包也都无法更新了!

# 列出更新
apt list --upgradable
# root@fzpve:~# apt list --upgradable
# Listing... Done
# libldb2/stable-security 2:2.2.3-2~deb11u1 amd64 [upgradable from: 2:2.2.0-3.1]
# libsmbclient/stable-security 2:4.13.13+dfsg-1~deb11u2 amd64 [upgradable from: 2:4.13.5+dfsg-2]
# libwbclient0/stable-security 2:4.13.13+dfsg-1~deb11u2 amd64 [upgradable from: 2:4.13.5+dfsg-2]
# python3-ldb/stable-security 2:2.2.3-2~deb11u1 amd64 [upgradable from: 2:2.2.0-3.1]
# samba-common/stable-security 2:4.13.13+dfsg-1~deb11u2 all [upgradable from: 2:4.13.5+dfsg-2]
# samba-libs/stable-security 2:4.13.13+dfsg-1~deb11u2 amd64 [upgradable from: 2:4.13.5+dfsg-2]
# smbclient/stable-security 2:4.13.13+dfsg-1~deb11u2 amd64 [upgradable from: 2:4.13.5+dfsg-2]
# zfs-initramfs/bullseye-backports 2.0.6-1~bpo11+1 all [upgradable from: 2.0.5-pve1]
# zfs-zed/bullseye-backports 2.0.6-1~bpo11+1 amd64 [upgradable from: 2.0.5-pve1]
# 执行更新,失败!
apt upgrade
# root@fzpve:~# apt upgrade
# Reading package lists... Done
# Building dependency tree... Done
# Reading state information... Done
# Calculating upgrade... Done
# Some packages could not be installed. This may mean that you have
# requested an impossible situation or if you are using the unstable
# distribution that some required packages have not yet been created
# or been moved out of Incoming.
# The following information may help to resolve the situation:
# 下面提示缺少zfs-dkms软件包?######################################################################
# The following packages have unmet dependencies:
#  zfsutils-linux : Breaks: zfs-dkms (< 2.0.6-1~bpo11+1) but 2.0.3-9 is to be installed
# E: Broken packages
# ......

解决zfs-initramfszfs-zed无法更新

# 查看zfs-dkms软件包
apt list zfs-dkms
# root@fzpve:~# apt list zfs-dkms
# Listing... Done
# zfs-dkms/stable 2.0.3-9 all

# 安装zfs-dkms软件包
apt install zfs-dkms
# root@fzpve:~# apt install zfs-dkms
# Reading package lists... Done
# Building dependency tree... Done
# Reading state information... Done
# The following additional packages will be installed:
#   dctrl-tools dkms linux-compiler-gcc-10-x86 linux-headers-5.10.0-9-amd64 linux-headers-5.10.0-9-common
#   linux-headers-amd64 linux-kbuild-5.10 python3-distutils python3-lib2to3
# Suggested packages:
#   debtags menu debhelper
# Recommended packages:
#   zfs-zed zfsutils-linux
# The following packages will be REMOVED:
#   zfs-initramfs zfs-zed zfsutils-linux
# The following NEW packages will be installed:
#   dctrl-tools dkms linux-compiler-gcc-10-x86 linux-headers-5.10.0-9-amd64 linux-headers-5.10.0-9-common
#   linux-headers-amd64 linux-kbuild-5.10 python3-distutils python3-lib2to3 zfs-dkms
# 0 upgraded, 10 newly installed, 3 to remove and 7 not upgraded.
# Need to get 13.4 MB of archives.
# After this operation, 77.7 MB of additional disk space will be used.
# Do you want to continue? [Y/n] y
# ......

# 终于可以正常更新了
apt upgrade
# root@fzpve:~# apt upgrade
# Reading package lists... Done
# Building dependency tree... Done
# Reading state information... Done
# Calculating upgrade... Done
# The following packages will be upgraded:
#   libldb2 libsmbclient libwbclient0 python3-ldb samba-common samba-libs smbclient
# 7 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# Need to get 7,121 kB of archives.
# After this operation, 28.7 kB of additional disk space will be used.
# Do you want to continue? [Y/n] y
# ......

zfs-initramfszfs-zed无法更新的问题处理完毕!实际这个问题一开始是没有的,因为我又不用zfs相关的东西,都怪我在PVE的WebUI管理页面点了更新,之后就发现这两个软件包无法更新!

我发现PVE管理页面WebUI点击更新他使用的命令是

apt-get dist-upgrade

这个命令更新有点危险,我觉得还是慎用。

Syslog日志报错与解决方法

RRD update error pmxcfs 相关报错

如果出现此报错,大部分日志都将会被此报错占领,一大片一大片的出现。

Oct 29 03:00:41 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: illegal attempt to update using time 1635447641 when last update time is 1635465615 (minimum one second step)
Oct 29 03:00:51 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-node/fzpve: /var/lib/rrdcached/db/pve2-node/fzpve: illegal attempt to update using time 1635447651 when last update time is 1635465615 (minimum one second step)
Oct 29 03:00:51 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: illegal attempt to update using time 1635447651 when last update time is 1635465615 (minimum one second step)
Oct 29 03:00:51 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local: /var/lib/rrdcached/db/pve2-storage/fzpve/local: illegal attempt to update using time 1635447651 when last update time is 1635465615 (minimum one second step)

RRD update error pmxcfs 相关报错处理方法

# 直接复制执行以下命令,即可解决,具体原因未知。
cd /var/lib/;\
systemctl stop rrdcached;\
mv rrdcached rrdcached.bck;\
systemctl start rrdcached;\
systemctl restart pve-cluster;

postfix/qmgrpostfix/local 相关报错

Nov 01 18:50:08 fzpve postfix/qmgr[1184]: D441EC0E47: from=<root@fzpve.lan>, size=1006, nrcpt=1 (queue active)
Nov 01 18:50:08 fzpve postfix/local[131585]: error: open database /etc/aliases.db: No such file or directory
Nov 01 18:50:08 fzpve postfix/local[131585]: warning: hash:/etc/aliases is unavailable. open database /etc/aliases.db: No such file or directory
Nov 01 18:50:08 fzpve postfix/local[131585]: warning: hash:/etc/aliases: lookup of 'root' failed

postfix/qmgrpostfix/local 报错处理方法

# 打开PVE命令行
# 发现没有该文件 aliases.db
ls /etc/aliases*
# 执行
newaliases
# 再次 ls /etc/aliases*
# 已经生成了 aliases.db 文件,此问题已解决。
# root@fzpve:~# ls /etc/aliases*
# /etc/aliases  /etc/aliases.db

pvestatd 相关报错

Nov 02 21:56:03 fzpve pvestatd[1108]: command '/sbin/vgscan --ignorelockingfailure --mknodes' failed: exit code 5
Nov 02 21:56:13 fzpve pvestatd[1108]: command '/sbin/vgscan --ignorelockingfailure --mknodes' failed: exit code 5

pvestatd 相关报错处理方法

由于拆除了一个已经添加为PVE做存储的磁盘,会出现此报错。

移除已经不存在的PVE存储,解决此报错

# 移除PVE存储
# pvesm remove <storage>
# 移除PVE LVM-thin存储示例:
pvesm remove ssd-data

gpgconf 相关报错

# Nov 05 20:30:01 fzpve systemd[3346]: gpgconf: error running '/usr/lib/gnupg/scdaemon': probably not installed

gpgconf 相关报错处理方法

安装 scdaemon 即可解决此报错 apt install scdaemon

从 Hyper-V 迁移到 Proxmox VE 之后…

从 Windows2019 Hyper-V 迁移到 Proxmox VE 我不是将虚拟机通过转换磁盘格式的迁移,因为比较有用的东西所占用的磁盘空间并不多,1TB的容量足够存放。在没有迁移之前,我已经用另一台主机(MSI + E3-1230 V2)安装了Proxmox VE大概了解了2天左右,但如果只是这样大概的了解,始终还是不能解决需要面对的问题,但如果模拟迁移(纯粹的浪费时间),还不如直接迁移!

因此,这次的迁移是使用此主机(MSI + E3-1230 V2)作为中转存储资料备份,迁移的前、后都通过Rsync同步这些资料。

由于我也不懂怎么玩Docker,所以部署NextCloud与OnlyOffice这些都是手动一步一步的配置环境,好在Proxmox VE有LXC容器,真的方便好用不少!之前在Hyper-V虚拟机上的Debian所配置的环境,迁移过程耗时都在配置这些环境上了。(应该可以搞个脚本一键部署这些环境省不少时间,问题是我暂时不会搞)

2021年11月4日 20:00

才完善迁移到Proxmox VE后恢复到之前的所有环境。

对比两个不同平台感受:

Windows server2019 Hyper-V

VS

Proxmox VE

就使用下来的这几天我个人的主观感受

实话说:没有体验出明显的差别!

这也太令人失望的结果了!区别还是有一点点的:

  • PVE平台上整体的内存占用还真是比Windows server2019 Hyper-V平台低了不少!
  • PVE平台上VM里的OpenWrt使用网卡直通比Hyper-V上好点,但我没有测试条件,只是简单的对比 Ping OpenWrt 的延时,这样对比是不是很Low?
  • PVE平台上LXC容器运行Debian部署NextCloud的性能绝对比Hyper-V上的性能更好毋庸置疑的!
  • PVE平台上虚拟Windows我觉得与在Hyper-V上区别并不大!(是不是很意外,B85 + E3 1231V3拔掉显卡运行的哟!)如果插上显卡,是不是PVE优势与可玩性就有了?
  • PVE平台上匹配我那个山寨UPS,那可是差点让我拿锤子把UPS砸了的程度!
  • PVE平台 比 Windows 平台绝对的可玩性更高 → 前提是喜欢折腾!(PVE太多需要使用命令行操作,有时令人焦头烂额。而在Windows平台Hyper-V图形化操作简直舒服太多)

再多的使用对比体验,时间将会慢慢的为我们揭晓!

为什么那么折腾,然鹅体验却仅此而已,还那么费时费力的迁移到PVE平台?

因为Proxmox VE是开源的,可以自由免费的使用!而又不比Windows平台差甚至更好,这就够了。

下面是这几天迁移的收尾工作记录

从 Hyper-V 迁移到 Proxmox VE 收尾工作

2021-10-30 22:10

大头的工作已经基本完成了,剩下的细节工作,还是需要花不少的时间完善的。

  • 山寨UPS电源如何匹配PVE系统,遇到停电的情况,PVE主机正常关闭后UPS才断电。
  • 配置SSL证书同步到主机群。
  • 配置主备份HDD磁盘,完善Lsyncd实时同步,完善HDD磁盘自动保存3天内的快照。
  • 最后再考虑安排VM运行Windows,还有各种新一轮的PVE环境上的各种折腾!

山寨UPS电源如何匹配PVE系统

山克UPS只因你太便宜,159元,且有配套软件控制电脑关机。给我一个不买的理由?正好需要考虑一个UPS电源,好让我服务器上的小姐姐安居乐业。

配套的软件 ViewPower Network Edition

  • 在Windows系统上运行得还可以,只是安装配置的时候有点点坑。
  • 也有在Linux系统上的配套软件,但没有折腾过。

下载Linux系统的配套软件

  • 软件包名称:installViewPowerHTML_Linux_text_x86_64.tar.gz

先看看有没有安装教程!

我去!没有教程,压缩包里只有一个文件:

  • installViewPowerHTML_Linux_text_x64.bin

上传安装包到PVE上

这里有个简单的上传方法,就是直接在PVE的Web UI管理页面

  • 依次点击 local → CT模板 → 上传
  • 浏览选择installViewPowerHTML_Linux_text_x86_64.tar.gz

我们上传的文件在此:

root@fzpve:~# ls /var/lib/vz/template/cache/
debian-11-standard_11.0-1_amd64.tar.gz  installViewPowerHTML_Linux_text_x86_64.tar.gz

安装ViewPower

首先解压缩

# 解压
tar -xvf /var/lib/vz/template/cache/installViewPowerHTML_Linux_text_x86_64.tar.gz

root@fzpve:~# tar -xvf /var/lib/vz/template/cache/installViewPowerHTML_Linux_text_x86_64.tar.gz
# 解压到root目录下了
installViewPowerHTML_Linux_text_x64.bin

然后安装

./installViewPowerHTML_Linux_text_x64.bin
# 下面是安装的过程,一路回车完成
root@fzpve:~# ./installViewPowerHTML_Linux_text_x64.bin
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
Launching installer...
Preparing CONSOLE Mode Installation...
......
Respond to each prompt to proceed to the next step in the installation.  If you
want to change something on a previous step, type 'back'.
You may cancel this installation at any time by typing 'quit'.
PRESS <ENTER> TO CONTINUE: 
========================================================================
Choose Install Folder
---------------------
Where would you like to install?
  Default Install Folder: /root/ViewPower
ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
      : 
========================================================================
Choose Link Location
--------------------
Where would you like to create links?
  ->1- Default: /root
    2- In your home folder
    3- Choose another location...
    4- Don't create links
ENTER THE NUMBER OF AN OPTION ABOVE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
      : 
========================================================================
Pre-Installation Summary
------------------------
Please Review the Following Before Continuing:
Product Name:
    ViewPower
Install Folder:
    /root/ViewPower
Link Folder:
    /root
Disk Space Information (for Installation Target): 
    Required:  187,736,834 bytes
    Available: 15,076,519,936 bytes
PRESS <ENTER> TO CONTINUE:
========================================================================
Installing...
-------------
===============================================================================
Installation Complete
---------------------
Congratulations. ViewPower has been successfully installed to:
   /root/ViewPower
PRESS <ENTER> TO EXIT THE INSTALLER:

安装完成,我还没有接UPS的USB线到PVE主机,不知有没有影响,现在去接上吧!

测试访问 http://192.168.33.3:15178/ViewPower

可以正常打开页面咯!

还需要一个步骤,安装runAutoStart.sh

/root/ViewPower/runAutoStart.sh

root@fzpve:~# /root/ViewPower/runAutoStart.sh
/root/ViewPower/runAutoStart.sh: line 39: sudo: command not found
/root/ViewPower/runAutoStart.sh: line 40: sudo: command not found

需要安装sudo

apt install sudo
# 然后再执行
root@fzpve:~# /root/ViewPower/runAutoStart.sh

完成,重启一下PVE主机。

配置与测试ViewPower

不行哟,如果用网页打开PVE管理页面的命令行,还能正常访问

http://192.168.33.3:15178/ViewPower

但如果关掉PVE管理页命令行,直接无法访问。即使正常进入ViewPower网页配置好,测试断电是否正常关机,TMD又害我人为非法断电了一次,又多一次伤害了PVE!

而且,貌似打开ssh会有一行报错提示

netstat: command not found

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Oct 31 00:06:06 2021
-bash: netstat: command not found
root@fzpve:~# apt install net-tools
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  net-tools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 250 kB of archives.
After this operation, 1,015 kB of additional disk space will be used.
Get:1 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye/main amd64 net-tools amd64 1.60+git20181103.0eebece-1 [250 kB]
Fetched 250 kB in 0s (602 kB/s)
Selecting previously unselected package net-tools.
(Reading database ... 42680 files and directories currently installed.)
Preparing to unpack .../net-tools_1.60+git20181103.0eebece-1_amd64.deb ...
Unpacking net-tools (1.60+git20181103.0eebece-1) ...
Setting up net-tools (1.60+git20181103.0eebece-1) ...
Processing triggers for man-db (2.9.4-2) ...
[1]+  Done                    /root/ViewPower/StartMain

好啦!好像不报错啦,但是,一次一次的令人无从配置,且没有希望的那种。

这死垃圾不兼容PVE,不搞了!!!

卸载!!!

时间都浪费在测试,一个晚上其实没多久的,发现这ViewPower垃圾软件非常耗资源,千万不要安装在PVE上!

直通USB给Windows使用UPS

2021-10-31

ViewPower自带的SSH远程关机无法登录服务器执行命令:

ssh_dispatch_run_fatal: Connection from 192.168.33.186 port 50121: DH GEX group out of range [preauth]

实在没法解决上面的报错,时间哗啦啦的浪费。

不得不使用ViewPower的关机前执行档案

C:\stop_pve.bat

但是在编写这个执行档案的批处理文件上,走了许多的弯路,浪费了太多的时间去测试!!谁叫我啥都不懂呢,最后还是在雷迪斯UPS官方网上找到了相关的教程

https://www.yuque.com/ladis/gfg4p3/vdscue

必需要安装配合PuTTy才能ssh连接服务器!批处理命令如下:

% 必须cd到putty的安装目录 %
cd C:\Program Files\PuTTY
% 使用 -i 调用私钥文件。pve-putty-key.ppk使用PuTTygen生成。%
plink -C -no-antispoof -i pve-putty-key.ppk -ssh root@192.168.33.3 "shutdown -h now"

但是必须远程登录Windows系统,这批处理才能起在关机前执行。如果登录系统,然后又注销退出的话,就无法正常执行该批处理命令。这些问题都TMD太折腾人咯,后来终于发现问题了!!

使用计划任务,在用户没有登录的情况下,依旧运行ViewPower程序,解决问题。但是还有一个问题,当我们的设备都在1分钟左右就正常的关闭后,UPS在2分钟后甚至4分钟后都依旧不关闭!

把批处理命令改为如下:解决了UPS不能自动关闭的问题!

% 必须cd到putty的安装目录 %
cd C:\Program Files\PuTTY
% 使用 -i 调用私钥文件。pve-putty-key.ppk使用PuTTygen生成。%
plink -C -no-antispoof -i pve-putty-key.ppk -ssh root@192.168.33.3 "shutdown -h +1"

关于这个山寨的UPS,我不已经不想太详细把折腾过程记录下来,貌似没有意义,有条件不要选择这个品牌的就不会存在这么多的问题。

上面的批处理命令,使用root账户,绝对是不推荐的,风险太高!

今天晚上的首要目标有:

2021-11-2 18:25

解决远程控制PVE关机的安全性问题

已在 2021-11-2 20:56 完美解决了此问题!

  • 在PVE上创建普通用户
  • 授权普通用户关机的权限

这样可以解决Windows系统的各种无法预测的风险导致PVE的密钥或密码泄露风险。

# 创建用户
adduser sgtfz

# 编辑权限
visudo

# 仅允许普通用户组sgtfz,免密执行shutdown命令
%sgtfz ALL= NOPASSWD: /usr/sbin/shutdown

# 测试成功免密关机 `sudo /usr/sbin/shutdown -h +1`

# 重新使用PuTTygen生成密钥对,然后在sgtfz用户下新建.ssh免密目录及文件
# 创建目录.ssh
mkdir ~/.ssh
# 创建authorized_keys
vi ~/.ssh/authorized_keys
# 把公钥贴上,保存即可。
ssh-rsa AAAAB3NzaC**********************************************************************/hmaGsHlYQ== rsa-key-20211102

编辑Windows调用的关机命令批处理:

% 必须cd到putty的安装目录 %
cd C:\Program Files\PuTTY
% 使用 -i 调用私钥文件。pve-putty-key.ppk使用PuTTygen生成。%
plink -C -no-antispoof -i putty-key-pve-sgtfz.ppk -ssh sgtfz@192.168.33.3 "sudo /usr/sbin/shutdown -h +1"

TND编辑批处理命令的时候,忘了sudo /usr/sbin/shutdown,还是保留原来的shutdown -h +1
害我又让PVE非法断电了一次,累计测试这家伙都非法断电5次了!!!

终于成功了! 2021-11-2 20:56

至此UPS匹配终于完美完成了!这是很重要的一个环节,因为再好的配置,也经不起突然的停电!所以UPS还是必需得折腾好了,才有下面更多的美好的事情。

接下来?还有很多没有完善的!!!

但我觉得都已经不是问题了,可以慢慢的一步一步的去搞,没有时间就有了时间再搞。这几天已经连续严重熬夜,已经把自己彻底的摧残了!

有空再整理以下过程记录

  • PVE使用fdisk为一块磁盘分两个区:块级存储LVM-thin,目录存储dir
  • 安装与配置OnlyOffice(手动挡)

还有一件事情没有完成的:

  • 命令行实现自动创建指定磁盘快照,并保留3天内的快照。

从 Hyper-V 迁移到 Proxmox VE 过程记录

一边折腾一边做记录,可能有点乱,也有许多错漏的地方。

备份OpenWrt各种配置

  • 已完成各种配置的截图备份

备份 Hyper-V 服务器的各种环境

  • NextCloud与WordPress数据及数据库已备份及同步完成
  • rsync -av --delete /my-data/www/html/ root@192.168.33.131:/data-backup
  • 配置文件目录备份已完成
  • 已备份目录/etc/apache2
  • 已备份目录/etc/mysql
  • 已备份目录/etc/lsyncd
  • 已备份目录/etc/php/7.4
  • 计划任务配置已备份

修改测试主机的IP地址

  • 为主服务器让路,腾出我这个IP地址
  • 修改配置文件 vi /etc/network/interfaces
  • 由原来的192.168.33.3修改为192.168.33.87,并成功完成修改与访问。

400GB多的视频文件在NTFS分区上,该如何处理?

  • 拷贝了一部分存档,剩余的一些不喜欢的就丢弃了。

正式开始了

准时在2021年10月28日21:30左右 开始了

关闭Windows server 2019主机

接着使用路由器替换了OpenWrt,网络继续正常工作

修改B85主板的 PCIe 1x 接口

也就是爆PCIe 1x插槽的菊花,目的是插入PCIe 16x的显卡。

这B85主板配合E3 1231 V3最神奇的地方是: 我可以不插显卡也能够正常开机并进入系统!

我的另一个Z68配合E3 1230 V2不插显卡,死活不能正常开机启动系统!

改造这个PCIe 1x插槽是为了方便以后如果想要玩显卡直通!虽然只有1x的速度,但直通显卡的目的又不是为了游戏。

不玩显卡直通的情况下,我直接拔掉显卡运行,起码也能省一点点的电。

  • 使用小刀爆菊花浪费了不少的时间,由于华硕的PCIe塑料太TM硬了,
  • 只爆了一点点实在搞不定,最后使用电络铁,终于把 PCIe 1x 插槽的菊花完爆了,
  • 顺利插入PCIe 16x显卡,主机正常启动并显示了,完美!

时间已经来到了10:30左右.

开始为Windows server 2019做一个Ghost备份吧,C盘40GB多左右,极限压缩模式真的非常慢

  • 做一个备份吧,万一PVE严重翻车,还能快速恢复到Hyper-V
  • 在Windows server 2019的备份盘暂时不挂载到PVE上,用另一个已同步好资料的磁盘挂载到PVE
  • 在PVE成功完成后,将NextCloud的资料恢复到SSD上之后,再考虑格式化前任备份盘为LVM-thin
  • 在这等待Ghost备份的时间里,又想到了UPS,该如何匹配PVE呢?又是一个头疼的问题

Windows server 2019 系统盘备份完成 时间 23:20

  • 将C盘的Ghost备份25GB拷贝至移动磁盘,30M/S的速度太慢了,这垃圾移动硬盘!
  • 面对之前在Hyper-V上运行的Win7系统,里面下载了不少的电影,丢弃吗?
  • 纠结,从Windows到Linux的迁移,文件系统不同,烦。

下面开始安装PVE

开始安装PVE 23:38

PVE安装完成 2021年10月29日 0:00

开始配置PVE

最基础的配置

  • vi编辑器 /etc/vim/vimrc.tiny
  • 软件源修改为清华镜像源 vi /etc/apt/sources.list
  • 禁用PVE企业源 vi /etc/apt/sources.list.d/pve-enterprise.list
  • CT模板改为清华镜像站/usr/share/perl5/PVE/APLInfo.pm

更新系统

apt update
apt upgrade
reboot

添加SSD硬盘为LVM-thin

  • 由于SSD之前是在Windows上使用的,所以直接在PVE的WebUI管理界面 ⇢ 磁盘 ⇢ 擦除磁盘

为SSD分区

root@fzpve:~# fdisk -l
Disk /dev/sdb: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: CT1000MX500SSD1 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sda: 119.24 GiB, 128035676160 bytes, 250069680 sectors
Disk model: SanDisk SDSSDHP1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A91B586C-3EDC-4722-81A6-525F1F2A13FF

Device       Start       End   Sectors   Size Type
/dev/sda1       34      2047      2014  1007K BIOS boot
/dev/sda2     2048   1050623   1048576   512M EFI System
/dev/sda3  1050624 250069646 249019023 118.7G Linux LVM


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


Disk /dev/mapper/pve-root: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

# 创建物理卷PV (volume)
pvcreate /dev/sdb

root@fzpve:~# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

# 创建卷组VG (group)
vgcreate vgssd /dev/sdb

root@fzpve:~# vgcreate vgssd /dev/sdb
  Volume group "vgssd" successfully created

# 查看SSD可用空间
root@fzpve:~# pvs
  PV         VG    Fmt  Attr PSize    PFree  
  /dev/sda3  pve   lvm2 a--  <118.74g   4.74g
  /dev/sdb   vgssd lvm2 a--   931.51g 931.51g

# 创建 thin-pool (精简池),确定建立920GB,剩余的作为PFree空间
# lvcreate -L 100G -n <poolNAME> <VGNAME>
# lvconvert --type thin-pool <VGNAME>/<poolNAME>
lvcreate -L 920G -n ssdpool vgssd
lvconvert --type thin-pool vgssd/ssdpool

root@fzpve:~# lvcreate -L 920G -n ssdpool vgssd
  Logical volume "ssdpool" created.
root@fzpve:~# lvconvert --type thin-pool vgssd/ssdpool
  Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
  WARNING: Pool zeroing and 512.00 KiB large chunk size slows down thin provisioning.
  WARNING: Consider disabling zeroing (-Zn) or using smaller chunk size (<512.00 KiB).
  WARNING: Converting vgssd/ssdpool to thin pool's data volume with metadata wiping.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert vgssd/ssdpool? [y/n]: y
  Converted vgssd/ssdpool to thin pool.

扩容tmeta空间:

# 查看SSD可用空间
root@fzpve:~# vgs
  VG    #PV #LV #SN Attr   VSize    VFree  
  pve     1   3   0 wz--n- <118.74g   4.74g
  vgssd   1   1   0 wz--n-  931.51g <11.29g
# 查看<poolNAME>_tmeta]空间
root@fzpve:~# lvs -a
  LV              VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data            pve   twi-a-tz-- <88.00g             0.00   1.61                            
  [data_tdata]    pve   Twi-ao---- <88.00g                                                    
  [data_tmeta]    pve   ewi-ao----   1.00g                                                    
  [lvol0_pmspare] pve   ewi-------   1.00g                                                    
  root            pve   -wi-ao----  20.00g                                                    
  swap            pve   -wi-ao----   4.00g                                                    
  [lvol0_pmspare] vgssd ewi------- 116.00m                                                    
  ssdpool         vgssd twi-a-tz-- 920.00g             0.00   10.42                           
  [ssdpool_tdata] vgssd Twi-ao---- 920.00g                                                    
  [ssdpool_tmeta] vgssd ewi-ao---- 116.00m    

# 扩容[<poolNAME>_tmeta]空间
# lvextend --poolmetadatasize +900M <VGNAME>/<poolNAME>
lvextend --poolmetadatasize +140M vgssd/ssdpool

root@fzpve:~# lvextend --poolmetadatasize +140M vgssd/ssdpool
  Size of logical volume vgssd/ssdpool_tmeta changed from 116.00 MiB (29 extents) to 256.00 MiB (64 extents).
  Logical volume vgssd/ssdpool_tmeta successfully resized.
# 查看<poolNAME>_tmeta]空间
root@fzpve:~# lvs -a
  LV              VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data            pve   twi-a-tz-- <88.00g             0.00   1.61                            
  [data_tdata]    pve   Twi-ao---- <88.00g                                                    
  [data_tmeta]    pve   ewi-ao----   1.00g                                                    
  [lvol0_pmspare] pve   ewi-------   1.00g                                                    
  root            pve   -wi-ao----  20.00g                                                    
  swap            pve   -wi-ao----   4.00g                                                    
  [lvol0_pmspare] vgssd ewi------- 256.00m                                                    
  ssdpool         vgssd twi-a-tz-- 920.00g             0.00   6.45                            
  [ssdpool_tdata] vgssd Twi-ao---- 920.00g                                                    
  [ssdpool_tmeta] vgssd ewi-ao---- 256.00m 

为PVE添加存储:

# 使用刚才创建的 thin-pool (精简池)
# pvesm add lvmthin <STORAGE_ID> --vgname <VGNAME> --thinpool <poolNAME>
pvesm add lvmthin ssd-data --vgname vgssd --thinpool ssdpool

# 检查存储状态
pvesm status

root@fzpve:~# pvesm status
Name             Type     Status           Total            Used       Available        %
local             dir     active        20466256         2617908        16783388   12.79%
local-lvm     lvmthin     active        92270592               0        92270592    0.00%
ssd-data      lvmthin     active       964689920               0       964689920    0.00%

硬件直通配置

时间来到了 00:55

硬件直通需要以下几个步骤的配置

  • 修改grub文件
  • 更新grub
  • 加载内核模块modules
  • 刷新initramfs
  • 然后重启主机
  • 验证是否开启iommu

修改grub文件:

   vi /etc/default/grub
   # GRUB_CMDLINE_LINUX_DEFAULT="quiet"做如下修改(intel的CPU)
   GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

更新grub:

update-grub

root@fzpve:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.11.22-4-pve
Found initrd image: /boot/initrd.img-5.11.22-4-pve
Found memtest86+ image: /boot/memtest86+.bin
Found memtest86+ multiboot image: /boot/memtest86+_multiboot.bin
Adding boot menu entry for EFI firmware configuration
done

加载内核模块modules:

   vi /etc/modules
   # 内容如下
   vfio
   vfio_iommu_type1
   vfio_pci
   vfio_virqfd

刷新initramfs:

update-initramfs -u -k all

root@fzpve:~# update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-5.11.22-4-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.

然后重启主机:

reboot

验证是否开启iommu:

dmesg | grep 'remapping'

root@fzpve:~# dmesg | grep 'remapping'
[    0.152366] DMAR-IR: Enabled IRQ remapping in xapic mode
[    0.152367] x2apic: IRQ remapping doesn't support X2APIC mode
  • 执行命令后显示如下内容,说明开启成功 DMAR-IR: Enabled IRQ remapping in x2apic mode
  • 此时输入命令 find /sys/kernel/iommu_groups/ -type l 出现很多直通组,说明成功了
root@fzpve:~# find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/7/devices/0000:00:1c.0
/sys/kernel/iommu_groups/5/devices/0000:00:1a.0
/sys/kernel/iommu_groups/3/devices/0000:00:16.0
/sys/kernel/iommu_groups/11/devices/0000:02:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.1
/sys/kernel/iommu_groups/8/devices/0000:00:1c.1
/sys/kernel/iommu_groups/6/devices/0000:00:1b.0
/sys/kernel/iommu_groups/4/devices/0000:00:19.0
/sys/kernel/iommu_groups/12/devices/0000:03:00.0
/sys/kernel/iommu_groups/12/devices/0000:03:00.1
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.2
/sys/kernel/iommu_groups/10/devices/0000:00:1f.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.3
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1d.0

配置直通完成 时间来到了 01:09

VM虚拟机部署OpenWrt

首先要建立一个VM虚拟机 硬件配置暂定如下:

  • 内存 512MB
  • 处理器 2核心 [host,flags=+aes]
  • BIOS OVMF(UEFI)
  • 显示 标准VGA(安装配置完成后,最后选择无显示)
  • 机器 q35(最新)
  • SCSI控制器 VirtIO SCSI
  • 硬盘随便添加一个1G的,然后需要使用img镜像导入的磁盘,之后要删除这个硬盘的。
  • 网络设备(net0) 随便添加一个网卡,之后要删除,配置直通网卡的哟。
  • EFI磁盘 这个必须要且不能删除。

然后下载OpenWrt

# 直接在PVE上下载即可
wget https://downloads.openwrt.org/releases/21.02.1/targets/x86/64/openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img.gz

root@fzpve:~# sha256sum openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img.gz > openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img.gz.sha256sum
root@fzpve:~# cat openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img.gz.sha256sum 
005ab565649e10fec4220ee6cc96f2b35a89c01abf2a6d79ccc990b2f39b476a  openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img.gz

# 解压
gzip -d openwrt-21.02.0-x86-64-generic-ext4-combined-efi.img.gz

# 将img磁盘直接导入为VM虚拟磁盘,vmid根据现实灵活修改哟。
# qm importdisk <vmid> <source> <storage> [OPTIONS]
qm importdisk 100 /root/openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img local-lvm

root@fzpve:~# qm importdisk 100 /root/openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img local-lvm
importing disk '/root/openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img' to VM 100 ...
  Rounding up size to full physical extent 124.00 MiB
  Logical volume "vm-100-disk-2" created.
transferred 0.0 B of 120.5 MiB (0.00%)
transferred 2.0 MiB of 120.5 MiB (1.66%)
transferred 4.0 MiB of 120.5 MiB (3.32%)
transferred 6.0 MiB of 120.5 MiB (4.98%)
transferred 50.0 MiB of 120.5 MiB (41.48%)
......
transferred 104.0 MiB of 120.5 MiB (86.29%)
transferred 106.0 MiB of 120.5 MiB (87.94%)
transferred 108.0 MiB of 120.5 MiB (89.60%)
transferred 110.0 MiB of 120.5 MiB (91.26%)
transferred 112.0 MiB of 120.5 MiB (92.92%)
transferred 114.0 MiB of 120.5 MiB (94.58%)
transferred 120.5 MiB of 120.5 MiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-100-disk-2'

最后编辑虚拟机配置

  • 硬件
  • 将之前创建时的网卡删除,添加PCI设备,先添加一个直通网口作为LAN,之后安装好后再添加WAN口
  • 将之前创建虚拟机时的磁盘删除,添加刚才命令导入的虚拟磁盘。
  • 剩下的默认吧,检查配置无误后进入下一环节
  • 选项
  • 开机自动启动 是
  • OS类型 Linux 5.x – 2.6 Kernel
  • 引导顺序 scsi0 (特别注意这必须选导入的OpenWrt磁盘)
  • 剩下的项目默认吧。

82576-0直通作为LAN口

上传gparted-live-1.0.0-3-amd64.iso进行调整OpenWrt分区大小

因为OpenWrt官方镜像默认的根分区只有100MB左右,我们需要将其扩容一下用起来更舒服些。

已完成扩容,关闭虚拟机。

删除 CD-ROM

再到选项选择引导顺序为 scsi0

开启虚拟机测试OpenWRT

我发现双网口的82576网卡直通的时候,不分0或1,都同时直通给OpenWrt的!无法只直通一个口。

这可能是PVE的硬件直通配置还漏了哪个步骤,但已经够用了,所以不纠结这问题先。

时间来到了 2:12

关机,安装硬盘,拷贝数据!!

时间来到了 3:08

发现PVE日志syslog 许多报错

Oct 29 03:00:41 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: illegal attempt to update using time 1635447641 when last update time is 1635465615 (minimum one second step)
Oct 29 03:00:51 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-node/fzpve: /var/lib/rrdcached/db/pve2-node/fzpve: illegal attempt to update using time 1635447651 when last update time is 1635465615 (minimum one second step)
Oct 29 03:00:51 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: illegal attempt to update using time 1635447651 when last update time is 1635465615 (minimum one second step)
Oct 29 03:00:51 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local: /var/lib/rrdcached/db/pve2-storage/fzpve/local: illegal attempt to update using time 1635447651 when last update time is 1635465615 (minimum one second step)
Oct 29 03:01:00 fzpve systemd[1]: Starting Proxmox VE replication runner...
Oct 29 03:01:00 fzpve systemd[1]: pvesr.service: Succeeded.
Oct 29 03:01:00 fzpve systemd[1]: Finished Proxmox VE replication runner.
Oct 29 03:01:01 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-node/fzpve: /var/lib/rrdcached/db/pve2-node/fzpve: illegal attempt to update using time 1635447661 when last update time is 1635465615 (minimum one second step)
Oct 29 03:01:02 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local: /var/lib/rrdcached/db/pve2-storage/fzpve/local: illegal attempt to update using time 1635447661 when last update time is 1635465615 (minimum one second step)
Oct 29 03:01:02 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: illegal attempt to update using time 1635447661 when last update time is 1635465615 (minimum one second step)
Oct 29 03:01:11 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-node/fzpve: /var/lib/rrdcached/db/pve2-node/fzpve: illegal attempt to update using time 1635447671 when last update time is 1635465615 (minimum one second step)
Oct 29 03:01:31 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local: opening '/var/lib/rrdcached/db/pve2-storage/fzpve/local': No such file or directory
Oct 29 03:01:31 fzpve pmxcfs[1065]: [status] notice: RRD create error /var/lib/rrdcached/db/pve2-storage/fzpve/ssd-data: Cannot create temporary file
Oct 29 03:01:31 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/ssd-data: opening '/var/lib/rrdcached/db/pve2-storage/fzpve/ssd-data': No such file or directory
Oct 29 03:01:31 fzpve pmxcfs[1065]: [status] notice: RRD create error /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: Cannot create temporary file
Oct 29 03:01:31 fzpve pmxcfs[1065]: [status] notice: RRD update error /var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm: opening '/var/lib/rrdcached/db/pve2-storage/fzpve/local-lvm': No such file or directory
Oct 29 03:01:37 fzpve systemd[1]: Starting LSB: start or stop rrdcached...
Oct 29 03:01:37 fzpve rrdcached[7353]: rrdcached started.
Oct 29 03:01:37 fzpve systemd[1]: Started LSB: start or stop rrdcached.
Oct 29 03:01:45 fzpve systemd[1]: Stopping The Proxmox VE cluster filesystem...
Oct 29 03:01:45 fzpve pmxcfs[1065]: [main] notice: teardown filesystem
Oct 29 03:01:46 fzpve systemd[4074]: etc-pve.mount: Succeeded.
Oct 29 03:01:46 fzpve systemd[1]: etc-pve.mount: Succeeded.
Oct 29 03:01:47 fzpve pmxcfs[1065]: [main] notice: exit proxmox configuration filesystem (0)
Oct 29 03:01:47 fzpve systemd[1]: pve-cluster.service: Succeeded.
Oct 29 03:01:47 fzpve systemd[1]: Stopped The Proxmox VE cluster filesystem.
Oct 29 03:01:47 fzpve systemd[1]: pve-cluster.service: Consumed 2.237s CPU time.
Oct 29 03:01:47 fzpve systemd[1]: Starting The Proxmox VE cluster filesystem...
Oct 29 03:01:48 fzpve systemd[1]: Started The Proxmox VE cluster filesystem.
Oct 29 03:01:48 fzpve systemd[1]: Condition check resulted in Corosync Cluster Engine being skipped.
Oct 29 03:02:00 fzpve systemd[1]: Starting Proxmox VE replication runner...
Oct 29 03:02:00 fzpve systemd[1]: pvesr.service: Succeeded.
Oct 29 03:02:00 fzpve systemd[1]: Finished Proxmox VE replication runner.

执行如下命令后终于消停了

# 这是错误的命令路径,这个方法失败
root@fzpve:~# cd /var/lib/rrdcached/
root@fzpve:/var/lib/rrdcached# systemctl stop rrdcached
root@fzpve:/var/lib/rrdcached# mv rrdcached rrdcached.bck
mv: cannot stat 'rrdcached': No such file or directory
# 这才是正确的方法
root@fzpve:/var/lib/rrdcached# cd /var/lib/
root@fzpve:/var/lib# systemctl stop rrdcached
root@fzpve:/var/lib# mv rrdcached rrdcached.bck
root@fzpve:/var/lib# systemctl start rrdcached
root@fzpve:/var/lib# systemctl restart pve-cluster

修改Openwrt软件源为清华镜像站:

# openwrt
#src/gz openwrt_core https://downloads.openwrt.org/releases/21.02.1/targets/x86/64/packages
#src/gz openwrt_base https://downloads.openwrt.org/releases/21.02.1/packages/x86_64/base
#src/gz openwrt_luci https://downloads.openwrt.org/releases/21.02.1/packages/x86_64/luci
#src/gz openwrt_packages https://downloads.openwrt.org/releases/21.02.1/packages/x86_64/packages
#src/gz openwrt_routing https://downloads.openwrt.org/releases/21.02.1/packages/x86_64/routing
#src/gz openwrt_telephony https://downloads.openwrt.org/releases/21.02.1/packages/x86_64/telephony

# tsinghua
src/gz openwrt_core https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/21.02.1/targets/x86/64/packages
src/gz openwrt_base https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/21.02.1/packages/x86_64/base
src/gz openwrt_luci https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/21.02.1/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/21.02.1/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/21.02.1/packages/x86_64/routing
src/gz openwrt_telephony https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/21.02.1/packages/x86_64/telephony

准备下载CT模板

却发现只有debian10的模板

执行已下命令更新模板

pveam update

即可正常刷出debian11了

CT已经安装好了,基本的配置完成,没有安装AMP环境。

时间已经来到 3:50

好累啊!

关机,然后几分钟后再开,看看PVE日志是否有报错了先吧。

终于正常了,syslog没有报错信息了。

挂载备份磁盘到CT容器 拷贝数据

挂载WD2T磁盘到PVE存储

pvesm add lvmthin wd-backup --vgname vgwd2t --thinpool databackup

在LXC容器添加挂载点

需要修改配置文件进行添加,因为我已经忘记了虚拟磁盘的大小,或是命令有问题吧!

arch: amd64
cores: 4
features: nesting=1
hostname: Debian11-NC
memory: 5120
mp0: wd-backup:vm-100-disk-0,mp=/data-backup,replicate=0,ro=1,size=1000G
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.33.1,hwaddr=0A:FD:83:CE:3B:5A,ip=192.168.33.5/24,type=veth
ostype: debian
rootfs: local-lvm:vm-101-disk-0,size=8G
swap: 2048
unprivileged: 1
# 就是添加这个 unused0: <STORAGE_ID>:<虚拟磁盘>
unused0: local-lvm:vm-101-disk-1 

然后在Web UI管理页面进行操作添加磁盘,即可自动识别虚拟磁盘的容量。

创建的挂载点容量很迷,850G的挂载点,虚拟磁盘显示占用912.68G

SSD pool的容量是920G,那不是正好吗?

时间来到 5:00

安装rsync,默认没有rsync

执行数据同步

rsync -av --delete /data-backup/ /web-data/www/

数据已同步完成

openwrt配置ddns 有点复杂

自定义脚本

aly脚本路径

/usr/lib/ddns/update_aliyun_com.sh

太累了,不玩先吧,现在时间是 7:00

2021年10月29日 17:33

继续研究LXC容器的pct管理命令,目的是使用命令管理LXC,从而实现自动快照。

做快照的时候,我的目的是只为LXC的rootfs与备份的HDD磁盘做快照,SSD不参与做快照
因此快照前必须将SSD挂载点删除,然后再执行快照命令,快照完成后,再将SSD添加回来。

特别注意 千万不能在Web UI管理界面容器资源页删除未使用的磁盘!

此操作将会删除虚拟磁盘!!!

PCT管理命令 我们可以使用帮助命令去了解

# PVE 进入 PCT
# pct enter <vmid>
pct enter 103
# exit 退出pct

# 关于pct的使用帮助
pct help

# 具体到哪个命令
pct help set

我需要使用的pct管理命令

  • 为了能够实现自动快照,目前我需要的操作命令
# 关闭pct容器
pct shutdown <vmid> [OPTIONS]

root@fzpve:~# pct help shutdown
USAGE: pct shutdown <vmid> [OPTIONS]

  Shutdown the container. This will trigger a clean shutdown of the
  container, see lxc-stop(1) for details.

  <vmid>     <integer> (1 - N)

             The (unique) ID of the VM.

  -forceStop <boolean>   (default=0)

             Make sure the Container stops.

  -timeout   <integer> (0 - N)   (default=60)

             Wait maximal timeout seconds.

# 关闭pct容器示例
pct shutdown 101

# 删除pct挂载点mp[0,1,2,...]
pct set <vmid> -delete mp[n]

root@fzpve:~# pct help set
USAGE: pct set <vmid> [OPTIONS]

  Set container options.

  <vmid>     <integer> (1 - N)

             The (unique) ID of the VM.

  ......

  -delete    <string>

             A list of settings you want to delete.

  ......

  -mp[n]     [volume=]<volume> ,mp=<Path> [,acl=<1|0>] [,backup=<1|0>]
             [,mountoptions=<opt[;opt...]>] [,quota=<1|0>]
             [,replicate=<1|0>] [,ro=<1|0>] [,shared=<1|0>]
             [,size=<DiskSize>]

             Use volume as container mount point. Use the special syntax
             STORAGE_ID:SIZE_IN_GiB to allocate a new volume.

  -unused[n] [volume=]<volume>

             Reference to unused volumes. This is used internally, and
             should not be modified manually.


# 删除pct挂载点示例,得记住配置文件挂载点mp0的配置,比如mp=/data-backup,replicate=0,backup=0,以便再次添加
pct set 101 -delete mp0

# 测试关于unused[n]这个命令,测试只有下面的命令成功添加了磁盘
pct set 101 -unused0 wd-backup:vm-100-disk-0 -mp0 wd-backup:vm-100-disk-0,mp=/data-backu
### 但是上面的命令 -unused0 wd-backup:vm-100-disk-0 是多此一举的。

# 我直接使用如下命令即可再次添加删除的挂载点
pct set 101 -mp0 wd-backup:vm-100-disk-0,mp=/data-backup

# 建立pct快照
pct snapshot <vmid> <snapname> [OPTIONS]

root@fzpve:~# pct help snapshot
USAGE: pct snapshot <vmid> <snapname> [OPTIONS]

  Snapshot a container.

  <vmid>     <integer> (1 - N)

             The (unique) ID of the VM.

  <snapname> <string>

             The name of the snapshot.

  -description <string>

             A textual description or comment.

# 建立pct快照示例
pct snapshot 101 debian_snap20211029

# 建立快照之后当然是再次添加刚才已经删除的挂载点啦
# pct set <vmid> -mp[n] <STORAGE_ID>:<VM-DISK-NAME>,mp=<Path>,backup=<1|0>,replicate=<1|0>
pct set 101 -mp0 wd-backup:vm-100-disk-0,mp=/data-backup,backup=0,replicate=0

# 开启pct容器
# pct start <vmid>
pct start 100

时间来到了 20:20

配置了一个LXC容器模板,并且做了一个备份

然后完整克隆了2个基于这个模板的完整克隆,分别用于NextCloud与OnlyOffice

部署证书吧 了解一下pve用的什么证书

  • 貌似PVE有集成acme脚本?
  • 但是PVE集成的这个acme什么鬼来滴?我根本不懂怎么使用。

安装acme.sh 按照之前的旧方法搞

  • 安装在PVE上,然后同步到各个LXC
# 在PVE上安装acme.sh
curl  https://get.acme.sh | sh
## 居然安装出错,再次尝试还是同样的报错,PVE貌似只能使用他集成的ACME
root@fzpve:~# curl  https://get.acme.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   937    0   937    0     0    795      0 --:--:--  0:00:01 --:--:--   795
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  203k  100  203k    0     0    808      0  0:04:18  0:04:18 --:--:-- 67051
[Fri 29 Oct 2021 09:33:46 PM CST] Installing from online archive.
[Fri 29 Oct 2021 09:33:46 PM CST] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Fri 29 Oct 2021 09:37:56 PM CST] Extracting master.tar.gz

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
sh: 6676: gtar: not found
[Fri 29 Oct 2021 09:37:56 PM CST] Extraction error.

PVE集成的ACME貌似需要注册账户 而且有点繁琐

还是在LXC容器安装ACME试试吧

LXC没有curl,需要安装

apt install curl

然后再安装acme.sh

root@Debian11-Cloud:~# curl  https://get.acme.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   937    0   937    0     0    264      0 --:--:--  0:00:03 --:--:--   264
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  203k  100  203k    0     0   174k      0  0:00:01  0:00:01 --:--:--  174k
[Fri 29 Oct 2021 10:56:08 PM CST] Installing from online archive.
[Fri 29 Oct 2021 10:56:08 PM CST] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Fri 29 Oct 2021 10:56:12 PM CST] Extracting master.tar.gz
[Fri 29 Oct 2021 10:56:12 PM CST] It is recommended to install socat first.
[Fri 29 Oct 2021 10:56:12 PM CST] We use socat for standalone server if you use standalone mode.
[Fri 29 Oct 2021 10:56:12 PM CST] If you don't use standalone mode, just ignore this warning.
[Fri 29 Oct 2021 10:56:12 PM CST] Installing to /root/.acme.sh
[Fri 29 Oct 2021 10:56:12 PM CST] Installed to /root/.acme.sh/acme.sh
[Fri 29 Oct 2021 10:56:12 PM CST] Installing alias to '/root/.bashrc'
[Fri 29 Oct 2021 10:56:12 PM CST] OK, Close and reopen your terminal to start using acme.sh
[Fri 29 Oct 2021 10:56:12 PM CST] Installing cron job
no crontab for root
no crontab for root
[Fri 29 Oct 2021 10:56:12 PM CST] Good, bash is found, so change the shebang to use bash as preferred.
[Fri 29 Oct 2021 10:56:13 PM CST] OK
[Fri 29 Oct 2021 10:56:13 PM CST] Install success!

配置API key

export Ali_Key="L************S"
export Ali_Secret="O***************************F"

root@Debian11-Cloud:~# export Ali_Key="L************S"
root@Debian11-Cloud:~# export Ali_Secret="O**********************F"

申请证书

申请的是通配符证书

/root/.acme.sh/acme.sh --issue --dns dns_ali -d sgtfz.top -d *.sgtfz.top
### 貌似也是无法申请证书,需要注册账户了。
root@Debian11-Cloud:~# /root/.acme.sh/acme.sh --issue --dns dns_ali -d sgtfz.top -d *.sgtfz.top
[Fri 29 Oct 2021 11:04:00 PM CST] Using CA: https://acme.zerossl.com/v2/DV90
[Fri 29 Oct 2021 11:04:00 PM CST] Create account key ok.
[Fri 29 Oct 2021 11:04:00 PM CST] No EAB credentials found for ZeroSSL, let's get one
[Fri 29 Oct 2021 11:04:00 PM CST] acme.sh is using ZeroSSL as default CA now.
[Fri 29 Oct 2021 11:04:00 PM CST] Please update your account with an email address first.
[Fri 29 Oct 2021 11:04:00 PM CST] acme.sh --register-account -m my@example.com
[Fri 29 Oct 2021 11:04:00 PM CST] See: https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA
[Fri 29 Oct 2021 11:04:00 PM CST] Please add '--debug' or '--log' to check more details.
[Fri 29 Oct 2021 11:04:00 PM CST] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

### 注册zerossl账户
/root/.acme.sh/acme.sh --register-account -m sgtdjfz@live.cn --server zerossl
### 注册完成
root@Debian11-Cloud:~# /root/.acme.sh/acme.sh --register-account -m sgtdjfz@live.cn --server zerossl
[Fri 29 Oct 2021 11:34:08 PM CST] No EAB credentials found for ZeroSSL, let's get one
[Fri 29 Oct 2021 11:34:09 PM CST] Registering account: https://acme.zerossl.com/v2/DV90
[Fri 29 Oct 2021 11:34:13 PM CST] Registered
[Fri 29 Oct 2021 11:34:13 PM CST] ACCOUNT_THUMBPRINT='QGg******************_cPkL6QhfI'

## 设置默认CA为zerossl
/root/.acme.sh/acme.sh --set-default-ca  --server zerossl

## 再来申请证书!尼玛!搞错域名了!
/root/.acme.sh/acme.sh --issue --dns dns_ali -d sgtfz.cn -d *.sgtfz.cn

## 惨了!
## 难道又要折腾公网sgtfz.cn的证书了?不管先了。

# 继续申请sgtfz.top的的证书吧!!
/root/.acme.sh/acme.sh --issue --dns dns_ali -d sgtfz.top -d *.sgtfz.top

-----END CERTIFICATE-----
[Fri 29 Oct 2021 11:47:14 PM CST] Your cert is in: /root/.acme.sh/sgtfz.top/sgtfz.top.cer
[Fri 29 Oct 2021 11:47:14 PM CST] Your cert key is in: /root/.acme.sh/sgtfz.top/sgtfz.top.key
[Fri 29 Oct 2021 11:47:14 PM CST] The intermediate CA cert is in: /root/.acme.sh/sgtfz.top/ca.cer
[Fri 29 Oct 2021 11:47:14 PM CST] And the full chain certs is there: /root/.acme.sh/sgtfz.top/fullchain.cer

## 删除本地的sgtfz.cn误操作的证书
/root/.acme.sh/acme.sh --remove -d sgtfz.cn -d *.sgtfz.cn

root@Debian11-Cloud:~# /root/.acme.sh/acme.sh --remove -d sgtfz.cn -d *.sgtfz.cn
[Fri 29 Oct 2021 11:53:50 PM CST] sgtfz.cn is removed, the key and cert files are in /root/.acme.sh/sgtfz.cn
[Fri 29 Oct 2021 11:53:50 PM CST] You can remove them by yourself.

# 删除sgtfz.cn下载的证书目录
rm -r /root/.acme.sh/sgtfz.cn

# 让acme自动更新
root@Debian11-Cloud:~# /root/.acme.sh/acme.sh --upgrade  --auto-upgrade
[Sat 30 Oct 2021 12:14:49 AM CST] Already uptodate!
[Sat 30 Oct 2021 12:14:49 AM CST] Upgrade success!

2021年10月30日 00:10

是时候布置AMP环境了

#根据自己需需要部署nextcloud的环境安装如下软件包
apt install apache2;\
apt install php-fpm;\
apt install php-apcu php-bcmath php-curl php-gd php-gmp php-intl;\
apt install php-imagick php-mbstring php-mysql php-redis php-xml php-zip;\
apt install libmagickcore-6.q16-6-extra;\
apt install ffmpeg;\
apt install redis-server;\
apt install mariadb-server mariadb-client;

配置MariaDB数据库

初始化数据库:

mysql_secure_installation

Enter current password for root (enter for none): #直接按回车即可
Switch to unix_socket authentication [Y/n] y
Change the root password? [Y/n] n #不用设置root用户密码,因为我们使用unix_socket免密
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

数据库的一些基本配置

#登录数据库,root身份下,直接免密登录
mysql

#查看字符集
show variables like '%character%';
# 操作记录
root@Debian11-Cloud:~# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 52
Server version: 10.5.12-MariaDB-0+deb11u1 Debian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.001 sec)

#修改字符集
cp /etc/mysql/mariadb.conf.d/50-client.cnf{,.backup};\
vi /etc/mysql/mariadb.conf.d/50-client.cnf
[client]
default-character-set = utf8mb4

cp /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf{,.backup};\
vi /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
[mysql]
default-character-set = utf8mb4

# 再次检查字符集
root@Debian11-Cloud:~# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 53
Server version: 10.5.12-MariaDB-0+deb11u1 Debian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.001 sec)


#针对nextcloud的一些数据库调优
cp /etc/mysql/mariadb.conf.d/50-server.cnf{,.backup};\
vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
innodb_buffer_pool_size=1G
innodb_io_capacity=4000
# 单服务器环境使用数据库就加上此配置项,如果此配置项有注释就去掉注释。
skip-external-locking

配置apache

# 开启支持php-fpm模块
a2enmod proxy_fcgi setenvif
a2enmod mpm_event
a2enconf php-fpm
# 操作记录
root@Debian11-Cloud:~# a2enmod proxy_fcgi setenvif
Considering dependency proxy for proxy_fcgi:
Module proxy already enabled
Module proxy_fcgi already enabled
Module setenvif already enabled
root@Debian11-Cloud:~# a2enmod mpm_event
Considering conflict mpm_worker for mpm_event:
Considering conflict mpm_prefork for mpm_event:
Module mpm_event already enabled
# 这儿报错是什么情况?先不管
root@Debian11-Cloud:~# a2enconf php-fpm
ERROR: Conf php-fpm does not exist!
# 正确姿势
a2enconf php7.4-fpm

#开启重写模块
a2enmod rewrite

root@Debian11-Cloud:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2
root@Debian11-Cloud:~# systemctl restart apache2

# 开启ssl,http2
a2enmod ssl
a2enmod http2

root@Debian11-Cloud:~# a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  systemctl restart apache2
root@Debian11-Cloud:~# a2enmod http2
Enabling module http2.
To activate the new configuration, you need to run:
  systemctl restart apache2


# 隐藏apache2版本号

cp /etc/apache2/conf-available/security.conf{,.backup};\
vi /etc/apache2/conf-available/security.conf
# 隐藏apache版本号。
ServerTokens Prod
# 或是 ServerTokens OS 修改为 ServerTokens Prod
# ServerSignature off 由原来的On改为Off 
ServerSignature off

配置php

# 配置PHP.ini
cp /etc/php/7.4/fpm/php.ini{,.backup};\
vi /etc/php/7.4/fpm/php.ini

# 大概有以下的配置内容
memory_limit = 1024M
post_max_size = 8G
upload_max_filesize = 8G
max_execution_time = 3600
max_input_time = 3600
; 隐藏 PHP 版本号,debian默认已经是off
expose_php = Off
# opcache配置项
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.save_comments=1
# redis配置项
redis.session.locking_enabled=1
redis.session.lock_retries=-1
redis.session.lock_wait_time=10000
;apc.enable_cli=1 此条目还要在cli目录配置此项开启,否正nextcloud的occ命令无法使用
apc.enable_cli=1

# 配置/cli/PHP.ini
cp /etc/php/7.4/cli/php.ini{,.backup};\
vi /etc/php/7.4/cli/php.ini
# 在配置文件最后添加
apc.enable_cli=1


# 配置www.conf
cp /etc/php/7.4/fpm/pool.d/www.conf{,.backup};\
vi /etc/php/7.4/fpm/pool.d/www.conf

pm = dynamic
pm.max_children = 18
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 16

AMP配置大概基本完成,真TM累

创建数据库

时间来到了1:15

root@Debian11-Cloud:~# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 54
Server version: 10.5.12-MariaDB-0+deb11u1 Debian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 查看用户的授权方式
# 正常情况下root用户没有设置密码invalid,只有本地登录root用户才能通过unix_socket免密登录。
MariaDB [(none)]> select Host,User,Password,plugin from mysql.user;
+-----------+-------------+----------+-----------------------+
| Host      | User        | Password | plugin                |
+-----------+-------------+----------+-----------------------+
| localhost | mariadb.sys |          | mysql_native_password |
| localhost | root        | invalid  | mysql_native_password |
| localhost | mysql       | invalid  | mysql_native_password |
+-----------+-------------+----------+-----------------------+
3 rows in set (0.001 sec)

#创建数据库
#创建数据库用户及密码

#创建数据库
create database wordpress;
create database nextcloud;

#创建用户及密码
create user 'c***p'@'localhost' identified by 'S**密码**l';
create user 'c***c'@'localhost' identified by 'L**密码**l';

#授权
grant all on wordpress.* to 'c***p'@'localhost';
grant all on nextcloud.* to 'c***c'@'localhost';

#刷新权限
flush privileges;

#查看数据库
show databases;

#查看数据库的用户们
select host,user from mysql.user;

#创建数据库
#创建数据库用户及密码
## 操作记录
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> create database nextcloud;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> create user 'c***p'@'localhost' identified by 'S**密码**l';
Query OK, 0 rows affected (0.005 sec)

MariaDB [(none)]> create user 'c***c'@'localhost' identified by 'L**密码**l';
Query OK, 0 rows affected (0.005 sec)

MariaDB [(none)]> grant all on wordpress.* to 'c***p'@'localhost';
Query OK, 0 rows affected (0.005 sec)

MariaDB [(none)]> grant all on nextcloud.* to 'c***c'@'localhost';
Query OK, 0 rows affected (0.009 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
| wordpress          |
+--------------------+
5 rows in set (0.000 sec)

MariaDB [(none)]> select host,user from mysql.user;
+-----------+-------------+
| Host      | User        |
+-----------+-------------+
| localhost | c***c       |
| localhost | c***p       |
| localhost | mariadb.sys |
| localhost | mysql       |
| localhost | root        |
+-----------+-------------+
5 rows in set (0.000 sec)

MariaDB [(none)]> select Host,User,Password,plugin from mysql.user;
+-----------+-------------+-------------------------------------------+-----------------------+
| Host      | User        | Password                                  | plugin                |
+-----------+-------------+-------------------------------------------+-----------------------+
| localhost | mariadb.sys |                                           | mysql_native_password |
| localhost | root        | invalid                                   | mysql_native_password |
| localhost | mysql       | invalid                                   | mysql_native_password |
| localhost | c***p       | *D47204E111DE8AA0063727E425BE318FC1CCFF1E | mysql_native_password |
| localhost | c***c       | *89E56EC22FF7C9B9CF3B5D66745C42537E6E2D66 | mysql_native_password |
+-----------+-------------+-------------------------------------------+-----------------------+
5 rows in set (0.001 sec)

挂载磁盘到PCT

时间来到了 1:38

# 命令给pct容器挂载磁盘,非常顺利
pct set 103 -mp0 ssd-data:vm-101-disk-0,mp=/site-data

# 命令pct开机
pct start 103

部署网站

时间来到了 1:48

# 首先安装证书到apache2的目录

# 创建证书存放目录
mkdir /etc/apache2/cert

# 安装证书,证书匹配apache与nginx。
# nginx使用key.pem、chain.pem
# apache使用cert.pem、key.pem、chain.pem
acme.sh --install-cert -d sgtfz.top \
--cert-file      /etc/apache2/cert/sgtfztop_cert.pem  \
--key-file       /etc/apache2/cert/sgtfztop_key.pem  \
--fullchain-file /etc/apache2/cert/sgtfztop_chain.pem \
--reloadcmd     "service apache2 force-reload"
## 操作记录
root@Debian11-Cloud:~# /root/.acme.sh/acme.sh --install-cert -d sgtfz.top \
--cert-file      /etc/apache2/cert/sgtfztop_cert.pem  \
--key-file       /etc/apache2/cert/sgtfztop_key.pem  \
--fullchain-file /etc/apache2/cert/sgtfztop_chain.pem \
--reloadcmd     "service apache2 force-reload"
[Sat 30 Oct 2021 01:56:04 AM CST] Installing cert to: /etc/apache2/cert/sgtfztop_cert.pem
[Sat 30 Oct 2021 01:56:04 AM CST] Installing key to: /etc/apache2/cert/sgtfztop_key.pem
[Sat 30 Oct 2021 01:56:04 AM CST] Installing full chain to: /etc/apache2/cert/sgtfztop_chain.pem
[Sat 30 Oct 2021 01:56:04 AM CST] Run reload cmd: service apache2 force-reload
[Sat 30 Oct 2021 01:56:04 AM CST] Reload success

创建网站的apache配置文件

## 站点配置文件存放路径
## /etc/apache2/sites-available/

#建立NextCloud站点配置文件
vi /etc/apache2/sites-available/nextcloud.conf

<VirtualHost 192.168.33.8:80>
  # nextcloud 根目录
  DocumentRoot /site-data/www/nextcloud/
  # 指定 nextcloud 使用的域名
  ServerName  cloud.sgtfz.top
  # nextcloud 根目录规则
  <Directory /site-data/www/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  # 开启 HTTP/2
  Protocols h2 h2c http/1.1
  # nextcloud 根目录
  DocumentRoot "/site-data/www/nextcloud/"
  # 指定 nextcloud 使用的域名
  ServerName  cloud.sgtfz.top:443

  # 日志
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  # Enable/Disable SSL for this virtual host.
  SSLEngine on

  # 证书公钥配置
  SSLCertificateFile /etc/apache2/cert/sgtfztop_cert.pem
  # 证书私钥配置
  SSLCertificateKeyFile /etc/apache2/cert/sgtfztop_key.pem
  # 证书链配置
  SSLCertificateChainFile /etc/apache2/cert/sgtfztop_chain.pem

  SSLUseStapling on
  SSLStaplingReturnResponderErrors off
  SSLStaplingResponderTimeout 5

  #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
  <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
      SSLOptions +StdEnvVars
  </Directory>
</VirtualHost>

#建立WordPress站点配置文件
vi /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:80>
  # wordpress 根目录
  DocumentRoot /site-data/www/wordpress/
  # 指定 wordpress 使用的域名
  ServerName  sgtfz.top
  # wordpress 根目录规则
  <Directory /site-data/www/wordpress/>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  # 开启 HTTP/2
  Protocols h2 h2c http/1.1

  # wordpress 根目录
  DocumentRoot "/site-data/www/wordpress/"
  # 指定 wordpress 使用的域名
  ServerName  sgtfz.top:443

  # 日志
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  # Enable/Disable SSL for this virtual host.
  SSLEngine on

  # 证书公钥配置
  SSLCertificateFile /etc/apache2/cert/sgtfztop_cert.pem
  # 证书私钥配置
  SSLCertificateKeyFile /etc/apache2/cert/sgtfztop_key.pem
  # 证书链配置
  SSLCertificateChainFile /etc/apache2/cert/sgtfztop_chain.pem

  SSLUseStapling on
  SSLStaplingReturnResponderErrors off
  SSLStaplingResponderTimeout 5

  #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
  <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
      SSLOptions +StdEnvVars
  </Directory>
</VirtualHost>

# 站点总目录配置文件
# 路径 /etc/apache2/conf-available/ 的配置文件
vi /etc/apache2/conf-available/site-data.conf

ServerName localhost:80
# site-data DocumentRoot
<Directory "/site-data/www">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

然后开启网站配置文件

a2enconf site-data
a2ensite wordpress
a2ensite nextcloud
# 操作记录
root@Debian11-Cloud:~# a2enconf site-data
Enabling conf site-data.
To activate the new configuration, you need to run:
  systemctl reload apache2
root@Debian11-Cloud:~# a2ensite wordpress
Enabling site wordpress.
To activate the new configuration, you need to run:
  systemctl reload apache2
root@Debian11-Cloud:~# a2ensite nextcloud
Enabling site nextcloud.
To activate the new configuration, you need to run:
  systemctl reload apache2

停止apache2

systemctl stop apache2

上传并导入NextCloud与WordPress的数据库

  • 这我们得先创建一个普通用户来上传文件

创建用户

adduser sgtfz

# 操作记录,按向导操作各种资料留空,至Is the information correct?,直接y即可。
root@Debian11-Cloud:~# adduser sgtfz
Adding user `sgtfz' ...
Adding new group `sgtfz' (1000) ...
Adding new user `sgtfz' (1000) with group `sgtfz' ...
Creating home directory `/home/sgtfz' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for sgtfz
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] y

# 去TND,搞着搞着就没有保存到密码,现在忘了普通用户的密码了
# 修改普通用户sgtfz密码
passwd sgtfz
# 修改完成,爽呆了~!!

# 登录数据库
mysql

# 选择数据库
use nextcloud;
# 导入nextcloud的数据库
source /home/sgtfz/nextcloud_202110281906.sql;
# 继续wordpress的数据库
use wordpress;
source /home/sgtfz/wordpress_202110281906.sql;
# 顺利完成导入数据库

编辑WordPress与NextCloud配置文件的数据库用户及密码

# 编辑wordpress配置文件wp-config.php
vi /site-data/www/wordpress/wp-config.php

# nextcloud的配置文件还要修改一下目录路径,数据库用户及密码
vi /site-data/www/nextcloud/config/config.php

重启LXC,测试网站

reboot

遇到apache无法启动

报错日志如下:

[Sat Oct 30 03:39:56.096910 2021] [ssl:emerg] [pid 661:tid 139811129806144] AH01958: SSLStapling: no stapling cache available
[Sat Oct 30 03:39:56.096942 2021] [ssl:emerg] [pid 661:tid 139811129806144] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/apache2/error.log for more information
AH00016: Configuration Failed

禁用以下配置文件,apache就能起来

认真检查这两个网站的配置文件,没有发现有什么不妥啊?那么问题出在哪里?

a2dissite wordpress
a2dissite nextcloud

apache 启动失败已解决

如果长时间没有折腾,真的可以忘记很多以前经历过的事情,所以再好的记忆力都不如认真的记录下来。

  • 查看apache报错日志大概与证书的配置文件相关,我漏了这个配置文件没有检查与配置
  • 就这 /etc/apache2/mods-enabled/ssl.conf
root@Debian11-Cloud:~# cat /etc/apache2/mods-enabled/ssl.conf
<IfModule mod_ssl.c>

        # Pseudo Random Number Generator (PRNG):
        # Configure one or more sources to seed the PRNG of the SSL library.
        # The seed data should be of good random quality.
        # WARNING! On some platforms /dev/random blocks if not enough entropy
        # is available. This means you then cannot use the /dev/random device
        # because it would lead to very long connection times (as long as
        # it requires to make more entropy available). But usually those
        # platforms additionally provide a /dev/urandom device which doesn't
        # block. So, if available, use this one instead. Read the mod_ssl User
        # Manual for more details.
        #
        SSLRandomSeed startup builtin
        SSLRandomSeed startup file:/dev/urandom 512
        SSLRandomSeed connect builtin
        SSLRandomSeed connect file:/dev/urandom 512

        ##
        ##  SSL Global Context
        ##
        ##  All SSL configuration in this context applies both to
        ##  the main server and all SSL-enabled virtual hosts.
        ##

        #
        #   Some MIME-types for downloading Certificates and CRLs
        #
        AddType application/x-x509-ca-cert .crt
        AddType application/x-pkcs7-crl .crl

        #   Pass Phrase Dialog:
        #   Configure the pass phrase gathering process.
        #   The filtering dialog program (`builtin' is a internal
        #   terminal dialog) has to provide the pass phrase on stdout.
        SSLPassPhraseDialog  exec:/usr/share/apache2/ask-for-passphrase

        #   Inter-Process Session Cache:
        #   Configure the SSL Session Cache: First the mechanism
        #   to use and second the expiring timeout (in seconds).
        #   (The mechanism dbm has known memory leaks and should not be used).
        #SSLSessionCache                 dbm:${APACHE_RUN_DIR}/ssl_scache
        SSLSessionCache         shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
        SSLSessionCacheTimeout  300

        #   Semaphore:
        #   Configure the path to the mutual exclusion semaphore the
        #   SSL engine uses internally for inter-process synchronization.
        #   (Disabled by default, the global Mutex directive consolidates by default
        #   this)
        #Mutex file:${APACHE_LOCK_DIR}/ssl_mutex ssl-cache


        #   SSL Cipher Suite:
        #   List the ciphers that the client is permitted to negotiate. See the
        #   ciphers(1) man page from the openssl package for list of all available
        #   options.
        #   Enable only secure ciphers:
        #SSLCipherSuite HIGH:!aNULL
        #   sgtfz 20211030 这里注意啦!
        SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

        # SSL server cipher order preference:
        # Use server priorities for cipher algorithm choice.
        # Clients may prefer lower grade encryption.  You should enable this
        # option if you want to enforce stronger encryption, and can afford
        # the CPU cost, and did not override SSLCipherSuite in a way that puts
        # insecure ciphers first.
        # Default: Off
        #SSLHonorCipherOrder on
        # sgtfz 20211030 这里注意啦!
        SSLHonorCipherOrder off
        SSLSessionTickets off

        #   The protocols to enable.
        #   Available values: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2
        #   SSL v2  is no longer supported
        #SSLProtocol all -SSLv3
        #   sgtfz 20211030
        SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

        #   Allow insecure renegotiation with clients which do not yet support the
        #   secure renegotiation protocol. Default: Off
        #SSLInsecureRenegotiation on

        #   Whether to forbid non-SNI clients to access name based virtual hosts.
        #   Default: Off
        #SSLStrictSNIVHostCheck On

        #   ssl_stapling_cache
        #   sgtfz - 20211030 这里注意啦!
        SSLStaplingCache shmcb:${APACHE_RUN_DIR}/ssl_stapling_cache(128000)

</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

配置nextcloud后台任务

crontab -u www-data -e
# 每10分钟执行一次
*/10 * * * * php -f /site-data/www/nextcloud/cron.php
# 配置顺利完成

又一个不眠之夜

时间来到了 5:13

折腾这方面的东西,也只有晚上没有人打扰思路才能清晰。

但是全程总体非常顺利,Proxmox VE可玩性确实更高!

在这个主机(B85 + E3-1231V3)上运行非常舒服,对比我最古老的那个主机(Z68 + E3-1230V2)明显好不少。

可能是华硕主板B85M(MATX),比微星主板Z68(ATX)更优秀的原因。

微星的Z68启动的时候有PVE有几个报错的提示:ACPI Error

华硕的B85M没有此问题

在华硕B85M主板上的,PVE的VM虚拟机同样的OpenWrt占用资源更低一些,这也许是因为OpenWrt的3个网口都是直接使用硬件直通网卡。

Windows Terminal ssh 连接报错解决

在折腾的中途使用 Windows Terminal ssh 连接服务器却报错

ssh连接到指定服务器报错如下:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:Y+VRt0Y***********************************l4TLM.
Please contact your system administrator.
Add correct host key in C:\\Users\\sgtfz/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\sgtfz/.ssh/known_hosts:1
ECDSA host key for 192.168.33.8 has changed and you have requested strict checking.
Host key verification failed.

解决方法

打开当前用户目录路径如下:

  • C:\Users\sgtfz\.ssh
  • 编辑known_hosts文件
# 哪个IP地址无法用ssh连接的,整行删掉即可。
192.168.33.8 ecdsa-sha2-nistp256 AAAAE2VjZHNh****uerLgqcnkItfIAsuyD9*****cP8ipTxIj2Cj6lw=
192.168.33.131 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoY*************f54zj69xxmXTmXunQvUxmkM=
192.168.33.6 ecdsa-sha2-nistp256 AAAAE2V***uerLgqcnkItfIAsuyD9+fhI/JtZ/dXacP8ipTxIj2Cj6lw=
192.168.33.1 ssh-rsa AAAAB3N*************************************E+k0diaOcB

从 Hyper-V 迁移到 Proxmox VE 的计划

为从 Hyper-V 迁移到 Proxmox VE 正在做各方面的准备工作,准备2021年10月28日 — 今晚 21:30 进行。

  • 当前的所谓家庭服务器使用的是 Windows server 2019 Hyper-V
  • 需要将家庭服务器主机关机,才能将PVE部署到服务器上
  • 届时将无法使用本地部署的服务:OpenWrt、WordPress、NextCloud
  • 用普通路由器顶替OpenWrt的拨号工作,暂时保证互联网正常工作。
  • 虽然运行的东西不多,但全程手动档,耗时应该比较长,无特殊情况一律勿扰模式。
  • 由于对PVE还不太熟悉,可能会遇到各种翻车的情况出现!

一、备份 Hyper-V 上运行的各种服务配置

我不知道能不能直接备份配置文件,搞好新环境后直接还原配置文件到新环境上呢?貌似这样不太完美
不过配置文件的备份是必需的,到时在新环境可以全程手动抄作业即可。

  • 备份OpenWrt各种配置
  • 备份承载NextCloud与WordPress的Debian各种环境配置
  • NextCloud与WordPress网站数据及数据库已经Rsync到另一台测试机的磁盘上了。
  • 但我已经感觉到头疼了,这个环境配置涉及太多
  • 备份/etc/apache2这个目录的配置文件
  • 备份/etc/mysql这个目录的配置文件
  • 备份/etc/php/7.4/fpm这个目录的配置文件

二、安装 Proxmox VE

  • filesystem 就使用ext4吧。

安装时需要自定义磁盘分区大小

  • hdsize 定义要使用的总硬盘大小,计划用一个128G的固态硬盘安装PVE。
  • swapsize 交换分区大小,最小4GB,最大8GB。计划准备配置4GB
  • maxroot 存储操作系统的根分区,最大限制为hdsize/4,计划配置20GB
  • maxvz 定义lvm-thin pool data分区大小,计划配置80GB左右 datasize=hdsize-rootsize-swapsize-minfree
  • minfree 定义LVM卷组pve中剩余的可用空间。计划配置5GB,超过128GB的可用存储空间默认配置为16GB。
    否则默认hdsize/8, LVM需要VG中的可用空间来创建快照,lvmthin不需要VG中的可用空间来创建快照!

国家,时区,键盘

  • Country: 国家,china
  • Time zone: 时区,Asia/Shanghai
  • Keyboard Layout: 键盘,U.S. English

网卡,主机名,IP地址,DNS

  • Management Interface: 选个PVE用的网卡,用集成网卡吧。
  • Hostname(FQDN): 主机名随便吧,fzpve.lan
  • IP Address(CIDR): 主机地址,192.168.33.3/24
  • Gateway: 网关地址,192.168.33.1
  • DNS Server: DNS服务器地址,223.5.5.5

设置密码、邮箱

  • Password: 设置root密码
  • Confirm: 再次输入root密码
  • Email: 邮箱地址

三、Proxmox VE 基础配置

修改Vi编辑器

   #切换到root身份
   su -

   #使用nano编辑器修改Vi配置文件vimrc.tiny
   nano /etc/vim/vimrc.tiny 
   # 需要修改的内容如下
   " set compatible
   set nocompatible
   set backspace=2

修改软件、模板源为国内清华镜像站,禁用PVE企业源

   # 用vi编辑器修改Debian软件源sources.list
   vi /etc/apt/sources.list

   # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
   deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
   # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
   deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
   # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
   deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
   # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
   deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
   # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free


   # 禁用Proxmox企业源
   # 注释掉企业源即可。
   vi /etc/apt/sources.list.d/pve-enterprise.list
   # deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise


   # CT Templates LXC模板镜像源,修改为清华镜像站
   # 将 /usr/share/perl5/PVE/APLInfo.pm 文件中默认的源地址 http://download.proxmox.com
   # 替换为 https://mirrors.tuna.tsinghua.edu.cn/proxmox 即可。
   # 可以使用如下命令修改:
   # 首先备份APLInfo.pm配置文件
   cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back

   # 修改APLInfo.pm配置文件
   sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
   # 针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,重启后生效。

存储和备份方案

使用块级存储 LVM-thin存储类型做后端

  • 主要因为LVM-thin是PVE官方推荐,快照与克隆非常方便,性能各方面较好吧?
  • LVM需要VG中的空闲空间来创建快照,lvmthin不需要VG中的空闲空间来创建快照!
  • 为了方便使用快照,必须用LVM-thin

单个SSD磁盘运行NextCloud Rsync同步备份并结合快照保证数据安全

  • 使用Rsync实时同步到HDD磁盘,比较有效的防止磁盘损坏丢失数据
  • 只在HDD上做快照,因为SSD容量较小且有写入寿命。快照可以避免中毒数据被修改……。

磁盘查看、添加、管理

查看磁盘相关信息的命令有如下:

   # 以下常用查看磁盘相关的命令,实际使用更能理解命令的作用。

   # 查看机器上的所有硬盘及分区情况
   fdisk -l

   # 查看系统当前已挂载的磁盘及挂载目录
   df -h

   # 查看所有磁盘及分区树状结构、类型、挂载点
   lsblk

   # 查看所有磁盘UUID,类型
   blkid

为PVE添加块级存储 LVM-thin

  • 不建议在WebUI管理页添加LVM-thin
  • 强烈建议使用命令进行添加LVM-thin

使用命令行添加 LVM-thin存储

   # 首先确定我们需要添加的物理磁盘
   fdisk -l

   # 创建物理卷PV (volume),这里针对没有分区的硬盘
   pvcreate /dev/sdb   # sdc,sdd,sde

   # 创建卷组VG (group)
   # vgcreate <VGNAME> /dev/sdb
   vgcreate vgdata /dev/sdb

   # 创建 thin-pool (精简池),1TB的SSD预留5G左右的VG空闲空间,目前仅为tmeta扩容做准备。
   # 以便灵活增加tmeta空间,此步骤默认创建的[<poolNAME>_tmeta]容量为100mb左右
   # 我们可以创建精简池后,再增加[<poolNAME>_tmeta]空间为500MB即可,增加tmeta空间[lvol0_pmspare]空间也会同步增加。
   # lvcreate -L 100G -n <poolNAME> <VGNAME>
   # lvconvert --type thin-pool <VGNAME>/<poolNAME>
   lvcreate -L 100G -n fzdata vgdata
   lvconvert --type thin-pool vgdata/fzdata

   # 使用刚才创建的 thin-pool (精简池)
   # pvesm add lvmthin <STORAGE_ID> --vgname <VGNAME> --thinpool <poolNAME>
   pvesm add lvmthin fzthin --vgname vgdata --thinpool fzdata

   # 检查存储状态
   pvesm status
   # PVE存储的配置storage.cfg文件路径为:/etc/pve/storage.cfg

   # 下面是扩容 pool 或 tmata 空间的方法。

   # 如果我们要扩容 pool 就必需保证 VG 有空闲的空间以便扩容
   # 首先查看VG的可用空闲空间VFree
   vgs
   # 或空闲空间PFree
   pvs
   # 扩容 pool 方法
   # lvextend -L+10G <VGNAME>/<poolNAME>
   lvextend -L+10G vgdata/fzdata

   # 如果我们要扩容 tmata 就必需保证 VG 有空闲的空间以便扩容
   # 查看<poolNAME>_tmeta]空间
   lvs -a
   # 或
   lvs -oname,size,data_percent,metadata_percent vgdata/fzdata
   # 或
   lvs -a -oname,attr,size vgdata
   # 扩容[<poolNAME>_tmeta]空间
   # lvextend --poolmetadatasize +900M <VGNAME>/<poolNAME>
   lvextend --poolmetadatasize +900M vgdata/fzdata
   # tmeta空间--即是Web管理页面上的元数据大小
   # 增加tmeta空间同时[lvol0_pmspare]同步增加同样大小的空间,即tmeta增加50MB,就需要100MB的PFree空间。

管理磁盘 日常

日后再说吧

硬件直通配置

1、主板必须开启vt-d

2、修改grub文件

   vi /etc/default/grub
   # GRUB_CMDLINE_LINUX_DEFAULT="quiet"做如下修改(intel的CPU)
   GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

3、更新grub

update-grub

4、加载内核模块modules

   vi /etc/modules
   # 内容如下
   vfio
   vfio_iommu_type1
   vfio_pci
   vfio_virqfd

5、刷新initramfs

update-initramfs -u -k all

6、然后重启主机

7、验证是否开启iommu

dmesg | grep 'remapping'

  • 执行命令后显示如下内容,说明开启成功 DMAR-IR: Enabled IRQ remapping in x2apic mode
  • 此时输入命令 find /sys/kernel/iommu_groups/ -type l 出现很多直通组,说明成功了。

8、PCI-E直通要求

  • 执行了前面所有步骤之后,虚拟机 机器必需要选q35。

9、关于显卡直通

暂时不考虑直通显卡吧。

  • 据说新版的PVE7无需做驱动屏蔽,直接开启iommu之后,创建的虚拟机 机器q35,然后添加直通设备即可。
  • 关于直通显卡,在Windows上驱动报错43,尝试下载安装最新版的NVIDIA驱动试试吧!

修改PVE绑定的网卡及IP地址

假如我们更换了网卡或是PCIe网卡更换了插槽位置,可能会导致PVE网络故障。 这会造成无法远程访问并管理PVE,那么就必须进入高级模式,修改绑定的网卡参数了。

   # 首先查看我们的物理网卡及IP地址等相关信息
   ip addr
   # 这可以看到我们所有的网络设备
   # 1:  lo:全称loopback,是回环地址。
   # 2:  enp1s0: 物理网卡,如果有多个网卡,会有多个enp1s1、enp2s0或其他
   # 3:  vmbr0: 桥接网卡,这是PVE桥接网卡,多个桥接网卡也会有多个vmbr1、vmbr2

   # 然后查看interfaces配置文件
   cat /etc/network/interfaces
   # 部分内容如下
   auto lo
   iface lo inet loopback

   auto enp1s0
   iface enp1s0 inet manual

   auto enp2s0
   iface enp2s0 inet manual

   auto vmbr0
   iface vmbr0 inet static
         address 192.168.33.3/24  # PVE后台IP地址
         gateway 192.168.33.1  # 网关
         bridge-ports enp1s0  # PVE桥接绑定的物理网卡,如果对应不上目前的物理网卡必然网络故障。
         bridge-stp off  # 暂时未知,应该与自动激活或开启相关
         bridge-fd 0  # 暂时未知,应该与自动激活或开启相关
   # 我们就能很容易发现问题了

有了上面的例子,我们就很容易的去修改网卡及IP地址的参数了。

四、在Proxmox VE创建虚拟机及LXC容器

VM虚拟机部署OpenWrt

虽然LXC上运行OpenWrt真的非常省CPU资源,但是PPPoE拨号正常却无法提供LAN口设备上网。

  • 查看防火墙表状态没有任何规则内容,重启防火墙后,防火墙表状态有规则内容了,同时LAN口设备也可以正常上网啦。
  • 即使重启了防火墙后可上网了,实际上没有发现的问题,可能还有很多,所以还是算了,不在乎多损耗一些CPU资源了。
  • 再说LXC上运行OpenWrt,在配置LXC的时候还是比较繁琐的,那么就更有理由放弃LXC运行OpenWrt了。

计划网卡直通给OpenWrt。

  • 如果使用硬件直通,就需要选择q35机器咯,那么就再搞一个UEFI启动吧。

VM虚拟机部署OpenWrt的步骤如下:

首先要建立一个VM虚拟机 硬件配置暂定如下:

  • 内存 512MB
  • 处理器 2核心 [host,flags=+aes]
  • BIOS OVMF(UEFI)
  • 显示 标准VGA(安装配置完成后,最后选择无显示)
  • 机器 q35(最新)
  • SCSI控制器 VirtIO SCSI
  • 硬盘随便添加一个1G的,然后需要使用img镜像导入的磁盘,之后要删除这个硬盘的。
  • 网络设备(net0) 随便添加一个网卡,之后要删除,配置直通网卡的哟。
  • EFI磁盘 这个必须要且不能删除。

然后下载OpenWrt

   # 直接在PVE上下载即可
   wget https://downloads.openwrt.org/releases/21.02.0/targets/x86/64/openwrt-21.02.0-x86-64-generic-ext4-combined-efi.img.gz

   # 解压
   gzip -d openwrt-21.02.0-x86-64-generic-ext4-combined-efi.img.gz

   # 将img磁盘直接导入为VM虚拟磁盘,vmid根据现实灵活修改哟。
   # qm importdisk <vmid> <source> <storage> [OPTIONS]
   qm importdisk 101 /root/openwrt-21.02.0-x86-64-generic-ext4-combined-efi.img local-lvm

最后再编辑虚拟机配置

  • 硬件
  • 将之前创建时的网卡删除,添加PCI设备,先添加一个直通网口作为LAN,之后安装好后再添加WAN口
  • 将之前创建虚拟机时的磁盘删除,添加刚才命令导入的虚拟磁盘。
  • 剩下的默认吧,检查配置无误后进入下一环节
  • 选项
  • 开机自动启动 是
  • OS类型 Linux 5.x – 2.6 Kernel
  • 引导顺序 scsi0 (特别注意这必须选导入的OpenWrt磁盘)
  • 剩下的项目默认吧。

至此可以开机了,如果一切正常之后,就可以进入192.168.1.1进行配置了。

创建CT(LXC)容器部署NextCloud与OnlyOffice

这一步就等实际操作后再做记录吧

佳能LBP2900+拆机及更换定影/定影膜的步骤

之前拆过佳能LBP2900,觉得这款机型外壳挺难拆的,不知道从哪里开始下手拆。塑料外壳就只发现4颗螺丝,拧下螺丝,依然一块外壳都无法拆下。没有拆机的资料,真的想暴力拆解😂,还是细心的一边的拆,一边记录吧。

最后修复完成后发现,其实记录这个过程,比拆装并修复故障更费时间!因此部分内容设置了阅读权限。

记录这个过程的时候,才发现我的维修台如此的破烂不堪,且乱得一团糟,将就着先吧,有时间了再整理、更换桌垫或更换一张桌子吧…😂

一、拆外壳

1、拆下面上的透明面盖

用手掰弯一侧,很容易就可把透明面盖拆下来,如下图:

拆透明面盖

2、拆下两侧的侧壳

首先,要拧下背盖的两颗螺丝

拧下背部两颗螺丝

然后,撬开其中一侧的侧壳(另一侧方法大同小异

  • 从底部红圈1撬开底部卡扣,同时配合红圈2撬开背部的卡扣
撬开白色侧壳底部与背部卡扣
  • 接着用手掰着已经撬开的一边,用一字螺丝刀撬开侧壳上部的卡扣
撬开白色侧壳的上部的卡扣
  • 边掰开侧壳边往前部推,并小心撬开侧壳前部卡扣,即可顺利拆下侧壳了。
小心撬开侧壳前部的卡扣

3、拆下背部的背壳

  • 首先,用手从底部往下扯背壳的一边,同时往上抬背壳,即可松脱背壳的卡扣
  • 然后,另一侧用同样的方法扯,即可顺利拆下背壳。
分别用手扯下背壳卡扣
同时往上抬起拆下背壳

4、拆上部的上壳

首先,拆下拉扯杆小圆卡扣

拆下小圆卡扣

然后,拧下上壳的两颗螺丝

拧下上壳的两颗螺丝

最后,边往后扯的同时往上抬上壳,即可拆下上壳(如下图箭头方向扯

拆下上壳

至此,上壳、左右侧壳、背壳,已经顺利拆下。

外壳拆卸完毕

二、拆定影,更换定影膜

1、把定影从机器上拆下来

首先,拔下定影接高压板的各种相关的插线,并从卡扣扯出各种插线。

拔下定影接高压板的各种插线
已经把定影接高压板的各种插线拔下

然后,拔下背部的一根插线,往上稍用力即可拔出来

拔下背部插线
已经把插线拔出

最后,拧下红圈标记的3颗螺丝,即可顺利拆下定影组件

拧下红圈标记的3颗螺丝
已经拆下定影组件
登录本站贡献者可阅读

更换定影膜成功,复原安装定影组件成功

更换定影膜完成

最后装机测试,一切正常,打印效果完美!

最近更新Debian10与NextCloud21遇到的问题

前几天打开Debian官方网发现Debian10.10已经发布正式版了,目前我使用的版本是Debian10.9,正好可以尝试一下升级系统,然后测试各种已部署的东西是否还能完美运行,我们开始折腾吧。

备份系统

备份系统是必需的前提,因为假如升级系统之后,出现各种问题,我们已部署的东西无法正常完美运行,或其他更多的问题,我们有了备份就不用再担心这些问题,即使是升级失败了,还可以恢复到未升级前的系统备份。

如何备份确实是个头痛的问题

因为没有经验,之前一直都不敢升级Linux系统。

不敢升级的原因有:

  • 曾经碰到过由于Windows10的自动更新,导致许多部署在Windows系统的各种东西出现各种各样奇怪的小问题,导致各种无法正常运行。
  • 曾经升级PHP,升级到高版本的PHP后,貌似需要重新配置各种各样的东西,更多的问题已经想不起了。

用 Hyper-V 检查点备份 Debian10 系统吧

可是使用检查点备份,我确实还是没有搞清楚检查点是如何工作的。因为Debian系统我是安装在SSD磁盘上,但数据目录我是放在HDD磁盘上。

如果创建检查点,是不是同时在SSD磁盘上与HDD磁盘上都会生成检查点的备份?如果是这样的话,数据目录占用的容量那么多,创建检查点的备份会占用容量非常大?

要弄清楚这个问题,我们完全可以一个一个问题的去测试与检验,可是需要耗费时间应该不少,懒…!

于是我采取以下的方法来创建检查点:

首先把挂载在HDD磁盘上的目录临时卸载掉

1、停止 apache、mariadb、php、计划任务等各种服务。

2、确定我们需要临时卸载的目录

sgtfz@debian-buster:~$ df -h
Filesystem                          Size  Used Avail Use% Mounted on
udev                                2.9G     0  2.9G   0% /dev
tmpfs                               592M   60M  533M  11% /run
/dev/mapper/debian_lvm-root          26G  2.2G   24G   9% /
tmpfs                               2.9G     0  2.9G   0% /dev/shm
tmpfs                               5.0M     0  5.0M   0% /run/lock
tmpfs                               2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/mapper/data_lvm-my_data        1.8T  366G  1.4T  21% /my-data
/dev/mapper/backup_lvm-data_backup  1.8T  367G  1.4T  21% /data_backup
/dev/sda2                           465M   50M  391M  12% /boot
/dev/sda1                           120M  5.1M  115M   5% /boot/efi
tmpfs                               592M     0  592M   0% /run/user/1000

3、临时卸载挂载在HDD磁盘上的目录

umount /dev/mapper/data_lvm-my_data
umount /dev/mapper/backup_lvm-data_backup

# 确认已卸载
root@debian-buster:~# df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                         2.9G     0  2.9G   0% /dev
tmpfs                        592M   60M  533M  11% /run
/dev/mapper/debian_lvm-root   26G  2.2G   24G   9% /
tmpfs                        2.9G     0  2.9G   0% /dev/shm
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/sda2                    465M   50M  391M  12% /boot
/dev/sda1                    120M  5.1M  115M   5% /boot/efi
tmpfs                        592M     0  592M   0% /run/user/1000

4、从Hyper-V虚拟机设置里移除相应目录的虚拟磁盘。记录好磁盘安装顺序,防止再次添加由于顺序问题导致各种问题。

然后,创建检查点。

创建检查点完成之后,我们需要在Hyper-V虚拟机设置里重新装载刚才卸载的磁盘,然后重启系统。

在创建检查点完成之后,在Hyper-V虚拟机设置里重新装载刚才卸载的磁盘,尝试过重新挂载目录,但是挂载出错,详细原因未知。

检查系统一切工作正常,下面开始更新系统。

从Debian10.9升级到Debian10.10

检查更新

apt update; apt upgrade;

The following NEW packages will be installed:
  linux-image-4.19.0-17-amd64
The following packages will be upgraded:
  base-files isc-dhcp-client isc-dhcp-common klibc-utils libgcrypt20 libglib2.0-0 libglib2.0-data libgnutls30 libhogweed4 libklibc libmariadb3 libnettle6 libwebp6
  libwebpmux3 libxml2 linux-image-amd64 mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common mariadb-server mariadb-server-10.3
  mariadb-server-core-10.3 php-common shim-helpers-amd64-signed shim-signed shim-signed-common shim-unsigned
28 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 73.0 MB of archives.
After this operation, 266 MB of additional disk space will be used.
Do you want to continue? [Y/n]

貌似升级的东西挺多的,确认升级后,几分钟升级完成,升级非常简单,完全感觉步到就已经完成了。简单的背后,别人不知道付出了多少的努力,才实现了给我们的如此简单的操作!

说到简单这个问题:

在你了解的领域里有个简单的问题,你当然觉得简单。可是在你不了解的领域,你只是看着别人简单的弄那么几下就OK,你也觉得非常的简单,你可能估计错误了。

可是我如何查看是否已经升级到Debian10.10了呢?

网上搜索各种查看系统版本的命令,都无法查看到现在的Debian10.10系统版本

sgtfz@debian-buster:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

sgtfz@debian-buster:~$ cat /proc/version
Linux version 4.19.0-17-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.194-2 (2021-06-21)
sgtfz@debian-buster:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

sgtfz@debian-buster:~$ hostnamectl
   Static hostname: debian-buster
         Icon name: computer-vm
           Chassis: vm
        Machine ID: c410905f8d4d4eeeabc0a1fc4da0c84c
           Boot ID: 1f08efd2ee964d09ae4f61b1ea4c0f37
    Virtualization: microsoft
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-17-amd64
      Architecture: x86-64

最后还是在Debian官方找到了查看debian系统版本的线索

sgtfz@debian-buster:~$ cat /etc/debian_version
10.10

证明升级完美成功。初步粗略体验,在debian系统上运行的各种东西一切都正常工作。

升级如此简单,干脆把另一台运行OnlyOffice的debian也升级一下吧。

运行OnlyOffice这台虚拟机,升级更简单,只有一个虚拟磁盘放在SSD上。

列出可更新的软件列表

root@debian-buster:~# apt list --upgradable
Listing... Done
base-files/stable 10.3+deb10u10 amd64 [upgradable from: 10.3+deb10u9]
isc-dhcp-client/stable 4.4.1-2+deb10u1 amd64 [upgradable from: 4.4.1-2]
isc-dhcp-common/stable 4.4.1-2+deb10u1 amd64 [upgradable from: 4.4.1-2]
klibc-utils/stable 2.0.6-1+deb10u1 amd64 [upgradable from: 2.0.6-1]
libgcrypt20/stable 1.8.4-5+deb10u1 amd64 [upgradable from: 1.8.4-5]
libglib2.0-0/stable 2.58.3-2+deb10u3 amd64 [upgradable from: 2.58.3-2+deb10u2]
libglib2.0-data/stable 2.58.3-2+deb10u3 all [upgradable from: 2.58.3-2+deb10u2]
libgnutls30/stable 3.6.7-4+deb10u7 amd64 [upgradable from: 3.6.7-4+deb10u6]
libhogweed4/stable 3.4.1-1+deb10u1 amd64 [upgradable from: 3.4.1-1]
libklibc/stable 2.0.6-1+deb10u1 amd64 [upgradable from: 2.0.6-1]
libmariadb3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
libnettle6/stable 3.4.1-1+deb10u1 amd64 [upgradable from: 3.4.1-1]
libwebp6/stable,stable 0.6.1-2+deb10u1 amd64 [upgradable from: 0.6.1-2]
libxml2/stable 2.9.4+dfsg1-7+deb10u2 amd64 [upgradable from: 2.9.4+dfsg1-7+deb10u1]
linux-image-amd64/stable 4.19+105+deb10u12 amd64 [upgradable from: 4.19+105+deb10u11]
mariadb-client-10.3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-client-core-10.3/stable 1:10.3.29-0+deb10u1 amd64 [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-client/stable 1:10.3.29-0+deb10u1 all [upgradable from: 1:10.3.27-0+deb10u1]
mariadb-common/stable 1:10.3.29-0+deb10u1 all [upgradable from: 1:10.3.27-0+deb10u1]
onlyoffice-documentserver/squeeze 6.3.1-32 amd64 [upgradable from: 6.3.0-111]
shim-helpers-amd64-signed/stable 1+15.4+5~deb10u1 amd64 [upgradable from: 1+15+1533136590.3beb971+7+deb10u1]
shim-signed-common/stable-updates 1.36~1+deb10u2+15.4-5~deb10u1 all [upgradable from: 1.33+15+1533136590.3beb971-7]
shim-signed/stable-updates 1.36~1+deb10u2+15.4-5~deb10u1 amd64 [upgradable from: 1.33+15+1533136590.3beb971-7]
shim-unsigned/stable 15.4-5~deb10u1 amd64 [upgradable from: 15+1533136590.3beb971-7+deb10u1]

从列表中可以看到,如果执行更新,onlyoffice-documentserver会更新到6.3.1的版本。可是目前我不想更新这个版本的OnlyOffice,因为我觉得OnlyOffice越来越重的商业味道,不太好食用。

标记不升级的软件包
apt-mark hold onlyoffice-documentserver

root@debian-buster:~# apt-mark hold onlyoffice-documentserver
onlyoffice-documentserver set on hold.

查看我们标记不升级的软件
apt-mark showhold

root@debian-buster:~# apt-mark showhold
onlyoffice-documentserver

执行升级,我们可以看到,标记不升级的软件包onlyoffice-documentserver,会保留原有的版本不作更新。

root@debian-buster:~# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-image-4.19.0-17-amd64
The following packages have been kept back:
  onlyoffice-documentserver
The following packages will be upgraded:
  base-files isc-dhcp-client isc-dhcp-common klibc-utils libgcrypt20 libglib2.0-0 libglib2.0-data
  libgnutls30 libhogweed4 libklibc libmariadb3 libnettle6 libwebp6 libxml2 linux-image-amd64
  mariadb-client mariadb-client-10.3 mariadb-client-core-10.3 mariadb-common shim-helpers-amd64-signed
  shim-signed shim-signed-common shim-unsigned
23 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 62.7 MB of archives.
After this operation, 266 MB of additional disk space will be used.
Do you want to continue? [Y/n]

至此,Debian系统升级完美完成。

时间又过了几天,NextCloud21.0.3终于发布了。

等待NextCloud发布更新等得好苦啊,因为NextCloud21用下来发现许多小问题,对比NextCloud20根本用不出性能差别,但问题却多了不少!哎……

从NextCloud21.0.2升级到NextCloud21.0.3

经过了那么多个版本的升级,我已经总结出使用OCC命令手动升级的完美方法了。可是,该来的问题,还是来了。

OCC升级报错 An unhandled exception has been thrown: 这个还是第一次遇到。

OCC报错问题1

使用OCC命令升级系统前,我们需要做数据库以及数据目录的备份,在做备份之前需要停止Apache与PHP,但是不要停止MariaDB。如果停止了MariaDB,OCC命令升级NextCloud会报错。

OCC报错问题2

An unhandled exception has been thrown:
OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

这个问题有点棘手!

所有准备就绪的时候,执行升级命令

sudo -u www-data php occ upgrade

你却给我抛出错误,愣是无法找到解决的方法,无法使用OCC命令升级。之后我尝试使用Web浏览器访问NextCloud,在Web浏览器上点击升级,却成功升级完成了。

于是我粗略的检查升级后的各种东西,貌似没有发现什么不妥。

暂时发现了一处不妥:NextCloud后台定时任务cron.php无法正常执行。即使直接在Putty上使用命令执行,也不生效。

NextCloud后台定时任务无法正常执行,到底是升级了Debian后导致的,还是升级了NextCloud后导致的,现在已经无法追溯了,但问题肯定跟无法使用OCC命令升级相关。

百度搜索Memcache \OC\Memcache\APCu not available for local cache相关问题,少之又少,没有任何参考意义。

从报错的机器翻译,问题应该出现在PHP扩展模块上。应该是我的php.ini配置问题,或是没有安装APCu扩展模块。

我觉得这些都不能成立,因为NextCloud21.0.2运行得好好的,一切正常,包括OCC命令也是一切正常的。为何升级了Debian10.10或NextCloud21.0.3后,问题就来了?简直不可理喻。

检查php.ini配置文件,确认APCu扩展是开启的,并且apc.enable_cli=1也是开启的。Web浏览器访问info.php查看PHP扩展模块,都是已开启的。难道这个问题只能搁置下去了?然后在putty使用命令php -i ,被我发现了其中的玄机,实在是令人头疼。

使用浏览器访问info.php可以看到

APCu Support Enabled
Version 5.1.20
APCu Debugging Disabled
MMAP Support Enabled
MMAP File Mask no value
Serialization Support php, igbinary
Build Date Mar 4 2021 15:44:06

可是使用终端命令 php -i 我们看到的却是如下

APCu Support => Disabled
Version => 5.1.20
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Serialization Support => Disabled
Build Date => Mar 4 2021 15:44:06

终于找到线索了

putty上键入命令 php --ini

命令模式所加载的配置文件路径:

root@debian-buster:~# php --ini
Configuration File (php.ini) Path: /etc/php/7.4/cli
Loaded Configuration File:         /etc/php/7.4/cli/php.ini
Scan for additional .ini files in: /etc/php/7.4/cli/conf.d
Additional .ini files parsed:      /etc/php/7.4/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.4/cli/conf.d/10-opcache.ini,
/etc/php/7.4/cli/conf.d/10-pdo.ini,
/etc/php/7.4/cli/conf.d/15-xml.ini,
/etc/php/7.4/cli/conf.d/20-apcu.ini,
/etc/php/7.4/cli/conf.d/20-bcmath.ini,
/etc/php/7.4/cli/conf.d/20-calendar.ini,
/etc/php/7.4/cli/conf.d/20-ctype.ini,
/etc/php/7.4/cli/conf.d/20-curl.ini,
/etc/php/7.4/cli/conf.d/20-dom.ini,
/etc/php/7.4/cli/conf.d/20-exif.ini,
/etc/php/7.4/cli/conf.d/20-ffi.ini,
/etc/php/7.4/cli/conf.d/20-fileinfo.ini,
/etc/php/7.4/cli/conf.d/20-ftp.ini,
/etc/php/7.4/cli/conf.d/20-gd.ini,
/etc/php/7.4/cli/conf.d/20-gettext.ini,
/etc/php/7.4/cli/conf.d/20-gmp.ini,
/etc/php/7.4/cli/conf.d/20-iconv.ini,
/etc/php/7.4/cli/conf.d/20-igbinary.ini,
/etc/php/7.4/cli/conf.d/20-imagick.ini,
/etc/php/7.4/cli/conf.d/20-intl.ini,
/etc/php/7.4/cli/conf.d/20-json.ini,
/etc/php/7.4/cli/conf.d/20-mbstring.ini,
/etc/php/7.4/cli/conf.d/20-mysqli.ini,
/etc/php/7.4/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.4/cli/conf.d/20-phar.ini,
/etc/php/7.4/cli/conf.d/20-posix.ini,
/etc/php/7.4/cli/conf.d/20-readline.ini,
/etc/php/7.4/cli/conf.d/20-redis.ini,
/etc/php/7.4/cli/conf.d/20-shmop.ini,
/etc/php/7.4/cli/conf.d/20-simplexml.ini,
/etc/php/7.4/cli/conf.d/20-sockets.ini,
/etc/php/7.4/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.4/cli/conf.d/20-sysvsem.ini,
/etc/php/7.4/cli/conf.d/20-sysvshm.ini,
/etc/php/7.4/cli/conf.d/20-tokenizer.ini,
/etc/php/7.4/cli/conf.d/20-xmlreader.ini,
/etc/php/7.4/cli/conf.d/20-xmlwriter.ini,
/etc/php/7.4/cli/conf.d/20-xsl.ini,
/etc/php/7.4/cli/conf.d/20-zip.ini,
/etc/php/7.4/cli/conf.d/25-apcu_bc.ini

浏览器访问 info.php 所加载的配置文件路径:

PHP Version 7.4.20
System	Linux debian-buster 4.19.0-17-amd64 #1 SMP Debian 4.19.194-2 (2021-06-21) x86_64
Build Date	Jun 4 2021 23:17:27
Server API	FPM/FastCGI
Virtual Directory Support	disabled
Configuration File (php.ini) Path	/etc/php/7.4/fpm
Loaded Configuration File	/etc/php/7.4/fpm/php.ini
Scan this dir for additional .ini files	/etc/php/7.4/fpm/conf.d

从中看出,我们无论如何开启扩展,但是却都没有开启命令模式的扩展!需要开启命令模式的扩展,就需要修改命令模式的配置文件:

vi /etc/php/7.4/cli/php.ini

加入内容:apc.enable_cli=1

重启 php-fpm 后,再次使用命令 php -i ,命令模式的 APCu Support => Enabled 已经开启了。

APCu Support => Enabled
Version => 5.1.20
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Serialization Support => php, igbinary
Build Date => Mar  4 2021 15:44:06

定时任务终于运行正常了!!!

可是之前Debian10.9或NextCloud21.0.2也是没有特地开启修改/etc/php/7.4/cli/php.ini,为什么之前可以正常执行定时任务?

也许有些问题我们是无法找到答案的…。

兄弟 HL-5445D Error+Toner 灯常亮无法清零

兄弟 brother HL-5445D Error + Toner 灯常亮,正常情况下清零即可正常工作,可是无论如何操作清零均无效!该机型更换粉盒或加粉后清零,我通常使用以下操作,即可顺利完成:

  • 打开前盖,关闭电源开关
  • 按住GO键开机,开机三四秒钟以后松开GO键
  • 连续按GO键两下,除了READY不亮外,其余指示灯都亮
  • 连续按GO键五下,指示灯全亮,合上前盖,粉盒清零成功。

可是这次遇到的问题,我按照以上的清零方法,Error + Toner 指示灯依旧常亮,打印机无法工作。

然后尝试粉盒复位齿轮清零,依旧无济于事。

登录本站贡献者可阅读

在Hyper-V上安装Debian10 buster的磁盘分区

不管是在Hyper-V或实体机上安装Debian10,在分区的时候,一般都可以直接使用自动分区即可,如下图:

1、选择 Guided – use entire disk and set up LVM ,点击 Continue

Guided – use entire disk and set up LVM

2、选择 All files in one partition (recommended for new users) ,点击 Continue

All files in one partition (recommended for new users)

然后 一路 Yes ,Continue

最后 Finish partitioning and write changes to disk ,点击 Continue 。

自动分区默认的分区参数

我希望把swap分区改为2GB,还有将ESP分区改为128MB,貌似右点麻烦。

于是还是自己手动分区比较合适自己的需求。

Debian10 buster 手动分区

下面是 Debian10 buster 图形化手动分区的过程

一、建立 ESP 与 boot 分区

选择 Manual ,点击 Continue

Manual

选择 全新未分区的磁盘,点击 Continue

选择没有分区的磁盘

选择 Yes ,点击 Continue

创建分区表

Create new empty partition table

选择 30GB 磁盘,点击 Continue

创建分区

为磁盘进行分区

1、创建 ESP 分区

创建一个新分区

Create a new partition

设置 ESP 分区大小( ESP 分区我这设置为 128MB 即可

设置ESP分区大小为128MB

从可用空间的起始处,建立ESP分区

选择 Beginning ,点击 Continue

从可用空间的起始,建立ESP分区

设置为 EFI System Partition (Name这里根据需要命名,注意 Bootable flag 这里默认值为on),点击 Continue

use as: EFI System Partition

2、创建 boot 分区

继续选择剩余的可用空间,点击 Continue

继续从可用空间上分区

设置 boot 分区大小( boot 分区我这设置为 512MB 即可

boot分区容量 512MB

设置为 Ext3 文件系统(Name 可根据需要命名,由于测试手动分区时截图为 Ext4 文件系统,懒得改,实际使用也没问题,但是 boot 分区还是推荐使用 Ext3 文件系统

Mount point : /boot

完成以上 2 个关键参数设置后

选择 Done setting up the partition ,点击 Continue

Use as: Ext3

ESP 与 boot 分区 创建完成。

二、建立 LVM 分区

我们需要进入 Configure the Logical Volume Manager,然后进一步操作建立VG与LV

选择 Configure the Logical Volume Manager ,点击 Continue

配置 LVM — Configure the Logical Volume Manager

选择 Yes ,点击 Continue

configure LVM

1、创建VG

选择 Create volume group ,点击 Continue

创建VG — Create volume group

命名 VG(不建议使用短杠 - 符号,建议 debian_lvm 这样命名),点击 Continue

设置VG名字

为刚才建立的 VG 选择设备(我们将剩余的所有空间包含到VG),点击 Continue

勾选剩余所有可用空间绑定到刚才建立的VG

选择 Yes ,点击 Continue (更新分区表

更新分区表

VG 创建完成。

2、创建 Swap 分区与 / 根分区

创建 Swap 分区

在VG创建完成的基础上,创建LV

选择 Create logical volume,点击 Continue

创建LV — Create logical volume

选择需要在哪个VG上创建 LV – Swap 分区(当然这里只有一个VG可选

选择需要在哪个VG上创建LV

创建 Swap 分区。

命名Swap分区

据说现在不用创建Swap分区了,因为现在的内存都足够大了,没有必要使用Swap分区。可是我觉得还是设置一个Swap分区,2GB的Swap意思一下即可。

设置Swap分区容量为2GB

Swap 分区创建完成。

创建根分区 /

创建 LV 过程与以上 Swap 部分相同

命名根分区,点击 Continue

命名根分区 root

将剩余的所有剩余空间作为根分区使用

根分区容量设置

选择 Finish ,点击 Continue

完成LVM分区

注意!此时的根分区没有定义文件系统以及挂载点

选择 刚才创建的LV root根分区,点击 Continue

注意根分区没有定义文件系统

设置根分区使用的文件系统为 xfs ,挂载点为 /

文件系统使用xfs,挂载为根分区 /

LVM 分区至此完成。

意味着我们手动分区到此已经完成了。

选择 Finish partitionting and write changes to disk ,点击 Continue

Finish partitionting and write changes to disk

之后的系统安装步骤在这就不再记录了。

这是我最小化安装(不带桌面环境) Debian10 的分区方案,装好 Debian 后占用的空间非常小(只有1.6G)。作为 Web 服务器使用,安装Debian的磁盘,30GB足够了,Hyper-V建立一个动态磁盘VHDX放在SSD上运行Debian,速度非常满意。

在手动进行分区的时候,遇到了许多坑(由于不了解LVM分区的套路),以上是过程的截图,实际折腾到最后,我最终使用的分区如下图:

最终我使用的分区参数

以后有空再记录在 Debian10 上添加新磁盘,并使用 PuTTy 命令行操作,建立与挂载LVM分区。

虽然是在Hyper-V上运行Debian10,这个分区步骤一样可以完美适用在实体机上分区。

为BuddyPress里的bbPress版块话题添加阅读量计数

阅读(浏览、点击、查看)文章或话题计数,还是挺不错的,为什么WordPress默认不集成此功能呢。博客文章的阅读量计数我并没有安装插件来实现此功能,仅在主题functions.php增加两个网上流行的阅读量计数函数,非常不错!在用了几年之后,想在BuddyPress里的bbPress版块话题上也增加阅读量计数,可是在BuddyPress群组的bbPress版块里的话题要实现此阅读量计数,我遇到了一些麻烦!下面慢慢记录以下这些奇奇怪怪兜兜转转的问题吧…

博客文章添加阅读量计数功能

简单、稳定、实用的阅读量计数函数:(添加到主题 functions.php

function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
			$count++;
        update_post_meta($postID, $count_key, $count);
	}
}
function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return " 0 ";
    }
    return $count;
}

然后在我们需要设置阅读量计数的模板添加以下代码:(统计博客文章的阅读计数,添加到 single.php

			/* Start the Loop */
			while ( have_posts() ) :
				the_post();
				// 设置阅读量计数
				setPostViews(get_the_ID());
			
				get_template_part( 'template-parts/post/content', get_post_format() );

最后在我们需要显示阅读量计数的模板添加以下代码:

我需要在 content-excerpt.php content.php 显示阅读量计数

		if ( 'post' === get_post_type() ) {
			echo '<div class="entry-meta">';
			if ( is_single() ) {
				twentyseventeen_posted_on();
			} else {
				echo twentyseventeen_time_link();
				twentyseventeen_edit_link();
			};
			
			//显示阅读量次数
			echo '<span class="postviews-icon">'; echo getPostViews(get_the_ID()); echo '</span>';
			
			echo '</div><!-- .entry-meta -->';

博客文章的阅读量计数就这么简单、稳定、实用。至于设置cookie刷新不累加等功能,反正我测试了百度找的一些常规代码,都以失败告终,放弃为阅读量计数设置cookie这个我认为不现实的功能!

BuddyPress里的bbPress话题添加阅读量计数

我们依旧使用在主题 functions.php 上添加的阅读量计数函数( setPostViews()getPostViews()

首先设置阅读量计数:( 统计话题阅读量,添加到 content-single-topic.php

<div id="bbpress-forums" class="bbpress-wrapper">
	
	<?php //设置阅读量计数
	setPostViews(bbp_get_topic_id()); ?>

	<?php bbp_breadcrumb(); ?>

	<?php do_action( 'bbp_template_before_single_topic' ); ?>

	<?php if ( post_password_required() ) : ?>

然后显示阅读量计数:

我需要在话题列表( loop-single-topic.php

			<?php do_action( 'bbp_theme_before_topic_started_by' ); ?>

			<span class="bbp-topic-started-by"><?php printf( esc_html__( 'Started by: %1$s', 'bbpress' ), bbp_get_topic_author_link( array( 'size' => '14' ) ) ); ?></span>
			
			<?php if ( bbp_is_single_forum() || ( bbp_get_topic_forum_id() == bbp_get_forum_id() ) ) : ?>
			<?php //显示阅读量计数
			echo '<span class="postviews-icon">'; echo getPostViews(bbp_get_topic_id()); echo '</span>'; ?>
			<?php endif; ?>
			
			<?php do_action( 'bbp_theme_after_topic_started_by' ); ?>

			<?php if ( !bbp_is_single_forum() || ( bbp_get_topic_forum_id() !== bbp_get_forum_id() ) ) : ?>

				<?php do_action( 'bbp_theme_before_topic_started_in' ); ?>

				<span class="bbp-topic-started-in"><?php printf( esc_html__( 'in: %1$s', 'bbpress' ), '<a href="' . bbp_get_forum_permalink( bbp_get_topic_forum_id() ) . '">' . bbp_get_forum_title( bbp_get_topic_forum_id() ) . '</a>' ); ?></span>
				
				<?php //显示阅读计数
				echo '<span class="postviews-icon">'; echo getPostViews(bbp_get_topic_id()); echo '</span>'; ?>
			
				<?php do_action( 'bbp_theme_after_topic_started_in' ); ?>

话题帖子内容( loop-single-reply.php )显示阅读计数

				<?php if ( bbp_get_topic_id() == bbp_get_reply_id() ) : ?>
					<?php //显示阅读计数
					echo '<span class="postviews-icon">'; echo getPostViews(bbp_get_topic_id()); echo '&nbsp;</span>'; ?>
				<?php endif; ?>
				
				<?php do_action( 'bbp_theme_before_topic_favorites_action' ); ?>
				<?php
				//收藏
				bbp_topic_favorite_link(); ?>
				<?php do_action( 'bbp_theme_after_topic_favorites_action' ); ?>
				
				<?php do_action( 'bbp_theme_before_topic_subscription_action' ); ?>
				<?php 
				//订阅
				bbp_topic_subscription_link(); ?>
				<?php do_action( 'bbp_theme_after_topic_subscription_action' ); ?>

好了,现在BuddyPress里的bbPress话题添加阅读量计数已经布置完成。

可是,布置完成后测试发现了一些奇怪的问题…

BuddyPress群组的bbPress话题添加阅读量计数遇到的问题及解决问题

遇到的奇怪问题如下:

  • 独立的bbPress论坛版块里的话题阅读量计数准确无误。
  • 部分BuddyPress群组里论坛版块的话题阅读量计数准确无误
  • 部分BuddyPress群组里论坛版块的话题阅读量计数每点击(阅读)1次,阅读量计数为2。

是不是有点奇怪?

面对这样的问题,如何分析或该从哪里着手解决?

这个问题实际上困扰了我2天多的时间,最后才找到问题的根源,最终才完美解决。

分析问题的过程

  • 首先怀疑的是由于在bbPress论坛设置为BuddyPress设置了——使用–父级–包含群组论坛

因为我在本地的测试环境里已有一个先前已经创建好的群组,bbPress论坛设置为BuddyPress设置了——使用–无父级–包含群组论坛(也仅有一个群组,为此造成了误判),该群组版块里的话题阅读量计数是准确无误的。

于是考虑到正式网站上的部分BuddyPress群组里论坛版块的话题阅读量计数准确无误的,是先前创建的群组——使用–无父级–包含群组论坛,部分BuddyPress群组里论坛版块的话题阅读量计数每点击(阅读)1次,阅读量计数为2的,肯定是——使用–父级–包含群组论坛所导致的!

然后马上在本地环境设置bbPress论坛——使用–父级–包含群组论坛

果然马上见效!只要在bbPress论坛设置了——使用–父级–包含群组论坛,之后创建的群组版块里的话题阅读量计数每点击(阅读)1次,阅读量计数为2。再次印证了问题绝对是出在这!只要在bbPress论坛这里更改了设置——使用–父级–包含群组论坛,即使把bbPress论坛设置改回原来的默认设置——使用–无父级–包含群组论坛,也无法改变之后在BuddyPress创建的群组论坛版块话题阅读量计数每点击(阅读)1次,阅读量计数为2的问题!

就在这个逻辑下折腾了一天的时间,我以为是bbPress论坛设置不生效,或已经生效了,数据库依旧还保持原有设置没有改变….,我甚至在本地环境安装了 php myadmin 进入数据库一一对比正式网站上面正常的群组的数据,没有发现任何把柄!

最终心力憔悴,一无所获!难道数据库还有隐藏在深处的某些正常情况下无法读取的数据?😂

  • 然后分析,难道是阅读量计数函数不兼容BuddyPress里的bbPress

点击一次,阅读量记录却是2次?头疼!无意中发现在IE11浏览器下阅读量计数却是准确无误的!这导致问题更是错综复杂了!!头晕!越来越觉得,这个问题我根本就没有能力去解决,算了吧,别为难自己,该放弃的时候还是得放弃…!

  • 然后怀疑是bbPress对接BuddyPress的模板或函数上面的问题

如果是这个层面的问题,大概也没有什么能力可以解决了,完全只能靠懵!

在执着与放弃的边缘上徘徊

IE11浏览器却能正确无误的计数,Chrome与Edge都是点击1次,阅读量计数为2 … 这个问题一直在脑海里游来游去,愣是无法把它甩开。

累…,一无所获….,憔悴、失望、鼠标在漫无目的左移右点…..

呃 !!???

世界上最远的距离不是生与死的距离,而是,明明就在眼前,我却没有发现你!

可是,现在,我已经发现了你,就在我的眼前!

BuddyPress群组里论坛版块的话题阅读量计数准确无误的,都是有封面图片的!

BuddyPress群组里论坛版块的话题阅读量计数每点击(阅读)1次,阅读量计数为2的,都是没有封面图片的!

终于…!我终于发现了你,就站在我的面前!🙃 完美…!

过程比记录的更错综复杂,语文实在不行,许多事情实在是无法用文字还原。

生命在于折腾

一直都没有停下来,太多的细节没有时间去记录。也许不应该在无意义的折腾上花太多的时间,可是就如上瘾般的无法把思绪停下来。

今年从有折腾过程记录的开始吧。

折腾 NextCloud 数据备份

3月中旬

使用NextCloud已经3年多了,大概是从2018年开始,最开始的NextCloud12,到今年3月份正在使用的NextCloud20。网上很多比较热门的话题是折腾家用NAS,目前NAS对于我没用,有NextCloud就已经够用了。

经过从NextCloud12到NextCloud20这么多个版本的使用下来,NextCloud真的挺好的,我已决定长期使用NextCloud。最主要需要解决的问题是数据的备份,手动备份那是不现实的做法。曾经尝试使用微软的存储池软Raid1(双硬盘镜像),出过一次硬盘故障,重建数据总是失败。具体过程也忘了,总之非常折腾人且具有太多的不确定因素,可能由于我自己的原因。

反正我是不会使用Raid来确保硬盘损坏的时候,来保证数据不会丢失,个人觉得对于我的家庭普通电脑硬件设备来说Raid并不可靠。

所以必需考虑其他方法,那就是这次所折腾的rsync定时自动备份数据

我的 NextCloud 本地私有云备份方案 – SGTfz

折腾 从 LEDE17 到 OpenWrt19

3月下旬

LEDE 非常好用,已经用了很多个年头了。为何要用软路由?而且还是在Hyper-V上运行的软路由?在后面说。

用了太久的系统,如果不升级,总是感觉哪里不够完善的。其中肯定有了新的更好的东西在扰乱我们的思绪,确实OpenWrt早已与LEDE合并了,不但已经推出了新版本OpenWrt18,就连OpenWrt21都已经准备发布了,升级到OpenWrt19已经迫不及待了。

经过折腾,OpenWrt19的测试与升级都是那么的顺利完成了。

使用软路由的原因很简单,因为贵的高端路由买不起,便宜的普通路由没有我想要的,只需普通路由干AP的事情即可,并且NextCloud本来就需要一台电脑硬件,于是干脆将所有东西都整合在一台电脑设备上。

折腾 从 Windows server 2012 R2 到 Windows server 2019

3月底

简单的就是安装一个操作系统而已,剩下的都是导入虚拟机的操作,实际上需要一个 Hyper-V server 就已经够用了,而且我还真有过这个想法。可是根本安排不上时间,还是以后再说吧。

折腾 优化 NextCloud 缩略图

4月初

NextCloud 默认是在浏览图片目录的时候,才即时生成缩略图的。这样导致在浏览图片目录的时候,服务器的CPU以及磁盘负荷过高导致缓慢卡顿。

因此我们需要把已上传的图片,按照需要提前自动把所有的缩略图生成,这样就可以大大的提升浏览速度!

关于 NextCloud 20 生成缩略图的折腾 – SGTfz

折腾 优化 服务器环境与升级 NextCloud

4月上旬

本来想实现开启 HTTP/2 ,可是在折腾的过程中,发现情况并没有预期的简单。由于之前使用的Apache2.4.6不支持 HTTP/2,所以必须升级Apache,并且还要更改Apache的工作方式。面临一大堆需要改动的问题,确实花了不少的时间,详细过程如下:

计划升级到 NextCloud 21 – 版块 – BuddyPress 群组 – SGTfz

折腾 实体机运行 OpenWrt 或 NextCloud

4月中旬

因为没有实际的对比,一直都在玩虚的,心里总觉得不够踏实。实体机运行 OpenWrt 就提上了日程,接着一有空余的时间与空间就马上进入状态。经过了2、3天的折腾测试与使用下来,实体机直装OpenWrt,安装在GPT硬盘上以UEFI方式启动的OpenWrt,用了一天一晚,对比虚拟机运行的OpenWrt实际上我没有用出任何差别!也许对于我的家庭网络,虚拟机运行的OpenWrt就已经非常够用了,何必使用实体机直装呢?浪费电费。实际上我并没有专业的测试软件或硬件来测试OpenWrt的性能,仅凭实际使用感受。

唯一的差别是:实体机直装的OpenWrt有许多Bug,例如日志里无法记录DHCP分配IP的日志,例如OpenWrt无法使用拨号获得的DNS服务器地址,导致需要自己填写DNS服务器地址才能正常解析域名。其他更多的可能我还没有发现,就已经放弃了!

按照常理来说,实体机直装应该更好,可是我这一次实际测试体验却非常的失望,简直失望透顶了。

唯一的收获是:实体机 refind 配置稍有不同

# refind.conf
# Configuration file for the rEFInd boot menu
# timeout 需要设置等待1秒启动,如果实体机不接键盘
# timeout -1 会一直停留在启动界面,一直不启动 OpenWRT
# timeout -1
timeout 1
# 不显示图形启动界面
textonly
scan_all_linux_kernels false
menuentry OpenWRT {
    icon EFI/boot/icons/os_linux.png
    loader EFI/boot/vmlinuz
    options "root=PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd"
}

既然实体机运行OpenWrt给我这样失落的感受,因此暂时不想再折腾实体机运行NextCloud了。

折腾 Ubuntu 与 Debian

4月下旬

在这段时间的折腾中,不知在哪一个不经意间发现了一个问题。据说CentOS已死,我还是近段时间才知道的哟。

不知道在搜索什么资料的时候,发现之前一直在折腾的CentOS7系统,据说支持到2024年就结束支持。CentOS从此不再是以前的CentOS了,现在是CentOS stream,据说已经变质了。

还有就是 MySQL,据说也是变质了。

那能如何?

换就是了!地球上缺少了CentOS与MySQL又不会停转。

所以,折腾还在继续。

Debian 一直无法正常在 Hyper-V 上正常运行,在准备放弃 Debian 右转 Ubuntu 的时候,才发现原来不安装桌面环境,仅最小化安装 Debian 在Hyper-V上运行得妥妥的!

Ubuntu 实际上同时与 Debian 一起测试的,在虚拟机测试安装服务器版本,然后再安装 Gnome 桌面环境,运行妥妥的。可是有一个晚上我把Ubuntu装到我那台09年的古董笔记本上,远程桌面一直在自动休眠,NND,根本不让人用。后来装到一台H61平台上,也是一直在休眠,实在是无法使用。不过后来找到了解决这个不断自动休眠的方法。这也太离谱了,确实有点无法接受,所以放弃Ubuntu了。

折腾 从 CentOS7 迁移到 Debian10

4月底5月初

既然CentOS已死,迁移是必然的事情,迟早而已。

也许对于个人而言,实际上使用CentOS Stream应该还是没问题的吧?但何必呢,而且在这几天的测试运行的Debian,感受甚至比CentOS舒服,所以干脆趁热打铁,把环境迁移了。

那么这个五一大长假,对于此次迁移实在是恰到好处,刚刚好完成任务。

迁移过程虽然遇到许多问题,耗费了许多时间,但还是已经顺利完美的迁移完成,现在我的 NextCloud 已经搬进了新家,是时候告别CentOS7 了,ヾ( ̄▽ ̄)Bye~Bye~

实际上还有更多没有记录或遗漏的太多了,这只是一个简单的汇总…..

生命在于折腾,时间允许,我们再继续折腾…..