黑群晖安装步骤略,引导盘+ 关闭内置 EMMC 网上教程比较多,不过多赘述,安装参考
绿联nas 关闭watchdog 及修改启动方式教程
[https://post.smzdm.com/p/a3xnev8n/](https://post.smzdm.com/p/a3xnev8n/)
绿联黑群晖
[https://post.smzdm.com/p/a07nw4zr/](https://post.smzdm.com/p/a07nw4zr/)
黑群晖安装教程
[https://post.smzdm.com/p/akk9vpkr/](https://post.smzdm.com/p/akk9vpkr/)
2024 年就 10 月黑群晖 nas 教程
[https://www.bilibili.com/video/BV1XN2QYWEAi/?spm_id_from=333.337.search-card.all.click&vd_source=c50111db380d4669d222dbf4f28aa85a](https://www.bilibili.com/video/BV1XN2QYWEAi/?spm_id_from=333.337.search-card.all.click&vd_source=c50111db380d4669d222dbf4f28aa85a)
已解决
- 解决视频HEIC不能播放问题,需要安装 AME 套件并激活,参见 https://post.smzdm.com/p/a7pw05r9/
- 更新小红点问题: 更改/etc/host,增加127.0.0.1 update.synology.com(未解决,后续再做)
- MOV 视频封面不显示问题,升级ffmpeg 套件,从 4 升级到 6 后重建索引解决 ,参见 https://blog.csdn.net/qq_44726883/article/details/140429626
- 硬盘灯闪烁问题,不影响使用,故暂不解决,参见
https://www.langog.com/?p=0f263caf-d8a0-4627-b458-7f1df146b88a
https://github.com/miskcoo/ugreen_leds_controller
- 群晖信息显示监控 ,ssh 安装 sensors 插件即可,https://post.smzdm.com/p/a8xze450/,后期使用hertzbeat 统一监控(11 月 1 日解决问题 3 后,重建索引时,发现 cpu 温度跟面板温度似乎一样
- 风扇问题,风扇无法自定义调节转速,暂时直接拉风速到 100 参见连接 https://post.smzdm.com/p/a0xk4el8/?sort_tab=hot/#comments
- 外网访问,zerotier 已打通内外网访问,自建 planet 来搞定外网访问问题
- 公网 ip v4 已开通,ddns-go + 端口转发 + Let’s Encrypt 完成整个网络搭建
- 软件问题,主要设备平台为Android + mac 常用软件下载参考https://www.synology.cn/zh-cn/support/download?version=7.2#utilities
- nas 内置docker 容器跑
immich作为群晖相册补充(因群晖相册已足够,暂时不用)- jellyfin
- 2015mac docker容器
- heatzbeat 做为整个局域网的监控
- alist 挂百度网盘,夸克网盘,阿里云网盘
- gitlab
- gitlab-runner
经过一系列折腾之后,目前公网访问已经无问题,如果 ddns 挂了,也有自建 zerotier 能作为补充使用,后续考虑加一个 UPS 及两条 512 的 SSD 组 raid1 作为 docker 及虚拟机盘
待办
因使用内置ddns 时出现过梅林固件上的 clash 规则问题,导致 ddns 出现错误的 ip(实际为代理的 ip),后续考虑增加一个软路由(新版 Merlin Clash已支持自定义规则,可以在访问 api.cloudflare.com 时不使用代理)- 公网 ipv4 访问不是很安全,考虑后续将 ddns 迁移到群晖中,直接开ipv6 访问
群晖链路聚合开启(RAX50 不支持链路聚合,lan 口只能到千兆,跑不满绿联 2.5G 带宽)- 时间机器构建
- mac 常用文件自动备份到群晖任务构建
- 冷备份任务构建
- 2015mac docker容器配置及配置文件备份
- 7 中的关键任务自动同步到群晖防丢失
- 考虑将此次黑裙关键步骤细化,落为文档,防丢失
- 风扇自动调速脚本配置,目前弄了个简版,后续再配置和优化
风扇转速脚本(待测试)
保存为 fan_control.sh,然后执行脚本
chmod +x fan_control.sh sudo ./fan_control.sh
#!/bin/bash
FAN_CONTROL="/sys/devices/platform/it87.2608/hwmon/hwmon2/pwm3"
# 检查必要的命令是否存在
command -v sensors >/dev/null 2>&1 || { echo "需要安装 lm-sensors,请先运行: apt-get install lm-sensors"; exit 1; }
command -v bc >/dev/null 2>&1 || { echo "需要安装 bc,请先运行: apt-get install bc"; exit 1; }
# 检查文件权限和路径
if [ ! -w "$FAN_CONTROL" ]; then
echo "错误: 无法写入风扇控制文件 $FAN_CONTROL"
echo "请确保以root权限运行此脚本"
exit 1
fi
# 检查风扇控制模式设置是否成功
if ! echo 1 > /sys/devices/platform/it87.2608/hwmon/hwmon2/pwm3_enable; then
echo "错误: 无法设置风扇控制模式"
exit 1
fi
# 初始化变量
declare -a temp_history=()
current_pwm=85
NORMAL_INTERVAL=15
HIGH_TEMP_INTERVAL=5
TEMP_THRESHOLD=45
MIN_PWM=55
MAX_PWM=255
LOG_FILE="/var/log/fan_control.log"
# 创建日志文件(如果不存在)
touch "$LOG_FILE" 2>/dev/null || { echo "错误: 无法创建日志文件"; exit 1; }
# 温度读取函数
get_temp() {
local temp
temp=$(sensors | grep "Package id 0:" | awk '{print $4}' | tr -d '+°C')
# 检查温度读取是否成功
if [[ ! $temp =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
echo "错误: 无法正确读取温度" >> "$LOG_FILE"
return 1
fi
# 检查温度是否在合理范围内 (-20到100度)
if (( $(echo "$temp < -20 || $temp > 100" | bc -l) )); then
echo "警告: 温度读数异常: ${temp}°C" >> "$LOG_FILE"
return 1
fi
echo "$temp"
return 0
}
# 设置风扇转速函数
set_fan_speed() {
local pwm=$1
# 确保PWM值在有效范围内
if [ $pwm -lt $MIN_PWM ]; then
pwm=$MIN_PWM
elif [ $pwm -gt $MAX_PWM ]; then
pwm=$MAX_PWM
fi
# 尝试设置风扇转速
if ! echo $pwm > "$FAN_CONTROL"; then
echo "错误: 设置风扇转速失败: $pwm" >> "$LOG_FILE"
return 1
fi
return 0
}
# 主循环
while true; do
# 获取CPU温度
TEMP=$(get_temp)
if [ $? -ne 0 ]; then
# 温度读取失败,使用保守的风扇设置
echo "警告: 温度读取失败,使用默认风扇设置" >> "$LOG_FILE"
set_fan_speed 150
sleep $NORMAL_INTERVAL
continue
fi
# 根据温度设置检测间隔
if (( $(echo "$TEMP >= $TEMP_THRESHOLD" | bc -l) )); then
sleep_interval=$HIGH_TEMP_INTERVAL
else
sleep_interval=$NORMAL_INTERVAL
fi
# 设置目标风扇转速
if (( $(echo "$TEMP < 30" | bc -l) )); then
target_pwm=$MIN_PWM
elif (( $(echo "$TEMP >= 30 && $TEMP < 35" | bc -l) )); then
target_pwm=85
elif (( $(echo "$TEMP >= 35 && $TEMP < 40" | bc -l) )); then
target_pwm=120
elif (( $(echo "$TEMP >= 40 && $TEMP < 45" | bc -l) )); then
target_pwm=150
elif (( $(echo "$TEMP >= 45 && $TEMP < 50" | bc -l) )); then
target_pwm=180
elif (( $(echo "$TEMP >= 50 && $TEMP < 55" | bc -l) )); then
target_pwm=200
elif (( $(echo "$TEMP >= 55 && $TEMP < 60" | bc -l) )); then
target_pwm=225
else
target_pwm=$MAX_PWM
fi
# 平滑过渡
if [ $target_pwm -gt $current_pwm ]; then
current_pwm=$(( current_pwm + 8 ))
elif [ $target_pwm -lt $current_pwm ]; then
current_pwm=$(( current_pwm - 3 ))
fi
# 确保PWM值在有效范围内并设置风扇转速
if ! set_fan_speed $current_pwm; then
echo "错误: 风扇控制失败,等待下次尝试" >> "$LOG_FILE"
sleep $NORMAL_INTERVAL
continue
fi
# 记录日志,同时检查日志文件大小
log_size=$(stat -f %z "$LOG_FILE" 2>/dev/null || echo 0)
if [ $log_size -gt 10485760 ]; then # 10MB
mv "$LOG_FILE" "${LOG_FILE}.old"
touch "$LOG_FILE"
fi
echo "$(date '+%Y-%m-%d %H:%M:%S') - Temp: ${TEMP}°C, PWM: ${current_pwm}, Interval: ${sleep_interval}s" >> "$LOG_FILE"
# 使用trap捕获信号
trap 'echo "收到终止信号,设置风扇为默认值并退出..."; set_fan_speed 150; exit 0' SIGTERM SIGINT
sleep $sleep_interval
done

