刚从 MacBook 13-inch 2016 换成 ThinkPad X1C 2019. 刷入 ArchLinux, 记录下针对 X1C 的CPU性能, 电源管理, 风扇调速配置.

CPU frequency scaling

参考: ArchLinux wiki: CPU frequency scaling, CPU优化建议使用cpupower设置CPU Performance模式

使用 cpupower 控制 cpu scaling

# 调整cpufreq的governor
sudo cpupower frequency-set -g performance # performance模式
sudo cpupower frequency-set -g powersave # powersave模式

Power Management

参考: ArchLinux wiki: Power Management, ThinkWiki: How to reduce power consumption

ArchLinux wiki: tpacpi-bat, ThinkWiki: Tpacpi-bat

首先安装tlp (Linux 高级电源管理功能)

再安装针对ThinkPad的 tpacpi-bat ( tp_smapi 在X1C上不起作用, 使用 tpacpi-bat 替代)

手动设置充电阈值:

tpacpi-bat -v -s startThreshold 0 40
tpacpi-bat -v -s stopThreshold 0 80

Fan speed control

根据 ArchLinux wiki: Fan speed control, Linux 常常使用 NBFC 控制风扇
由于我是ThinkPad, 有更简洁的 thinkfan 来控制风扇.

参考: ArchLinux wiki: thinkfan, ThinkFan项目主页

开始配置前最好先查看manpage: man thinkfan, man thinkfan.conf

需要修改配置文件/etc/thinkfan.conf, 示例配置在 GitHub: thinkfan/examples/ 和系统的 /usr/share/doc/thinkfan/examples/thinkfan.yaml 注意新版使用的是 yaml 语法, 不要使用旧版配置.

根据 man thinkfan.conf , ThinkFan 可以从 hwmon, thinkpad_acpi, NVML, atasmart 驱动程序获取温度信息. 我的 X1C 主要使用 hwmon 和 thinkpad_acpi.

查看哪些hwmon可以使用:

find /sys/ -name 'temp*_input*'

查到的路径有4种, 类似于:

/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/temp6_input
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp2_input
/sys/devices/pci0000:00/0000:00:1d.0/0000:03:00.0/hwmon/hwmon1/temp1_input
/sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input

查看各hwmon目录下的name文件得知:
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/ 是 thinkpad_acpi 附带的hwmon,
/sys/devices/platform/coretemp.0/hwmon/hwmon6/ 是coretemp (CPU核心温度*)
/sys/devices/pci0000:00/0000:00:1d.0/0000:03:00.0/hwmon/hwmon1/ 是nvme硬盘
/sys/devices/virtual/thermal/thermal_zone0/hwmon0/ acpitz (好像temp1是CPU插槽, temp4是电池*, 不过我没有temp4)
/sys/devices/virtual/thermal/thermal_zone6/hwmon7/iwlwifi (无线网卡*)

风扇速度控制就使用 thinkpad_acpi 接口了:

cat /proc/acpi/ibm/fan
status:     enabled
speed:      0
level:      auto
commands:   level <level> (<level> is 0-7, auto, disengaged, full-speed)
commands:   enable, disable
commands:   watchdog <timeout> (<timeout> is 0 (off), 1-120 (seconds))

最终配置如下:

sensors:
  - hwmon: /sys/devices/virtual/thermal/
    name: iwlwifi_1 # 根据name文件的值搜索
    indices: [1]
    optional: true # 网卡温度在启动一段时间后才能读取, 设成可选
  - hwmon: /sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input # acpitz
  - hwmon: /sys/devices/platform/coretemp.0/hwmon
    indices: [1, 2, 3, 4, 5, 6, 7] # CPU sensors
  - hwmon: /sys/devices/pci0000:00/0000:00:1d.0/0000:03:00.0/hwmon/hwmon1/temp1_input # nvme

fans:
  - tpacpi: /proc/acpi/ibm/fan
levels:
  - [0, 0, 35]
  - [1, 30, 40]
  - [2, 35, 45]
  - [3, 40, 50]
  - [4, 45, 55]
  - [5, 50, 60]
  - [6, 55, 65]
  - [7, 60, 70]
  - ["level disengaged", 65, 255] # 最大速度
  #- [0, 0, 50]
  #- ["level auto", 45, 75]
  #- ["level disengaged", 70, 255]

不知为什么, 我安装的 ThinkFan optional: true不生效. 每次启动, 服务都会挂掉. 所以使用 Github issues 中的方法, 添加systemd附加配置*

vim /etc/systemd/system/thinkfan.service.d/10-restart-on-failure.conf
[Unit]
StartLimitIntervalSec=60
StartLimitBurst=3

[Service]
Restart=on-failure
RestartSec=10

挂掉的梯子

今天下午突然谷歌上不了了, 我以为是家里路由器上的 V2Ray 挂掉了, 但是手机上的客户端竟然也不能用了, 问题一定出在服务端. 使用 SSH 去服务器查看情况, 诡异的是服务器很容易就连上了.

原因

查看 /var/log/v2ray 下的日志 , 没有任何问题.
systemctl status v2ray, 发现服务已经停掉.

● v2ray.service - V2Ray Service
   Loaded: loaded (/etc/systemd/system/v2ray.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 六 2020-02-08 09:01:13 EST; 25min ago
  Process: 29457 ExecStart=/usr/bin/v2ray/v2ray -config /etc/v2ray/config.json (code=exited, status=2)
 Main PID: 29457 (code=exited, status=2)

2月 08 09:01:12 172.93.44.115.16clouds.com v2ray[29457]: /go/src/runtime/proc.go:543 +0x72 fp=0x7ffff600c1b0 sp=0x7ffff600c158 pc=0x430a62
2月 08 09:01:12 172.93.44.115.16clouds.com v2ray[29457]: runtime.rt0_go(0x7ffff600c1e8, 0x3, 0x7ffff600c1e8, 0x0, 0x0, 0x3, 0x7ffff600cf67, 0x7ffff600cf7c, 0x7ffff600cf84, 0x0, ...)
2月 08 09:01:12 172.93.44.115.16clouds.com v2ray[29457]: /go/src/runtime/asm_amd64.s:214 +0x125 fp=0x7ffff600c1b8 sp=0x7ffff600c1b0 pc=0x459065
2月 08 09:01:12 172.93.44.115.16clouds.com systemd[1]: v2ray.service failed.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: v2ray.service holdoff time over, scheduling restart.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: Stopped V2Ray Service.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: start request repeated too quickly for v2ray.service
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: Failed to start V2Ray Service.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: Unit v2ray.service entered failed state.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: v2ray.service failed.

看起来像是内存错误, 这小破服务器只有512M内存. free 查看内存, 果然内存不足. 使用 top 命令, 发现 yum-cron 自动更新吃掉了所有内存.

systemctl stop yum-cron 发现没用, 进程还在. killall yum-cron 发现这台服务器竟然没有 killall 命令. 我只好把 yum-cron 服务 disable 掉然后重启服务器. 问题解决.

彩蛋

想看一下 CentOS 的版本号, 发现装不了 neofetch, 怎么办?

yum install yum-plugin-copr
yum copr enable konimex/neofetch
yum install neofetch

哈哈, 能用了!
此处有截屏

视图是虚拟的表。封装了SELECT语句的层次,可用来简化数据处理,重新格式化或保护基础数据.
创建视图以便多次使用:

CREATE VIEW ViewName AS
SELECT ...
FROM ...

用视图格式化检索出的数据:

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
    AS vend_title
FORM vendors
ORDER BY vend_name;

数据库操作无非CRUD. 我们一个一个看

增: 创建表

一个简单的例子:

CREATE TABLE Table1 (
    column1    CHAR(10)    NOT NULL,
    column2    VARCHAR(10)    NULL    DEFAULT 'FFFF'
)

使用CREATE TABLE 表名 ( )创建表. 列的定义放在圆括号里,用,隔开.
列定义的格式为 列名 数据类型 其它可选定义, 列表如下:

Continue reading

太久没发博客, 博客都荒了(不过本来也没人看, 也谈不上荒😂). 趁复习整理一下数据库与SQL的学习笔记.
笔记基本整理自 <SQL必知必会> 和 教材<数据库系统概论>. 不保证正确性…

简单的检索

检索数据可能是SQL里最常用的语句了, 使用形如

SELECT column1
FROM Table1;

即可检索数据. 此处columu为列名时是检索某列, 为*是检索所有列.

Continue reading

前两天突然收到好多封邮件, 内容大概是一个神秘人在我的博客注册了帐号, 发了一些极为奇怪意义不明的评论. 类似这样:

感觉好像是注入攻击之类的. 简单搜索一下, 发现wp的确在上个版本有评论区漏洞. 不知道攻击者是不是试图使用这个漏洞.
不过我这破阿里云学生机, 就算拿下来也没什么用啊😂. 真是搞不懂.