之前在文章 超实用的个人unraid配置技巧分享(一)中介绍了几个实用的 Unraid 配置和设置方法,比如重启后恢复配置,如何在Unraid中安装 oh my zsh 和配置成 ssh 密钥登陆等。
这篇文章继续分享下如何将风扇调速插件代码修改成根据CPU温度调节,单机双网卡在同一局域网下设置成一张网卡走局域网、一张网卡走外网,脚本实现DDNS等
Unraid 6.8.1、 6.8.2、 6.9.2 开(po)心(jie)版的下载链接:
v6.8.1
链接: https://pan.baidu.com/s/1qb7_mLWsloNSFxZ1FNCxjw 提取码: 9etq 复制这段内容后打开百度网盘手机App,操作更方便哦
v6.8.2
链接: https://pan.baidu.com/s/1WAwpKskkL-LjlsXxnMn3HQ 提取码: gdur 复制这段内容后打开百度网盘手机App,操作更方便哦
v6.9.2
链接: https://pan.baidu.com/s/1-uMtWPoiL-ax-LpRwaqv6g 提取码: fd5f 复制这段内容后打开百度网盘手机App,操作更方便哦
1 机箱风扇设置成根据CPU温度动态调节转速
很多玩Unraid的同学都会安装 Dynamix System Autofan 插件 ,这个插件在 Unraid 的 APPS 页面中搜索 autofan 就能找到了。
正常使用的时候 在设置中启用了该功能,并在 PWM controller 和 PWM fan 选项下正确选择就能使用了。
但实际使用时,会发现插件中设置的温度上下限阈值是针对硬盘的。那要是想改成根据CPU的温度来调节风扇转速要怎么做呢?
也很简单,Unraid中找到下面路径的文件,参考下面内容修改。
/usr/local/emhttp/plugins/dynamix.system.autofan/scripts/autofan
同时建议使用之前文章提到的重启恢复配置脚本,在每次重启后将脚本配置恢复成调好的状态。
# 完整见项目 custom.scripts (https://github.com/yibiner/custom.script) 中的 autofan
function_get_current_cpu_temp() {
HIGHEST_TEMP=0
HIGHEST_TEMP=`sensors | grep "CPU Temp" | awk '{print $3}' | tr -cd "[0-9.]" | sed "s/\..*//g"`}
脚本代码就是将原本获取硬盘温度的部分,用sensors指令代替成获取CPU温度。
# 项目 custom.scripts (https://github.com/yibiner/custom.script) 中 设置autofan
$ cat setplugins.sh
#!/usr/bin/bash
# autofan 修改为根据 CPU 温度调节转速
filename=/usr/local/emhttp/plugins/dynamix.system.autofan/scripts/autofan
if [ -e $filename ] ; then
# sed -i 'N;196afunction_get_current_cpu_temp() {\nHIGHEST_TEMP=0\nHIGHEST_TEMP=`sensors | grep "CPU Temp" | awk "{print $3}" | tr -cd "[0-9.]" | sed "s/\..*//g"`\n}' $filename
# sed -i 'N;292afunction_get_current_cpu_temp' $filename
# sed -i '292 d' $filename
cp $BASE_PATH/autofan $filename
/usr/local/emhttp/plugins/dynamix.system.autofan/scripts/rc.autofan restartfi
2 单机双网卡在同一局域网下的配置
超实用的个人unraid配置技巧分享(一) 文章中也提到了,小编自己配的Unraid主机,主板是 铭瑄MS-H81IL FS ,购买的时候没注意板上网卡最大带宽才100M,后面加了 AX88179 的 USB3.0 千兆网卡。
因为接入的宽带没有到千兆,所以就想能不能设置成外网走主板的百兆网卡,内网传输走USB千兆网卡?
于是乎,就有了下面的设置配置。
$ cat setroute.sh
#!/usr/bin/bash
# 设置百兆、千兆网卡走不同路由,互不影响
hadlan=`grep "lan" /etc/iproute2/rt_tables`
# 新建一个编号为200 ,名字为lan的路由表
if [ -z "$hadlan" ] ; then
echo "200 lan" >> /etc/iproute2/rt_tables
fi
# 删除default路由表中千兆网的配置
had1G=`ip route list | grep "192.168.1.0/24 dev br1 proto dhcp scope link src 192.168.1.5"`
if [ -n "$had1G" ] ; then
ip route del 192.168.1.0/24 dev br1 proto dhcp scope link src 192.168.1.5 metric 215
fi
# 往 lan 路由表 中新增路由
had1G=`ip route list table lan | grep "192.168.1.5"`
if [ -z "$had1G" ] ; then
ip route add 192.168.1.0/24 dev br1 proto dhcp scope link src 192.168.1.5 metric 215 table lan
fi
# 设置千兆网卡流量只看 lan 路由表
had1G=`ip rule | grep "from 192.168.1.5 lookup lan"`
if [ -z "$had1G" ] ; then
ip rule add from 192.168.1.5 table lanfi
多网卡连接同一局域网时, 不做设置下是只会走一个物理链路的。如果将两个IP的路由区别开来,就能实现访问不同IP走的是不同的物理链路,再结合光猫上配置外网访问的IP,就能实现外网走百兆网卡,内网走千兆网卡了,其中更详细的技术细节可以搜索 “linux 高级路由设置” 来进一步了解。
配置完成后的实际测试情况如图,都达到了对应网卡的极限速度,而且互相不影响。
3 使用脚本实现DNSPod下的DDNS
DDNS(Dynamic Domain Name Server),也就是动态域名服务,是将用户的动态IP地址映射到一个固定的域名解析服务上。
个人用户找宽带提供商分配公网IP时候,一般也拿不到固定的IP,这时候就需要使用到DDNS了。毕竟记一个域名比记一堆IP地址简单太多了。
要实现DDNS,首先得先有一个公网IP和域名。公网IP可以直接联系家里宽带的运营商,域名国内可以在阿里旗下的万网或者腾讯云上注册,小编这里用的是腾讯云的服务
https://buy.cloud.tencent.com/domain?domain=ali&tlds=.com
实现DDNS的脚本参考了 ArDNSPod 项目,做了一些小修改。
https://github.com/imki911/ArDNSPod
脚本使用只需要把 dns.conf 文件中的密钥对和域名信息换成自己的就可以了。DNSPod的密钥需要在账号中心 -> API密钥 -> DNSPod Token上创建。
运行脚本后会自动获取当前的外网IP,然后通过接口更新DNSPod上的解析记录。
脚本确认运行正常后,就可以添加定时任务让其周期性地检查IP是否发生了变化,实现DDNS。
定时任务的实现可以在 Unraid 的 APPS 中安装 dynamix.schedules
插件,将脚本放到 /etc/cron.hourly/
目录下,这样就实现了每小时检查一次。
# cp /tmp/custom.scripts/runddns.sh /etc/cron.hourly/# chmod +x /etc/cron.hourly/runddns.sh
如果觉得一个小时的间隔太长了,容易遇到刚好IP动态更新了,但是定时更新解析还没有触发,就需要等待一个小时后才能访问到服务器,也可以直接只用cron服务来设置更短的运行间隔。
# 项目 custom.scripts (https://github.com/yibiner/custom.script) 中设置ddns,参考了dynamix.schedules 的思路
$ cat setddns.sh
#!/bin/bash
crontab -l > /tmp/cron.tmp
echo "*/10 * * * * bash /tmp/custom.scripts/onetimeddns.sh" >> /tmp/cron.tmpcrontab /tmp/cron.tmp
4 UPS不间断电源配置
一个合格的NAS主机,肯定是要7*24小时不间断工作的,但是呢,谁也保证不了家里不会偶尔跳个闸停个电啥的,而这种突然断电,是有可能影响硬盘寿命的。
因为硬盘在高速读取写入时候,内部的磁盘盘片在高速旋转,磁头也会在机械硬盘内部会不断的移动,如果这时候突然断电,可能会导致磁头落到盘面上,造成盘面的损伤。
如果觉得数据比较重要, 稳妥的办法就是使用UPS不间断电源了。在断电的时候UPS还能为NAS提供一段时间的电力,在电力消失前主动的关机就能最大限度地避免数据丢失。
在 unraid 的 SETTINGS 中有UPS Setting 中,可以设置断电运行特定时间后或者UPS的电量低于设定值后自动关机。
不过由于购入的是比较便宜的 山克UPS 600VA ,一番折腾后还是没能成功的使用 UPS Settings 来设置,所以目前只能使用了一个折中的方案:通过ping 上级路由器判断是否断电。
cat loopping4ups.sh #!/usr/bin/bash
# UPS 后备电源关机计划,通过 ping 路由器和国内网站。
# 最大 ping 失败次数。3*60s
MAX_PING_FAIL=60
cnt_err=0
while true
do
ping -c 1 -w 1 192.168.233.1
if [[ $? != 0 ]];then
echo " ping fail "$cnt_err
((cnt_err++))
# ping 超时为1s,保证正常单次判断都为3s
sleep 2
else
cnt_err=0
sleep 3
fi
if [ $cnt_err -ge $MAX_PING_FAIL ];then
echo "shutdown system"
shutdown -h now
break
fi
done
希望以上的 Unraid 设置分享对你有所帮助~
【往期推荐】
1、三千米高空跳下的瞬间,我的脑海中在想什么?
2、十行代码教你制作国庆渐变头像!!
3、程序员知道如何抓取蓝牙广播包很正常吧?
4、鼠标连点两下怎么办?微动开关原理讲解