群晖(Synology) DS718+希捷酷狼(Seagate IronWolf)12TB空闲发出持续噪声

群晖(Synology) DS718+ 使用希捷酷狼(Seagate IronWolf) 双12TB组成RAID1阵列,结果每隔几秒就会发出一阵子咳咳咳的噪声(有人说是炒豆子声音),尤其是夜深人静的时候,简直无法容忍。

网上查询了很久,发现这个问题非常普遍。

如果是DSM 6.2之前的系统,存在一个磁头反复复位唤醒的BUG,导致磁盘寿命明显缩短。这个原因是由于磁头的复位次数是有上限的,超过上限就容易故障。这个问题的表现就是SMART信息中的Load_Cycle_Count(Load/Unload_Count)异常增高。噪声的一个原因也就是磁头的复位声。

通常,硬盘制造商规定的Load_Cycle_Count(Load/Unload_Count)数目上限是600,000次,要是超过300,000次就会影响到正常的读写,再多的话就差不多要报废了。

参考群晖论坛的讨论 Seagate NAS drives constant clicking noises when idle

但是我的系统是DSM 6.2.2-24922 Update 4,这个问题已经被修复了,目前观察了一下,这个数字已经不再增长了。

这个噪声其实是读写频率低的情况下,磁头默认会回到一个安全区,在这个安全区,即使由于硬盘的意外震动,磁头发生磕碰,也不会磕碰到磁盘区域,提升震动安全。但是带来的问题是磁头进入或者离开安全区的时候,会发出一阵噪声。这个声音非常吵。这也就是为什么官方网站在回应 对于噪声很大的磁盘驱动器我应该怎么办? 说这个问题没办法解决的原因。

上述故障的典型表现是 当磁盘负载很高的时候,噪声低很多,低负载的时候,每隔几秒就会发出非常高的噪声

当年,迈拓的硬盘存在一个名为AMM的技术,可以通过一些指令如ATA指令或专用软件对它进行操作,使得寻道时的噪音跟空闲时差不多。但是,AMM降低了硬盘在速度变化瞬间的启动速度,在突发数据传输率上会对硬盘造成一定影响,使得硬盘的性能出现短暂下降。不过,从平均工作性能来说,由于持续传输率并不受启动速度的唯一影响,因此在整体性能上来说问题不大。 迈拓的Acoustic Management(声音管理)设置工具。

可惜,希捷酷狼(Seagate IronWolf)12TB已经不支持这个功能了。

亚马逊有个回答

虽然发出评论的人否认自己是托,但是从我一张12TB的WD红盘跟Ironwolf的对比来看,WD红盘安静的根本听不到噪声,Ironwolf吵得很。

虽然不支持AMM,但是官方提供的控制工具SeaChestUtilities (本站链接 SeaChestUtilities)中的SeaChest_Configure工具(这个工具解压缩到群晖chmod +x后就可以执行)提供了一个名为 --lowCurrentSpinup 的参数,这个参数的说明如下:

看上去这个参数可以实现降噪功能,实际上没什么效果!执行命令如下:

low ,ultra两个参数都试过,没明显感觉到不同。

接下来,想在电源管理上看一下是不是能解决问题,比如降低转速等,结果依旧没用。老的Advanced Power Management (APM)被新的Extended Power Controls (EPC)功能取代了,具体解释如下:

尝试用工具中的电源管理模块,结果依旧根本设置不了,如下:

工具的功能挺全的,能查到硬盘的很多信息,如下:

有个缩写简单记录一下

根据论坛上 教你一招解决NAS噪音及速度问题!的经验,第1盘位是默认的系统盘,这导致硬盘不停的发出咳咳咳的寻道声。为了解决这个问题,(918+)遂决定在1、2盘位安装两块SSD,并将两块酷狼8TB转移到3、4盘位,这样一来,HDD不再是系统盘,在闲置状态下,便可启动休眠功能,大大降低噪音。

可惜718+只有两个盘位,918+的解决方法显然是行不通的。

我自己的群晖的噪声来源主要有如下几个

  • MariaDB 10开启了主从复制,主服务器上数据更新,会被自动同步到群晖上的MariaDB 10,导致磁盘被频繁唤醒,而磁盘寻道噪声很大!!
  • 群晖开启了SMB服务,局域网内的机器会自动连接导致磁盘被唤醒,虽然没有写入,但是网络请求会导致磁盘唤醒,依旧出现寻道声。
  • 系统盘安装在硬盘上,系统会定期唤醒磁盘执行读写操作。目前测试发现,关闭MariaDB 10, SMB 之后,硬盘可顺利休眠。

按理说,上面的问题,可以通过群晖的 SSD 缓存加速功能缓解,结果718+没有M.2插口,918+有两个内置的M.2插口。而外置通过eSata的接口挂载硬盘,是不能作为SSD 缓存加速的。具体信息参考 Synology’s DS718+ SSD caching is crippled/Which Synology NAS models support SSD cache?

目前能想到的办法是

继续阅读群晖(Synology) DS718+希捷酷狼(Seagate IronWolf)12TB空闲发出持续噪声

PyQt5的QWebEngineView使用模板

一.支持视频播放

关键代码

二.支持页面关闭请求

关键代码

三.支持页面下载请求

关键代码

【如下代码,完全复制,直接运行,即可使用】

参考链接


PyQt WebEngineView interferes with MainMenu

I'm trying to create an application that contains a web browser within it, but when I add the web browser my menu bar visually disappears but functionally remains in place. The following are two images, one showing the "self.centralWidget(self.web_widget)" commented out, and the other allows that line to run. If you run the example code, you will also see that while visually the entire web page appears as if the menu bar wasn't present, you have to click slightly below each entry field and button in order to activate it, behaving as if the menu bar was in fact present.

继续阅读PyQt WebEngineView interferes with MainMenu

macOS Catalina(10.15.4)下PyQt5图标Icon无法显示的问题

macOS下,刚学习PyQt5遇到图标无法显示问题. 先上代码,看下代码就明白了。

setWindowIconQApplication的方法,而不是QWidget的,所以使用app.setWindowIcon设置是对的。

注意在macOS下,图标是显示在程序坞中的!!!

参考链接


MAC下PyQt5图标Icon无法显示的问题

Python+WebKit+HTML开发桌面应用程序

前言

几天前写了一个备份的小工具,用Python写个脚本,也就花个一天的时间搞定,给客户用了一下,对功能很满意,但对界面不满足,想要一个图形界面来管理;
一个备份脚本,有必要整成这样子吗?没办法,谁让是上帝的要求呢,就研究一下;先后找了python的tkinter、pyqt,尝试着画一些界面,虽然功能可以实现,但界面很难看;恰好,在查看pyqt的API文档的时候 ,发现了QWebView组件,据介绍可以实现一个浏览器,并且浏览器中的JS可以与Python代码进行交互。忽然眼前一亮,我不正是我想要的吗!
抽几天时间把工具写完了,目前运行良好;想写篇博客做个记录,也想给需要进行此类开发的朋友做个示例,就把这个工具最核心的内容做了一个DEMO。现在,就把这个小DEMO的开发过程做个说明;

功能简介

这个小DEMO用于显示计算机上的一些信息,显示内容不是主要的,主要为了体现如何用python+HTML开发桌面应用程序。

最终实现的主界面如下:

准备材料

开发工具:Visual Studio Code
开发语言:python 2.7/python 3.7
界面工具包:PyQT4/PyQT5

目录结构


说明:
demoUI.py : python主体程序 ,主要实现窗口创建,加载index.html页面,python与JS的交互;
views/index.html : 主要进行数据展示,及与python交互的js程序

demoUI.py开发

引入的包

前四行代码,主要是引入Qt相关的包,这里使用的PyQt4;
后三行代码,主要是为了处理中文问题,可以忽略,但遇到中文乱码的时候,想起来这句话,把它加上就行了

DemoWin类

DemoWin是整个应用的核心类,主要实现窗体创建,关联与JS交互的槽函数等;

像标题所说,我们将使用WebKit作为页面展示,所以这里的主页面是以QtWebKit.QWebView作为基类

设置窗口大小为800*600,并且加载index.html进行显示

获取网页主框架,按照QT官方文档解释:QWebFrame代表一个网页框架,每一个QWebFrame至少包含一个主框架,使用QWebFrame.mainFrame()获取。
这是进行后续各类操作的基础,类似于JS中只有获取到网页的dom对象,才可以对其中的元素操作一样;

这段代码是关键中的关键!
WinObj类:是封装后用于js调用的槽函数类,后续再详细介绍
addToJavaScriptWindowObject类:第一个参数是对象在javascript里的名字, 可以自由命名, 第二个参数是对应的QObject实例指针。 这样在javascript里就可以直接访问WinObj对象拉, 是不是看上去超级简单?但是这个函数的调用时机是有讲究的,按照官方文档的推荐,是需要在javaScriptWindowObjectCleared信号的槽里调用,才有了以上的代码;里面用了lambda表达式,纯粹是为了减少一个槽函数的定义,你如果觉得不好看或不喜欢,完全可以定义一个槽函数;

WinObj类

下面来重点介绍WinObj类,类型定义如下:

该类封装了JS可直接调用的方法,有一些区别于普通类的地方要注意;

该类必须继承自QObject,而不能是object。

构造函数将mainFrame传进来,主要用于调用js函数(后面将有示例介绍)

getInfo()实现了一个供JS调用的方法,有几下几点要注意:
(1)@QtCore.pyqtSlot(result=”QString”) 用于将python方法转换为供js用的函数,括号里写明数据类型及返回类型;如果没有声明result,则不能返回数据;
(2)self.mainFrame.evaluateJavaScript(‘%s(%s)’ % (‘onGetInfo’,json.dumps(dic_info)))
调用页面中用JS声明的onGetInfo函数(这里仅作一个示例,将查询到的数据进行回调返回)

demoUI.py完整代码下:

index.html

Python 3.7/PyQT5下需要安装 pyQt5

Python 3.7/PyQT5下的代码(注意,Python 2.7/PyQT4是的交互是同步调用的,但是Python 3.7/PyQT5通过QtWebChannel交互是异步的)如下:

index.html

qwebchannel.js

参考链接


PyQt5出现ImportError cannot import name 'QtWebEngineWidgets' from 'PyQt5' 问题解决

今天想在macOS Catalina(10.15.4)系统上,测试一下Python下的QT界面操作,结果在执行

的时候,报告如下错误:

也有可能报告:

查了好久才在Stack Overflow上找到一个回答,说是这个模块被PyQt5移除了,需要单独安装。

安装命令为:

参考链接


Python-PyQt5-PyQtWebEngine采坑记录-- No module named PyQt5.QtWebEngineWidgets

PyQt5出现No module named 'PyQt5.sip'问题解决

今天想在macOS Catalina(10.15.4)系统上,测试一下Python下的QT界面操作,结果在执行

的时候报告错误:

解决方法如下:

参考链接


No module named 'pip._internal.cli.main'

今天,在macOS Catalina (10.15.4)系统上执行升级pip的命令

之后,执行更新命令,报告错误。如下:

解决方法为重新升级安装一次 pip,如下:

参考链接


解决 ModuleNotFoundError: No module named 'pip._internal'

pip批量更新过期的python库

今天看了下系统环境,不少python库都有了更新,再用旧版本库可能已经不适合了,就想把所有的库都更新到最新版本。

查看系统里过期的python库,可以用pip命令

对于列出的过期库,pip也提供了更新的命令

但此命令不支持全局全部库升级。

在stackoverflow上有人提供了批量更新的办法,一个循环就搞定(注意--upgrade后面的空格)

另外的也有人提到用 pip-review ,不想安装就没用

参考链接


pip --upgrade批量更新过期的python库

openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files


openpyxl特点

  openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易 注意:如果文字编码是“gb2312” 读取后就会显示乱码,请先转成Unicode

继续阅读openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files