从 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

修改Debian软件源为国内清华镜像站,去除Proxmox企业源,修改CT Templates模板源

   # 用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

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

计划从Hyper-V迁移到Proxmox VE,又是一个漫长的过程

Hyper-V用着已经非常的稳定了,为何还要继续折腾Proxmox VE?

不知道,总之不折腾,心里不舒服。

前段时间刚从CentOS迁移到Debian

不久之前刚刚换了一台主机,数据刚迁移完毕

刚不久才完善Lsyncd实时同步

又发现了Proxmox VE,据说可玩性更高。

明知道下载下来安装折腾的话,肯定需要花不少的时间,但还是没有忍住。一发不可收拾的,连续折腾了几天,目前还是没有找到清晰的思路。

确实发现了可玩性确实更高:

硬件直通香不香?

反正独显直通花了我的不少时间最后还是失败了,网卡直通成功了,但暂时没有部署到OpenWrt上。

LXC容器我觉得真的香!

还有更多的功能,确实没有更多的时间去折腾…

反观Hyper-V简直就是垃圾?是因为太简单了?不存在可玩性可言,还是其他原因?

对比Proxmox VE与Hyper-V,同样虚拟Windows系统,得到的结果是Hyper-V虚拟的Windows性能更好!无论是CPU、内存、磁盘等性能都是Hyper-V虚拟的Windows完胜。但Proxmox VE虚拟的Windows也不至于太差哟!

所以我纠结了,因为主要目的还是Linux

Linux在Proxmox VE上的话,就不是虚拟机了,直接上LXC简直如同上了物理机!

结论是:必须折腾 Proxmox VE

努力去了解并熟悉Proxmox VE

这几天放缓了折腾的脚步,因为遇到太多的问题没有弄清楚的

存储类型:我到底该怎么选?

文件级存储、块级存储

文件级存储:如果我使用文件级存储,将会以目录方式挂载磁盘。

块级存储:如果我使用块级存储,将会以LVM-Thin的方式挂载磁盘。目前我就愣是没有搞清楚这种存储类型,看着就头晕,看官方文档也头晕,资料还是不够详细,还是搞不明白。

还有更重要的是如何备份数据?

还是用以前的方式使用Lsyncd实时同步到不同磁盘?

或者在PVE上有更好的方法?这得熟悉PVE才能去发现呀

目前所需的功能并不多

1、OpenWrt(直接用虚拟机直通网卡部署)

  • LXC虽然很好,我也尝试了可以正常启动,但还有更多的问题,所以放弃LXC部署OpenWrt
  • 虚拟机+网卡直通,我暂时没有折腾,但是硬件直通我已经初步掌握了。

2、NextCloud 与 OnlyOffice (直接用LXC部署)

  • 准备两条LXC容器,一台部署NextCloud,另一台部署OnlyOffice。
  • 至于Docker实际上我一直以来都不懂怎么搞,貌似PVE上用LXC已经够了。

所以貌似我的需求很简单,也并不需要如何熟悉PVE呀!

要熟悉到什么程度才算熟悉?只需要掌握目前所需要的就够了吧?有些东西也许永远也熟悉不了。

好吧,接下来的计划是:

  • 确定存储与备份的方案
  • 整理安装PVE的过程
  • PVE的基本配置
  • 部署OpenWrt
  • 部署LXC容器
  • 迁移数据
  • 事后总结

Debian Linux 基础配置及常用命令

安装好debian10/11后,我们需要做的一些基本配置后,用起来会变得更加得心应手。常用命令实际上官方手册是最好的参考手册,我这里只是总结了自己常用的。

Debian官方参考手册

https://www.debian.org/doc/manuals/debian-reference/

Debian系统基本的操作命令

切换到 root shell 提示符

# 在任意用户的 shell 提示符下输入 su -l 或 su -
su -l
su -
# 这不会保存当前用户的环境设定。

# 在任意用户的 shell 提示符下输入su root 或 su
su root
su
# 这会保存当前用户的一些环境设定。

退出命令行提示符

同时按 Ctrl + d 键,或键入 exit 退出命令行。

关闭或重启系统

在普通多用户模式模式下,可以使用命令行关闭系统 shutdown -h now

# 立即关机
shutdown -h now

# 5分钟后关机
shutdown -h +5

# 重新启动
shutdown -r now

在单用户模式下,可以使用命令行关闭系统 poweroff -i -f

我一直都是使用 poweroff

恢复一个正常的控制台

当做了一些滑稽的事(例如“cat二进制文件”)后,屏幕会发狂,你可以在命令行输入 reset 。你可能无法在屏幕上看到你输入的命令。你也可以输入 clear 来清屏。

递归创建目录

mkdir 命令的基本格式为:

mkdir [-mp] 目录名

  • -m 选项用于手动配置所创建目录的权限,而不再使用默认权限
  • -p 选项递归创建所有目录

例如创建 /home/test/abc/ 在默认情况下,需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动为你创建各层级目录。

目录或文件的权限理解与配置

拥有者(Owner)、拥有者所在的组(Group)、其他用户(Other)的权限表示如下:

拥有者、组、其他用户的权限表示关系:
   Owner   Group     Other
     |       |         |
   拥有者  拥有者组  其他用户
    权限    权限      权限
     |       |         |
    rwx     rwx       rwx

起始字符:d 表示文件夹,- 表示文件

  • 表示一个文件夹的权限例子:drwxrwxrwx
  • 表示一个文件的权限例子:-rwxrwxrwx

转换为 数字 表示权限其中对应的关系:

  • r 可读 = 4w 可写 = 2x 可执行 = 1rwx 之和 = 7
  • - 无权 = 0
用不同方式表示权限其中对应的关系:
     rwx     r-x     r-x
      |       |       |
    4+2+1   4+0+1   4+0+1
      |       |       |
      7       5       5

目录或文件的拥有者配置

# 例1、将/tmp/目录下的test.conf文件修改为root所拥有。
# root(拥有者):root(组) 
chown root:root /tmp/test.conf

# 例2、将/tmp目录包括目录下的所有文件改为root所拥有
chown -R root:root /tmp

目录或文件的权限配置

详细权限有点复杂,我这只记录的常用的权限修改方法

语法为:chmod [-cfvR] file

我们看下面文件的权限示例:
root@debian11-ts2:~/test# ls -l
total 12
-rw------- 1 root root 8 Oct 16 21:57 test-2.txt
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt

# 此test-2.txt文件拥有者为root,用户组为root。
# rwx权限属性为rw-(6) ---(0) ---(0),表示只有root用户可以r=4读,w=2写,但x=0不可以执行。其他用户都不能读、写、执行。
-rw------- 1 root root 8 Oct 16 21:57 test-2.txt

# 此test-3.txt文件拥有者为root,用户组为root。
# rwx权限属性为rw-(6) r--(4) r--(4),表示root用户可以r=4读,w=2写,但x=0不可以执行。
# root用户组可以r=4读,但w=0不可写,x=0不可执行。其他用户可以r=4读,但w=0不可写,x=0不可执行。
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt

# 此test.txt文件拥有者为root,用户组为root。
# rwx权限属性为rwx(7) rwx(7) rwx(7),表示root用户与root用户组以及其他用户都能 r=4读,w=2写,x=1执行
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt

下面是修改 test-2.txt 文件权限的例子:

root@debian11-ts2:~/test# chmod 605 test-2.txt
root@debian11-ts2:~/test# ls -l
total 12
-rw----r-x 1 root root 8 Oct 16 21:57 test-2.txt
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt
root@debian11-ts2:~/test# chmod 611 test-2.txt
root@debian11-ts2:~/test# ls -l
total 12
-rw---x--x 1 root root 8 Oct 16 21:57 test-2.txt
-rw-r--r-- 1 root root 8 Oct 16 21:57 test-3.txt
-rwxrwxrwx 1 root root 8 Oct 16 20:57 test.txt

修改目录下的所有文件与子目录权限例子如下:

# 以递归的方式逐个变更
root@debian11-ts2:~/test# chmod -R 600 /root/test
root@debian11-ts2:~/test# ls -l
total 12
-rw------- 1 root root 8 Oct 16 21:57 test-2.txt
-rw------- 1 root root 8 Oct 16 21:57 test-3.txt
-rw------- 1 root root 8 Oct 16 20:57 test.txt

查看目录或文件所占空间

使用 du 命令,不加上 -s 会递归列出所有子目录,加上-h 参数更能直观理解占用的容量单位,下面示例:

root@Debian11-Cloud:~# du -sh /site-data/www/
430G    /site-data/www/
root@Debian11-Cloud:~# du -sh /site-data/www/*
429G    /site-data/www/nextcloud
126M    /site-data/www/nextcloud-22.2.0.tar.bz2
4.0K    /site-data/www/nextcloud-22.2.0.tar.bz2.sha256sum
125M    /site-data/www/nextcloud-22.2.2.tar.bz2
4.0K    /site-data/www/nextcloud-22.2.2.tar.bz2.sha256sum
443M    /site-data/www/nextcloud-old
235M    /site-data/www/wordpress

系统设置

在最小化安装debian之后,需要根据自己的使用习惯进行一些配置。

调整vi编辑器

调整vi编辑器配置文件:

# 切换至root身份
su -
# 使用nano编辑器,编辑vi配置文件
nano /etc/vim/vimrc.tiny
# 修改为以下的配置内容
" set compatible
set nocompatible
set backspace=2

修改完成后,按 Ctrl + x 然后按 y 再按 回车 保存配置即可。

如果vi或nano编辑器显示中文为乱码,cat命令却可以正常显示中文。

发现此问题是在 PVE 上的建立的 CT 容器里的 debian 上

我们可以使用 locale 命令检查区域语言配置

# LXC容器里安装的debian区域语言配置
root@debian11-ts2:~# locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

# 我自己手动安装的debian系统区域语言配置
sgtfz@debian-buster:/$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

解决vi或nano编辑器显示中文乱码问题

# 首先执行
export LC_ALL=en_US.UTF-8
# 然后执行
dpkg-reconfigure locales

# 然后选择语言,选中我们不需要的语言按空格取消*号
# 选中en_US.UTF-8 UTF-8,按空格选择,按回车确认
[*] en_US.UTF-8 UTF-8

# 系统环境的默认语言环境 选中en_US.UTF-8,按回车确认
# Default locale for the system environment:
en_US.UTF-8

# 最后重启系统生效

完成配置默认语言环境后,vi或nano编辑器即可正常显示中文了。vi编辑器可以输入中文内容,但nano编辑器貌似不可以哟。

查看时区与时间

必须检查并修改为正确的时区,时间才准确。

# 查看时区与时间
timedatectl
# 修改时区为亚洲上海
timedatectl set-timezone Asia/Shanghai
# 或列出可用时区(可供修改时区作参考)
timedatectl list-timezones

有颜色输出的命令

Debian普通用户登录命令提示符,命令的输出是带有颜色的,但是切换到root用户命令提示符却没有了颜色。我们切换到root用户命令提示符,修改root用户目录下的.bashrc文件

vi .bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# 去掉下面五行的注释
# export LS_OPTIONS='--color=auto'
# eval "$(dircolors)"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'

# 如果还需要`用户名@主机名`显示颜色,请加上以下这行。
# 此行从普通用户复制过来的,只修改了`[\033[01;32m\]改为[\033[04;32m\]`增加下横线。
PS1='${debian_chroot:+($debian_chroot)}\[\033[04;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

保存配置后执行命令:source .bashrc 使之生效。

Shell 命令历史记录时间日期

我们切换到root用户命令提示符,修改root用户目录下的.bashrc文件

vi .bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=auto'
# 增加 export HISTTIMEFORMAT=" %F %T " 并保存
export HISTTIMEFORMAT=" %F %T "
eval "$(dircolors)"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

保存配置后执行命令:source .bashrc 使之生效。

然后键入命令 history 就能查看到有时间日期记录的命令历史了

设置静态IP地址

#编辑网卡配置文件
vi /etc/network/interfaces

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.121
netmask 255.255.255.0
gateway 192.168.1.1

创建用户及配置权限

adduser xxx 会有向导一步一步的创建用户操作,要求您为新用户分配和确认密码。然后,系统会要求您输入有关新用户的任何其他信息。这是完全可选的,可以按 ENTER 跳过。示例如下:

root@debian11-ts2:~# 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

用户与用户组

# 先看懂 Linux 用户与用户组的表示方式
# 冒号左边是用户 : 冒号右边是用户组
     用户 :  组
      |      |
    root : root

添加用户到 XXX 组

www-data 用户添加到 redis

  • usermod -aG redis www-data

检查用户 www-data 是否已添加到 redis

root@Debian11:~# groups www-data
www-data : www-data redis
  • 冒号 “:” 右边 www-data redis 已有 redis 组
  • 说明已经将 www-data 用户添加到 redis 组

添加用户到 sudo 组 (可选)

usermod -aG sudo xxxxxx 用户,添加到 sudo

最后还要确认 /etc/sudoers

vi /etc/sudoers

# 若不存在以下内容,则添加
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

仅授予普通用户有限的权限(仅关机权限),前提不要将用户添加到sudo组!

# 编辑权限
visudo

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

检查用户是否具有sudo权限

sudo -l -U <UserName>

删除用户及移除权限

  • deluser xxx 删除 xxx 用户本身,而不删除任何他们的文件
  • deluser --remove-home xxx 删除 xxx 用户并且删除用户的主目录

移除用户的 sudo 权限

# 首先检查用户是否具有sudo权限
root@debian-buster:~# sudo -l -U sgtfz
Matching Defaults entries for sgtfz on debian-buster:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User sgtfz may run the following commands on debian-buster:
    (ALL : ALL) ALL

# 检查用户id
root@debian-buster:~# id sgtfz
uid=1000(sgtfz) gid=1000(sgtfz) groups=1000(sgtfz),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev)

# 移除用户sudo权限
root@debian-buster:~# gpasswd -d sgtfz sudo
Removing user sgtfz from group sudo

# 再次检查用户是否拥有sudo权限
root@debian-buster:~# sudo -l -U sgtfz
User sgtfz is not allowed to run sudo on debian-buster.

# 再次检查用户id
root@debian-buster:~# id sgtfz
uid=1000(sgtfz) gid=1000(sgtfz) groups=1000(sgtfz),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

允许root用户远程ssh登录

有时为了方便编辑一些文件,使用WinSCP登录修改,需要以root用户登录。我们需要允许root用户ssh登录,如下配置即可:

# 编辑配置文件
vi /etc/ssh/sshd_config
# 增加此行配置 PermitRootLogin yes ,或检查去掉这行配置的注释。
PermitRootLogin yes

# 然后重启 ssh 生效
/etc/init.d/ssh restart

基础软件包管理操作

在 Debian 系统中有许多基于 APT 的软件包管理工具可以在 Debian 系统上进行基于仓库的软件包管理操作。我常用的操作

查看系统版本

  • cat /etc/os-release # 查看 Debian 系统大版本号
  • cat /etc/debian_version # 查看 Debian 系统小版本号
  • uname -srm # 查看内核版本

安装软件

  • apt install xxx # 安装 xxx 软件包(以及依赖包)

列出软件

  • apt list xxx # 列出 xxx 软件包
  • apt list --installed # 显示已安装的软件包
  • apt show xxx # 显示 xxx 软件包的详细信息(版本号,安装大小,依赖关系…)
  • apt search regex(正则表达式) # 搜索匹配 regex 的软件包

更新软件

  • apt update # 检查已安装的软件包是否有更新(只检查,不更新)
    • apt list --upgradable # 列出可升级的软件包列表
  • apt upgrade # 更新升级(已安装的软件包)至最新版本
  • apt install --only-upgrade <package_name> # 更新升级(指定软件包)至最新版本
    • apt install --only-upgrade php-8.2* # 可以使用通配符 * ,仅更新升级 php8.2 相关的所有软件包
  • apt full-upgrade # 完全更新升级(已安装的软件包)至最新版本,必要时会移除其它的软件包
  • apt-mark hold <package_name> # 标记为保留不更新升级的软件包
    • apt-mark hold php* # 可以使用通配符 * ,标记保留所有 php 前缀相关的软件包不更新
  • apt-mark unhold <package_name> # 取消标记保留

删除软件

  • apt remove xxx # 移除 xxx 相关联的软件包,不会移除与之相关联的配置文件或数据文件,也不会移除依赖包。
  • apt --purge remove xxx # 移除 xxx 相关联的软件包,不保留配置文件,也不会移除依赖包。
  • apt -s remove xxx # 模拟卸载,不会真的卸载。
  • apt autoremove # 移除当前系统中的所有孤立的包,即不被任何包依赖的包。据说有点危险,但我卸载 libreoffice 时发现非常不干净,用过此命令,好用的很。

清理apt安装包

定期运行清理安装包,为磁盘腾出一些空间。

  • apt clean # 清理 /var/cache/apt/archives/ 目录下的所有 deb 安装包,推荐。
  • apt autoclean # 清理 /var/cache/apt/archives/ 目录下(已卸载的软件)的 deb 安装包。

更多的管理操作请访问Debian官方文档:

https://www.debian.org/doc/manuals/debian-reference/ch02.zh-cn.html#_basic_package_management_operations

最近的Windows10更新后共享打印机无法使用

这次的补丁代号是KB5005569/KB5005573/KB5005568/KB5005566/KB5005565。如果你的Windows10系统共享的打印机无法被局域网的其他电脑使用,检查一下是否安装了上述其中一个更新,把相关的更新补丁卸载后,重启电脑即可解决问题。

我这边由于两台电脑都是Windows10 LTSC版本的系统,同样是安装了KB5005568这个补丁,共享打印机可以正常使用。共享主机是Windows10 LTSC系统,局域网其他电脑有Windows7、Windows10 20H2等不同版本的系统,我已经遇到了共享打印机无法使用的情况,在共享打印机的主机上卸载了相关的更新补丁后,即可正常使用共享打印机了。


如何禁用自动更新?

我只针对Windows10 LTSC版本的做了如下的配置,到底效果如何,只能用时间才能检验

通过组策略,禁止 Windows 10 自动更新

1、右键点击开始菜单,选择运行,然后输入 gpedit.msc ,点击 确定 。即可打开本地组策略编辑器。

2、依次点击 计算机配置 → 管理模板 → Windows组件 → Windows更新 → 配置自动更新 → 已禁用

gpedit.msc本地组策略编辑器

3、我们打开 设置 → 安全和更新

可以看到 Windows更新 下面一行红色文字:

*某些设置由你的组织来管理

表示组策略设置已生效。

设置Windows更新

往下还有一行

*你的组织已关闭自动更新

证明已关闭自动更新。

但如果你手动点击 检查更新,Windows依然会检查并下载安装更新哟!


如果是系统无法打开组策略编辑器,系统可能是 Windows 10 Home 家庭版

可以尝试更改序列号,更改为专业版,方法如下:

右键点击开始菜单 → 命令提示符(管理员)(A),或 Windows PowerShell(管理员)(A)

然后在命令行窗口依次输入如下命令:(期间提示点击确定即可)

slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms kms.03k.org
slmgr /ato

这是切换为KMS激活为专业版(我没有测试是否可行,谨慎操作,即使失败,只会导致现有的系统变成未激活状态?)

如果成功,那么就是专业版了,就可以安装上面禁止自动更新的方法来配置组策略。

Crontab 定时任务无法执行 service stop 或 systemctl top 命令

例如我写了一个脚本backup.sh,脚本内部包含有 service apache2 stopsystemctl start apache2rsyncmysqldump 等命令。手动执行 backup.sh 是能供正常执行里面的所有命令的,但使用定时任务 Crontab 执行脚本backup.shservicesystemctl,相关的这些命令均无法执行,其他命令例如 rsyncmysqldump 这些却都可以正常执行的奇怪问题。

最近偶尔查看了一下syslog日志发现我一直使用的备份脚本定时任务报错:CRON[44480]: (CRON) info (No MTA installed, discarding output)

可是定时备份却一直都能正常运行,这个脚本用了很长的时间,一直都没有注意日志的报错信息,因为无论是数据库,网站数据文件,都能正常的按照脚本命令进行备份,偶尔在今天才发现syslog日志这里的报错信息!

实际上我这几天折腾Lsyncd实时同步备份的时候就已经觉得有点怪怪的问题,因为我查看Lsyncd日志文件的时候,没有发现Lsyncd有停止与启动的日志记录。执行定时备份数据库与Rsync备份整站数据的时候,我先命令停止Lsyncd与apache2,再执行数据库与网站数据的备份。但是Lsyncd没有停止与启动的日志记录,难道这个问题不奇怪吗?明明是命令无法执行才会没有日志记录,所以最后终于发现确实是命令无法执行导致的。

解决方法:

Crontab定时任务执行的脚本里,需要停止的服务,必须写实际路径!

/etc/init.d/apache2 stop

即可正常执行。

知道即可,详细理由,以后有空再研究。

Debian10 UFW防火墙记录了一堆UFW BLOCK日志的原因

最近发现我在Debian10上安装的UFW防火墙日志文件 /var/log/ufw.log /var/log/syslog ,都是记录了一堆UFW BLOCK相关的日志。这些日志记录的两个IP地址都很有规律,其中一个IP是每隔1分钟,另一个IP是每个2分钟,目标地址都是DST=224.0.0.1

Oct  8 23:22:33 debian-buster kernel: [246921.975342] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:23:33 debian-buster kernel: [246981.995838] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:23:42 debian-buster kernel: [246990.780600] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:dc:fe:18:4b:36:aa:08:00 SRC=192.168.22.81 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
Oct  8 23:24:33 debian-buster kernel: [247042.006337] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:25:33 debian-buster kernel: [247102.026726] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:25:47 debian-buster kernel: [247116.224207] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:dc:fe:18:4b:36:aa:08:00 SRC=192.168.22.81 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
Oct  8 23:26:33 debian-buster kernel: [247162.047143] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:27:33 debian-buster kernel: [247222.057544] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:27:53 debian-buster kernel: [247241.667095] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:dc:fe:18:4b:36:aa:08:00 SRC=192.168.22.81 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
Oct  8 23:28:33 debian-buster kernel: [247282.077816] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2
Oct  8 23:29:33 debian-buster kernel: [247342.098132] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.22.82 DST=224.0.0.1 LEN=28 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2

实际上我知道这两个IP地址就是我的两个无线路由器,配置关闭了DHCP,接LAN口作为AP使用。这被Debian的UFW防火墙给拦截?而且这么频繁的写入日志也不是什么好事情,必须得解决!

因为这并不是网络攻击,源IP地址192.168.22.82与192.168.22.81是我的两个路由器的IP地址,目标地址224.0.0.1 这个地址是指所有主机的地址 (包括所有路由器地址)

找了一堆资料,通过各种测试,解决方法如下:

ufw allow in on eth0 to 224.0.0.1

/var/log/ufw.log/var/log/syslog 的世界终于清静了下来。

看看我的UFW防火墙状态吧

root@debian-buster:/var/log# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
224.0.0.1 on eth0          ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

如果下次我们配置了不同的路由,也许这个命令需要根据实际情况修改 in on eth0

注意我们的 /var/log/ufw.log 日志信息提示,IN=eth0DST=224.0.0.1

[UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:ac:cb:51:be:a0:10:08:00 SRC=192.168.33.12 DST=224.0.0.1

我们就可以灵活使用了。

最后我还发现:

/var/log/messages

/var/log/kern.log

这俩日志文件都是UFW BLOCK相关的信息与ufw.log记录的一模一样!幸运的是我已经发现了,要不然呢?实际上服务器工作一切正常,如此大量的日志记录,除了损耗一些CPU与内存,还有就是固态硬盘的写入量。能发现能解决这无疑是非常大快人心的事情😂

WordPress搬家与更换域名总结

昨天已经成功把公网上的WordPress所有内容备份,导入到家庭服务器上了。

公网上的内容依旧保持现有的状态,直到2023年的到期,可能我不会再续费了。至于公网上的内容,可能不一定去更新。因为我感觉很多的内容其实不想出现在公众视线,大部分还是自己折腾的自己看的内容,也没有必要出现在公众的视线。

因此,把所有的内容搬回来,安心在自家的家庭服务器上面折腾。

经过几次的WordPress搬家,我总结了一些WordPress搬家更换域名的经验记录下来,以便日后需要时作为参考。

一、WordPress搬家前需要做的事情

1、备份数据库

备份数据库方法:

在 CentOS7 上用的是 MySQL8 备份数据库的老方法是

/opt/rh/rh-mysql80/root/usr/bin/mysqldump -h 127.0.0.1 -R --opt wordpress | gzip > /mysql_backup/wordpress_202110071820.sql.gz

在 Debian10 上用的是 MariaDB10.3 备份数据库非常的简单,因为本地系统登陆数据库是 Unix Socket ,免密登录。

mysqldump wordpress | gzip > /mariadb_backup/wordpress_202110071820.sql.gz;

以前备份的老套路,对于 Debian 来说都是过时的方法。

2、备份网站文件

我们仅需备份 wp-content 这个目录即可

这是将 wp-content 这个目录打包压缩的方法:

tar -czPf /wpbackup/wpcontent_202110071928.tar.gz /www/html/wp-content

或者不用打包压缩,直接备份目录也可以。

二、WordPress搬家与更换域名

1、确定需要更改的域名

明确我们需要更改的域名以及端口号,因为我这里是从阿里云公网上的WordPress内容迁移到自己家庭服务器上面,所以使用了端口号。

WordPress原使用的域名为 https://www.sgtfz.cn

WordPress现使用的域名为 https://sgtfz.cn

2、配置网站数据

首先停止服务器 apache 或 nginx 服务。

下载最新版本 WordPress ,解压,上传网站数据,修改 wp-config.php ,最后修改网站目录权限。

# 进入网站目录
cd /www/html/
# 下载最新版的wordpress
wget https://cn.wordpress.org/latest-zh_CN.tar.gz

# 生成sha1,校对官方sha1
sha1sum latest.tar.gz > latest.tar.gz.sha1sum

# 解压wordpress
tar -xzvf latest.tar.gz

# 删除官方wp-content目录
rm -R /www/html/wordpress/wp-content

# 上传我们备份的wp-content目录文件,使用WinSCP登录普通用户上传,然后复制到指定位置。
# 移动数据到指定目录
mv /home/sgtfz/wp-content /www/html/wordpress/wp-content

# 修改 wp-config.php,先确定数据库名,用户名,密码。并填上。稍后再登录数据库创建数据库名,用户名,密码。
define( 'DB_NAME', '数据库名' );
/** MySQL database username */
define( 'DB_USER', '数据库用户名' );
/** MySQL database password */
define( 'DB_PASSWORD', '数据库用户密码' );

# 修改网站目录及相关文件拥有者权限

# 修改网站目录拥有者为www-data
chown -R www-data:www-data /www/html/wordpress

# 修改wp-config.php文件拥有者为root
chown root:root /www/html/wordpress/wp-config.php

3、配置数据库

创建新的WordPress数据库,用户,密码。然后导入数据库备份文件,修改数据库。

# 登录到 MariaDB
# 创建新的WordPress数据库及用户
create database wordpress;

# 查看已创建的数据库
show databases;

# 创建数据库用户,密码
create user '数据库用户名'@'localhost' identified by '数据库用户密码';

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

# 授权用户使用数据库
grant all on wordpress.* to '数据库用户名'@'localhost';

# 刷新权限
flush privileges;

# 切换到wordpress数据库
use wordpress;

# 用WinSCP登录普通用户,上传数据库备份文件到服务器
# 导入数据库备份文件
source /home/sgtfz/mysql_202110072026.sql;

# 操作数据库,修改原域名 WordPress地址(URL),站点地址(URL)为现使用的域名
# 列出WordPress原使用的域名
select * from wp_options limit 2;
MariaDB [wordpress]> select * from wp_options limit 2;
+-----------+-------------+----------------------+----------+
| option_id | option_name | option_value         | autoload |
+-----------+-------------+----------------------+----------+
|         1 | siteurl     | https://www.sgtfz.cn | yes      |
|         2 | home        | https://www.sgtfz.cn | yes      |
+-----------+-------------+----------------------+----------+
2 rows in set (0.000 sec)

# 修改为现需使用的域名
update wp_options set option_value = 'https://sgtfz.cn' WHERE option_name='siteurl';
update wp_options set option_value = 'https://sgtfz.cn' WHERE option_name='home';

# 再次列出WordPress使用的域名,验证修改完成。
MariaDB [wordpress]> select * from wp_options limit 2;
+-----------+-------------+------------------------+----------+
| option_id | option_name | option_value           | autoload |
+-----------+-------------+------------------------+----------+
|         1 | siteurl     | https://sgtfz.cn | yes      |
|         2 | home        | https://sgtfz.cn | yes      |
+-----------+-------------+------------------------+----------+
2 rows in set (0.001 sec)

# 至此,我们实际上可以访问网站了,但还得继续修改数据库的 post_content 项的域名为新域名

# 修改 post_content 域名为现使用的新域名。原域名https://www.sgtfz.cn,新域名https://sgtfz.cn
UPDATE wp_posts SET post_content = REPLACE(post_content,'https://www.sgtfz.cn','https://sgtfz.cn');

# 至此,数据库已经修改完成。

# 启动apache或nginx,即可进入网站操作登录wordpress后台。
# 设置→常规→保存

# 由于我还安装了buddypress插件,所以,还需修改一下数据库
UPDATE wp_bp_activity SET primary_link = REPLACE(primary_link,'https://www.sgtfz.cn','https://sgtfz.cn');

UPDATE wp_bp_activity SET content = REPLACE(content,'https://www.sgtfz.cn','https://sgtfz.cn');

UPDATE wp_bp_activity SET action = REPLACE(action,'https://www.sgtfz.cn','https://sgtfz.cn');

# 全部完成任务,完美工作。

# 假如数据库操作有误,我们可以删除了重建,再重新导入数据。

# 删除WordPress数据库
drop database wordpress;
# 删除数据库用户
drop user '数据库用户名'@'localhost';

4、启动服务器的apache或nginx服务,访问网站

只要按照上述的步骤与顺序完成,WordPress搬家与更换域名就非常的顺利完美完成的了。

至于服务器的环境,无论是LAMP或LNMP,这不影响搬家。搭建LAMP或LNMP的方法,这里就不做详细说明了。

佳能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 指示灯依旧常亮,打印机无法工作。

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

登录查看完整内容