为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~

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

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

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

NextCloud 各方面都用着很不错,唯一让我觉得非常不爽的是:如果进入一个图片很多的目录,那个缩略图加载实在太慢!如果随便点击打开一张照片,一直都在加载转圈圈!等了许久才能加载出完整照片。如果此时继续往下浏览更多的照片,我相信你绝对没有更多的时间与耐心去等待缩略图加载,更别说点击查看了!

这个问题肯定得解决,不然总觉得不够完美。实际上没有完美的东西,只是在有条件的情况下尽量的去完善而已。

实际上 NextCloud 的官方都是推荐使用 Prewiews Generator 这个插件来实现自动生成缩略图。可是配置与使用此插件的细节少之又少,分分钟让人掉进坑里,其中我就被坑了。

掉坑里去了

安装了 Prewiews Generator 这个插件之后,就按照插件官方简单的说明,执行首次全盘扫描生成缩略图:

sudo -u apache php occ preview:generate-all -vvv 

缩略图成功的生成了,我存储的照片大概有 29GB,貌似耗时半天左右才完成所有的缩略图生成。于是简单的测试了进入各个照片数量很多的目录,显然浏览速度确实有了非常大的提升,比之前爽太多了。

然后安心的把计划任务添加上让其自动为之后的新照片自动生成缩略图:

crontab -u apache -e
15 3 * * * php -f /var/www/html/nextcloud/occ preview:pre-generate

可是今天去检查缩略图存放的目录发现有点不对呀,缩略图存放目录居然占用 30GB 多!比所有的原图照片占用的空间还要多,这不太科学了吧?在详细浏览各种缩略图所在的目录发现,生成许多实际上可能不需要的分辨率的缩略图,一张图片,缩略图能有10种不同分辨率!最大尺寸4096×4096,占用空间已经与原图大小相当,还有2K、1K等诸多各种分辨率的缩略图,如果我的存储空间是无限的话,问题不大,可是又有谁能有无限的存储空间?

就目前生成的缩略图占用比原图还大的情况,我需要将其清除,然后重新生成符合实际效率,且有用的缩略图。于是在 NextCloud 官方论坛找相关资料,关于如何清除之前已生成各种尺寸的缩略图。令人头疼的是官方论坛经常无法访问,找资料实在太难了!

再次掉坑里了

cd /var/www/html/nextcloud
sudo -u apache php occ preview:delete_old

没有任何作用,啥也没有删掉。

来之不易的资料:

这是搜索官方论坛并结合回复关于此问题的链接总结的方法:

1、停止 Apache

systemctl stop httpd

2、把原略图目录移动到其他目录

如你觉得绝对成功的,可以把目录删除

mv /var/www/html/nextcloud/data/appdata_ocfv****f/preview /var/www/html/nextcloud-old/

3、执行扫描修复数据库

cd 到 nextcloud 目录

sudo -u apache php occ files:scan-app-data

4、设置缩略图参数。

根据自己需要设置

sudo -u apache php occ config:app:set previewgenerator squareSizes --value="64 256 1024"
sudo -u apache php occ config:app:set previewgenerator widthSizes  --value="64 256"
sudo -u apache php occ config:app:set previewgenerator heightSizes --value="64 256"
sudo -u apache php occ config:system:set preview_max_x --value 2000
sudo -u apache php occ config:system:set preview_max_y --value 2000
sudo -u apache php occ config:app:set preview jpeg_quality --value="60"

5、清除浏览器缓存,浏览器登录 NextCloud

随便浏览照片目录与其他目录几分钟。目的让系统自动生成缩略图 preview 目录。

6、执行全盘扫描生成缩略图

WinSCP 登录后台查看 preview 此目录出现后, 执行全盘扫描生成缩略图

sudo -u apache php occ preview:generate-all -vvv

此刻又是一个漫长的等待,于是就把这个过程给记录下来吧。

检查我们的设置之后,所生成的缩略图

nextcloud previews 01

缩略图完全按照设置生成,证明已经踏上了成功的路上了!😁

就这样,明天等所有的缩略图都完成之后,再确认体验效果吧。

所有缩略图已经生成完毕,浏览非常流畅了。关于缩略图的分辨率问题,我觉得 NextCloud 没有明确的默认尺寸,好像是针对不同设备,不同分辨率的显示器,或使用4K分辨率的不同缩放,可能定义的缩略图分辨率都不同。具体就不再去纠结这个问题了,只需设置符合自己常用设备的缩略图分辨率即可。

我最终修改为如下几个尺寸的缩略图:

nextcloud previews 02

按需生成指定文件类型的缩略图

配置在 config.php

  'enabledPreviewProviders' =>
  array (
    0 => 'OC\\Preview\\PNG',
    1 => 'OC\\Preview\\JPEG',
    2 => 'OC\\Preview\\GIF',
    3 => 'OC\\Preview\\HEIC',
    4 => 'OC\\Preview\\BMP',
    5 => 'OC\\Preview\\XBitmap',
    6 => 'OC\\Preview\\Movie',
    7 => 'OC\\Preview\\MKV',
    8 => 'OC\\Preview\\MP4',
    9 => 'OC\\Preview\\AVI',
  ),

txt、MarkDown、mp3 这几个文件类型个人认为没必要生成缩略图,实际上mp3如果有专辑封面图作为缩略图,效果还是非常好的。可是我的mp3文件许多都没有这些专辑封面元素数据,所以干脆不显示缩略图。

某种文件格式如果生成缩略图,比如txt格式文件。如果存储了非常多txt文件,会生成许多缩略图,而这些数据都记录在数据库导致数据库庞大。而且txt文件许多都是 Windows(CR LF) 这种中文文字,缩略图是一片乱码,没有任何意义。

从 Windows Server2012 R2 到 Windows Server2019 使用体验

依旧是稳定运行了3年多的 Windows Server 2012 R2 总是在纠结到底要不要升级为 Windows Server 2019。我发现如果出现了这种纠结的思想斗争,就会挤时间来安排折腾这个想法。

Windows Server 2012 R2 我只使用了很小的一个功能: Hyper-V

只在 Hyper-V 上部署需要的应用服务,并没有在 Windows Server 2012 R2 主操作系统上部署任何应用。那么如果全新升级是不是就非常简单了?且并不需要安排很多时间去折腾。我觉得只需要备份好在 Hyper-V 上部署的虚拟机以及虚拟磁盘,还有记录好虚拟机所使用的网卡、虚拟磁盘、虚拟交换机等配置结构,以便重建,就可以放心去折腾了。

开始全新升级到 Windows Server 2019 Datacenter

所谓的全新升级,就是直接全新安装 Windows Server 2019 Datacenter 系统。

确保安装最为安全、干净的系统,我的方法如下:

1、下载 cn_windows_server_2019_updated_jan_2020_x64_dvd_4bbe2c37.iso 系统光盘文件,并验证 sha1 值,确保下载的光盘文件正确性。

2、准备一个 16G 的 U盘,并格式化为 NTFS 文件系统。

3、使用 7Zip 解压 cn_windows_server_2019_updated_jan_2020_x64_dvd_4bbe2c37.iso 光盘内的所有文件到 U盘 根目录。

经过这么一波操作后,我们可以拿这个 16G 的 U盘 直接启动安装系统了。 安装系统前,需要进入主板 BIOS 设置,将 16G 的 U盘 设置为第一启动设备。

这里需要注意的是:

如果我们设置普通 USB 设备里的 16G U盘 为第一启动设备,不是 UEFI 的启动方式启动 U盘 ,安装系统则以 LEGACY MBR 的引导方式启动安装。

如果我们设置以 UEFI 设备里的 16G U盘 为第一启动设备,安装系统则以 GUID UEFI 的引导方式启动安装。 具体需要哪种引导方式,根据自己的需求去设置(我选了UEFI)

安装过程就如使用光盘安装一样,其中需要输入序列号这一步骤,可以直接点选没有序列号即可。系统顺利安装完毕,在系统没有激活的状态,我们依然可以正常部署 Hyper-V 各种功能。那么激活的事情你懂啦!

重新恢复之前的虚拟机

全新安装好 Windows Server 2019 Datacenter 首先要操作的是安装好各种硬件驱动,更新系统补丁,然后再创建一个管理员账户,禁用 Administrator账户, 最后添加 Hyper-V 角色。

1、按照之前虚拟机所使用的网卡、虚拟交换机等配置结构,配置好 Hyper-V。

2、创建虚拟机,然后磁盘使用之前备份的虚拟磁盘。

3、检查 Hyper-V 配置无误后,即可启动虚拟机了。

Windows Server 2019 Datacenter 的 Hyper-V 会默认勾选自动设置检查点,我的一个虚拟机挂载了几个磁盘,容量太大,不需要检查点,反正我不勾选这个功能。

在设置 → 网络适配器 → 高级功能 → 受保护的网络,去掉勾选 受保护的网络。(如果检测到网络连接已断开,则将虚拟机移动到其他群集节点。) 我没有这些高级的群集节点,默认这里是勾选的,日志里发现报错:只能在加入域的计算机上启用实时迁移。不知是不是这里勾选了此功能的原因。

虚拟机启动一切正常。

Windows Server 2019 Datacenter 虚拟机配置版本9.0

Windows Server 2012 R2 虚拟机配置版本5.0

我的虚拟机就这么升级了几个档次了!那么性能是不是又提升了几个档次呢?

体验 Windows Server 2019 Datacenter Hyper-V 性能如何

没有专业的测试数据,只是直观的主观使用感受。

测试部署在虚拟机上 NextCloud 性能:

第二代虚拟机,千兆内网:

NextCloud 测试一个 5GB 文件,网页上传文件速度 25MB/S (Server2012 只有 15MB/S )

NextCloud 测试一个 1.5GB 文件,网页下载文件速度 85MB/S (Server2012 貌似 50MB/S 左右)

Windows Server 2012 R2 Hyper-V 的虚拟交换机配置:

INTEL A千兆网卡(外部网络):只绑定 OpenWrt LAN 口 (不允许操作系统共享)

INTEL B千兆网卡(外部网络):绑定 CentOS7 网口,Windows Server 2019 Datacenter (允许操作系统共享)

Windows Server 2019 Datacenter Hyper-V 虚拟交换机配置:

INTEL 网卡 (外部网络):同时绑定 OpenWrt LAN 口、CentOS7 网口 (不允许操作系统共享)

Realtek 板载千兆网卡(外部网络):Windows Server 2019 Datacenter (允许操作系统共享)

升级到 Windows Server 2019 Datacenter 这个速度提升还是很不错了!难道是虚拟交换机配置的不同,带来的性能提升?

暂时没有时间去证实了。

Windows Server 2019 主操作系统比 Windows Server 2012 R2 需要占用更多的运行内存!(貌似也就多占用500MB的内存吧😁)

就这,暂时短时间内没有体验出更多的区别,更多等日后再进一步检验。

HyperV 部署 OpenWrt19.07.7-x86-64 详细记录

2017 年的年底就开始使用 HyperV 部署 LEDE17 一直使用至今已足足 3 年多了,LEDE 非常稳定而且各种应用已经满足了我当前的需求。最近有一个迫切的需求:在 LuCI 界面登录日志要记录在系统日志里方便查询。可是 LEDE 在 LuCI 界面登录不记录日志,且到目前为止,我没有找到如何为 LEDE 添加此功能。在寻找解决方案的同时发现最新版本的 OpenWrt19 有此功能,由于之前折腾过 OpenWrt18 发现有许多不满意或者是不如 LEDE17 的地方,OpenWrt19 这个版本应该改善了许多吧?

在很久…以前(LEDE17没有发布前)OpenWrt 是不支持 HyperV 虚拟机的,那时候已经玩过 OpenWrt 刷入水星MW4530R,实体路由刷 OpenWrt 固件够折腾人了,局限性太多,没有折腾的动力。我更喜欢虚拟机里玩,正好就在那个时候 LEDE 发布了!完美兼容 HyperV 虚拟机!至于虚拟机里运行是否有什么缺点或性能上的损失?我没有条件去对比测试,按照目前这么长时间的使用,并没有发现虚拟机运行 OpenWrt/LEDE 有任何的性能不足,甚至个人觉得虚拟机运行 OpenWrt/LEDE 比实体路由刷 OpenWrt/LEDE 在性能上更为强大得多!

OpenWrt 早已经与 LEDE 再次合并了,现在 OpenWrt 从原来合并 LEDE 后发布的 OpenWrt 18 到现在已经发布了 OpenWrt 19.07.7 正式版了,正常来说,已经可以放心食用了吧,下面开始吧!

折腾过程细节记录需要登录后才能查看,不便之处请谅解。

系统环境:Windows Server 2012 R2 Hyper-V

登录查看完整内容

OpenWrt 虚拟磁盘所有工作已经部署完成,关闭HyperV CentOS7 虚拟机,卸载 OpenWrt 虚拟磁盘。

四、新建 HyperV 虚拟机并进入Web页面配置 OpenWrt

新建第二代 HyperV 虚拟机,磁盘选择刚才已经部署好的 OpenWrt 虚拟磁盘。记得虚拟机设置 → 安全 → 安全启动 → 不要勾选 启用安全启动(E)

请注意:在虚拟机开机之前,我们首先只添加一块网卡,这块网卡 OpenWrt 会默认绑定为 LAN 口,然后再打开虚拟机电源,虚拟机启动一切顺利!OpenWrt 默认管理地址为:192.168.1.1 ,首次登录请注意设置密码。

至此,所有工作都已经顺利完成。

之前在 LEDE17 上部署的应用有:

Vlmcsd Kms Server (OpenWrt19.07.7运行正常)

aliyun DDNS (OpenWrt19.07.7运行正常)

MWAN3 (OpenWrt19.07.7软件中心安装)

Wake On LAN (OpenWrt19.07.7软件中心安装)

防火墙自定义规则、计划任务、等等配置命令与LEDE上都是一样的。实际上所有的配置与LEDE基本差不多,没有太大的出入,所以登录进入 LuCI 配置的就不详细记录了。

值得注意的是,即使下载了官方最新的固件

进入 LuCI → 系统 → software → Updates

我们还会发现很多需要升级的软件,于是我都升级了。还有就是安装了很多中文包,但中文翻译还很多地方不够彻底。

所有应用都能顺利配置并完美的工作了!最近迫切需要的 LuCI 登录日志,现在也已经有了,完美!

到目前 2021年3月24日22点 已经稳定运行了 48 小时

唯一发现 IPv6 配置上需要注意的:禁用 LAN IPv6

禁用 LAN IPv6

因为我的宽带拨号,电信只提供IPv4地址,没有IPv6地址。

在刚刚部署好 OpenWrt19.07.7 的时候并没有发现有什么异常的现象,但是在顺便休息时,iPhone手机切换连接另一个WiFi后,无法联网了。后来发现自动获取了2个IPv6的地址,无法获取IPv4的地址。

手动填上正确的IPv4地址后,iPhone手机可以正常联网。

干脆把LAN口的IPv6禁用了,于是iPhone手机自动获得IPv4地址一切正常了。

好像已经记录完了。

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

如何避免个人电脑由于各种原因(错误操作、硬盘损坏、等等)导致数据丢失?这是一个非常头疼的问题。只有丢失过数据之后,才觉得数据的重要性。尝试实施过很多方法,但效果都不太理想。直到发现了 NextCloud 之后,这个可以搞!因为 NextCloud 可以搭建自己的私有云,远程可以随时访问家里的数据,这个实在是太实用了,并且既有 iPhone 端配套的 App 又有 Windows 版的桌面同步软件配套,最重要的是同步端 App 与服务端都是免费的!

虽然当前版本的 NextCloud 20 运行速度并不太快,个人认为对于个人用途已经很快了!也许是由于我将 NextCloud 20 部署在 Hyper-V 虚拟机上,导致运行速度并不那么快的原因。从一开始搭建 NextCloud 就将其运行在 Hyper-V 的 CentOS7 上,因为是新手,虚拟机部署更容易。

经过了很长一段时间的各种部署折腾,如果要将其运行在实体机上,也是没有任何问题的啦!我认为即使运行在实体机上,性能稍有提升,提升应该不会太明显。由于 LEDE 软路由需要实现MWAN+AliyunDDNS+KMS 还有各种端口映射,一直运行在 Hyper-V 上从来没有任何脾气,那么就没有必要再折腾多一台单独运行 CentOS7 的实体机来部署 NextCloud 了。将所有任务都交给一台 Windows Server 2012 R2 吧,既省硬件的同时也省电,毕竟是个人使用而已。

有 Windows 桌面端同步软件,个人的数据已经可以比较有效的避免由于硬盘损坏或误操作而丢失数据了。我们的 NextCloud 其实并不局限于一个人使用,可以多用户同时使用的呀!因此还要考虑多一份的备份,我的意思是在 Windows Server 2012 R2 上再多安装一块硬盘专门用于备份使用的。这样一来,是不是在原有的基础上更多了一份备份的保障呢?异地备份更好,但我并没有条件去实现。如何利用再加装的这个硬盘专门用作备份呢?一开始还考虑使用 Windows Server 2012 R2 里面的 Windows server backup ,可是这个根本无法备份 Hyper-V 里运行的 CentOS 7 ,原因未知。后来发现 CentOS 7 已集成的 rsync 是备份的神器,那就开始折腾吧!

我的 NextCloud 备份方案

我觉得完美的方案,但对于老司机来说,是垃圾方案,所以还是设置需要登录后才能阅读为好!

登录查看完整内容

这个方案是将数据放在3个不同的硬盘上,目的是避免硬盘损坏导致数据丢失。如果这3个硬盘同时损坏,数据肯定 Over 了!3个硬盘同时损坏的机率非常非常低吧?如果这都能碰到的话,只能认命了。至于误操作删除文件等问题 NextCloud 本身有回收站功能,并且还有文件版本功能,可以放心使用。

使用 Windows Server 2012 R2 的 Hyper-V 是为了更好的监控磁盘 S.M.A.R.T. 信息,还有更方便操作 VHDX 文件等等吧?Linux 命令太多难记,难查,头疼,但是我觉得如果熟悉操作Linux命令实际上应该更好更精准高效!可惜Linux我还有太多太多…的不懂。

有空再折腾吧!

柯尼卡美能达 KONICA bizhub 246i SMB 扫描设置

第一次搞柯尼卡美能达复印机扫描功能,设置也太麻烦了吧!在官网找了一些资料和说明,反正没有找到有用的东西。后来网上找了不少资料,最后还是设置成功了,这个扫描功能实在是反人类的配置。

KONICA bizhub 246i 设置网络 SMB 扫描的操作步骤

系统环境:Windows 7 x64

一、安装网络打印机驱动

首先这个 KONICA bizhub 246i 扫描功能没法通过 USB 数据线连接实现,在打印机上操作扫描通过网络 SMB 方式传输到电脑的共享文件夹。所以不需要使用 USB 数据线连接打印机,只需使用网线连接打印机,让打印机与电脑同在一个局域网内。

官方驱动安装包:

然后安装打印机官方驱动,安装官方驱动的时候会自动扫描局域网内的打印机然后安装。如果无法搜索到局域网的打印机IP地址,请尝试手动输入IP地址。或从控制面板 → 设备和打印机 → 添加打印机 → 我所需的打印机未列出 → 我的打印机有点老 → 下一步 搜索完成添加与安装驱动。

二、配置打印机的网络 SMB 扫描功能

1、创建共享目录

可以在电脑 D 盘或其它位置创建一个名为 scan 的文件夹目录,添加 Everyone 权限为:读取/写入。共享该目录。

图1
登录查看完整内容

HP M1136MFP 页面头部分内容压缩或出现黑横杠

HP M1136MFP 页面头部分内容压缩或出现黑横杠,该故障比较难以描述清楚,需要配合图片描述。

图一为原稿

图一

图二为复印出来的效果,打印出来也同样如此。特别是冷机时,黑横杠更宽,间隔几厘米出现比较细的黑横杠。

图二

图二所示,页面头部最宽的黑横杠之前的内容丢失。

首先更换一个全新的硒鼓,故障依旧!

登录查看完整内容

HP-1020 Plus 执行打印机器运转但无进纸动作

故障现象:HP – 1020 Plus 执行打印任务机器执行运转,但是无进纸动作,之后指示灯交替闪烁,整机处于假死状态。

下面是的分析过程,不推荐参考(喝了点酒睡不着写写博客

初步检测:

无进纸动作,首先测量进纸控制离合器的继电器在执行任务时是否有触发电压——没有!

进一步分析:

麻烦大了!初步了解到,这个进纸继电器没有触发电压意味着处理任务的主板或各种处理电路工作异常!

进一步检测:

拆下连接继电器的USB接口板,发现USB接口板只是个牵线搭桥,并不处理进纸触发信号。顺藤摸瓜的发现了处理该触发信号的是在激光器上面的板子上,这板子怎么拆装是个令人头痛的问题。日本鬼子设计的东西就是复杂,在没有搞清楚它的套路时,让你摸不着门。

拆就是了,看见貌似相关的螺丝就给它拧下来,再不行就硬撬,总之把它拆下来后发现了这IC+三极管的控制没有想象中的简单。

有些时候我们只需要判断是这个板子的问题,直接更换该板子即可解决问题,没必要钻牛角尖的去深究(得不偿失)。可是问题往往没有想象中的简单!初步了解到的是该板子所涉及到的连接高压板 → USB接口板,身份如同高压板 → USB接口板桥梁(中间板)。

高压板:

整机电源供电 + 高压 + 各种传感器接口,经过桥梁(中间板)与USB接口板协调任务。

USB接口板:

接收电脑端的数据处理,与桥梁(中间板)沟通,协调任务。

到底哪里出了问题?

这不是可以随便下结论的时候,除非不计成本,换了这块板子不行,继续换,换到合适为止!这明显违背了维修人员解决问题的逻辑了!

于是这个问题搁置了一段时间(根本没有了头绪)

后来的一个晚上,趁着没那么多事情打扰,静下心来研究一下吧,因为要么放弃,要么就死磕的去面对问题。

检测是一件非常头疼的事情,既要每一个部件都可以保持在线工作,又要测量关键部位的信号电压。所以我们需要的测试点,需要用引线引出方可经行测量。经过一翻的测量与分析,问题浮出了水面。

登录查看完整内容

发现了问题之后,通常的解决方案就变得非常简单了。

无非是以最高效的方式解决问题,或最稳妥的方式解决问题。

首先采取高效的解决问题,如果高效解决问题的情况下存在不稳定的情况,最后以最稳妥的方式收尾。

此时此刻的思绪有点乱,记录结束。