前几天打开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
,为什么之前可以正常执行定时任务?
也许有些问题我们是无法找到答案的…。