收起左侧

raid无法休眠

7
回复
706
查看
[ 复制链接 ]

1

主题

10

回帖

0

牛值

江湖小虾

2025-6-29 11:45:57 显示全部楼层 阅读模式

设备环境:

虚拟机:PVE 8.1.4(硬盘直通给fnOS)

局域网:内网

系统版本号:0.9.12

BUG现象:硬盘无法休眠

-四个4T硬盘组Raid 5,在0.9.8之前的版本可以正常休眠,升级之后无法休眠;

-用sudo blktrace -d /dev/sdx -o - | sudo blkparse -i -,观察四个盘超过15分钟,没有任何输出;

-另外有一个1T的单盘,没有组raid,可以正常休眠;

出现频率:必现

联系方式:手机/邮件

日志文件:可提供

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

218

主题

1万

回帖

0

牛值

管理员

fnOS1.0上线纪念勋章

2025-7-4 16:52:07 显示全部楼层

关于0.9.10之后出现无法休眠的情况可以参考链接的说明进行排查 休眠问题排查攻略 ** 部分朋友疑惑旧版本系统可以看到休眠日志而新版无记录, 是因为以前的版本休眠是模糊检测,系统发了休眠指令就判断休眠了,实际设备的休眠情况并未主动识别。 0.9.10版本自定义休眠逻辑更新后,休眠判断更严格,会靠smart信息准确判断休眠,判断不了日志就不会不展示休眠 **包括不支持SMART检测的硬件,也不会在日志记录为休眠了,实际硬盘在新版本依然会自动休眠。

我让DeepSeek帮我写了个脚本,现在通过这个脚本就能正常休眠了。  详情 回复
2025-7-16 19:48

1

主题

30

回帖

0

牛值

江湖小虾

2025-7-4 18:16:20 显示全部楼层

我不看日志,都是直接摸硬盘的,0.98后就没休眠过,以前版本是真的休眠的,硬盘不转也不热

我也是啊!以前显示休眠,9.8后就没休眠过,硬盘也很热  详情 回复
2025-7-6 09:56

1

主题

7

回帖

0

牛值

江湖小虾

2025-7-6 09:56:13 显示全部楼层
petal 发表于 2025-7-4 18:16
我不看日志,都是直接摸硬盘的,0.98后就没休眠过,以前版本是真的休眠的,硬盘不转也不热
...

我也是啊!以前显示休眠,9.8后就没休眠过,硬盘也很热

1

主题

10

回帖

0

牛值

江湖小虾

2025-7-16 19:48:46 楼主 显示全部楼层
飞牛技术同学 发表于 2025-7-4 16:52
关于0.9.10之后出现无法休眠的情况可以参考链接的说明进行排查 休眠问题排查攻略 ** 部分朋友疑惑旧版本系 ...

我让DeepSeek帮我写了个脚本,现在通过这个脚本就能正常休眠了。
在fnOS里面的日志,依然是没有休眠的日志的,但在资管管理器里面看到的状态已经都是休眠中,而且整机功耗下降了30w,用hdparm -C查看状态也的确是standby。
所以为什么fnOS就没法正常休眠呢?



附脚本:
#!/bin/bash
# SPDX-License-Identifier: MIT
# spindown_multi.sh – spin down sdb..sdf after 15 min idle
# 2025-07-14

# 要监控的磁盘列表,可按需增删
DISKS=(/dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf)
INTERVAL_SEC=900
LOGFILE="/var/log/spindown_multi.log"

# 保存初始 I/O 统计的关联数组
declare -A last_read last_write

for d in "${DISKS[@]}"; do
    dev=$(basename "$d")
    read -r last_read[$dev] last_write[$dev] < <(
        awk -v d="$dev" '$3==d {print $6" "$10}' /proc/diskstats
    )
done

log() {
    echo "$(date '+%F %T') $*" | tee -a "$LOGFILE"
}

log "Started monitoring disks: ${DISKS
  • } (interval ${INTERVAL_SEC}s)"

    while :; do
        sleep "$INTERVAL_SEC"

        for d in "${DISKS[@]}"; do
            dev=$(basename "$d")
            read -r cur_read cur_write < <(
                awk -v d="$dev" '$3==d {print $6" "$10}' /proc/diskstats
            )

            [[ -z $cur_read || -z $cur_write ]] && continue

            read_inc=$(( cur_read  - last_read[$dev]  ))
            write_inc=$(( cur_write - last_write[$dev] ))

            if (( read_inc == 0 && write_inc == 0 )); then
                hdparm -y "$d" >/dev/null 2>&1
                [[ $? -eq 0 ]] && log "$d idle – spindown issued" \
                               || log "ERROR: hdparm -y failed on $d"
            else
                log "$d busy (r $read_inc / w $write_inc) – skipped"
            fi

            last_read[$dev]=$cur_read
            last_write[$dev]=$cur_write
        done
    done

  • 情况一样,组Raid的四块不能正常休眠,其余正常,求教程  详情 回复
    2025-9-16 17:21

    0

    主题

    8

    回帖

    0

    牛值

    江湖小虾

    2025-9-16 17:21:31 显示全部楼层
    MarcoF006 发表于 2025-7-16 19:48
    我让DeepSeek帮我写了个脚本,现在通过这个脚本就能正常休眠了。
    在fnOS里面的日志,依然是没有休眠的日志 ...

    情况一样,组Raid的四块不能正常休眠,其余正常,求教程
    下面给出 通用化脚本,可同时监控 sdb、sdc、sdd、sde、sdf 五块硬盘,每 15 分钟检测一次各自 15 分钟内的 I/O 增量,若完全空闲则 hdparm -y 待机。 📄 脚本:/usr/local/bin/spindown_multi.sh #!/bin/bash # SP  详情 回复
    2025-11-12 18:44

    1

    主题

    10

    回帖

    0

    牛值

    江湖小虾

    2025-11-12 18:44:18 楼主 显示全部楼层
    [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=174860&ptid=30261][color=#999999]苏万x 发表于 2025-9-16 17:21[/color][/url][/size] 情况一样,组Raid的四块不能正常休眠,其余正常,求教程[/quote]

    下面给出 通用化脚本,可同时监控 sdb、sdc、sdd、sde、sdf 五块硬盘,每 15 分钟检测一次各自 15 分钟内的 I/O 增量,若完全空闲则 hdparm -y 待机。


    📄 脚本:/usr/local/bin/spindown_multi.sh

    #!/bin/bash
    # SPDX-License-Identifier: MIT
    # spindown_multi.sh – spin down sdb..sdf after 15 min idle
    # 2025-07-14
    
    # 要监控的磁盘列表,可按需增删
    DISKS=(/dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf)
    INTERVAL_SEC=900
    LOGFILE="/var/log/spindown_multi.log"
    
    # 保存初始 I/O 统计的关联数组
    declare -A last_read last_write
    
    for d in "${DISKS[@]}"; do
        dev=$(basename "$d")
        read -r last_read[$dev] last_write[$dev] < <(
            awk -v d="$dev" '$3==d {print $6" "$10}' /proc/diskstats
        )
    done
    
    log() {
        echo "$(date '+%F %T') $*" | tee -a "$LOGFILE"
    }
    
    log "Started monitoring disks: ${DISKS[*]} (interval ${INTERVAL_SEC}s)"
    
    while :; do
        sleep "$INTERVAL_SEC"
    
        for d in "${DISKS[@]}"; do
            dev=$(basename "$d")
            read -r cur_read cur_write < <(
                awk -v d="$dev" '$3==d {print $6" "$10}' /proc/diskstats
            )
    
            [[ -z $cur_read || -z $cur_write ]] && continue
    
            read_inc=$(( cur_read  - last_read[$dev]  ))
            write_inc=$(( cur_write - last_write[$dev] ))
    
            if (( read_inc == 0 && write_inc == 0 )); then
                hdparm -y "$d" >/dev/null 2>&1
                [[ $? -eq 0 ]] && log "$d idle – spindown issued" \
                               || log "ERROR: hdparm -y failed on $d"
            else
                log "$d busy (r $read_inc / w $write_inc) – skipped"
            fi
    
            last_read[$dev]=$cur_read
            last_write[$dev]=$cur_write
        done
    done
    

    🔧 安装步骤(与单盘相同)

    1. 保存脚本

      sudo nano /usr/local/bin/spindown_multi.sh
      # 粘贴后保存
      
    2. 赋权

      sudo chmod +x /usr/local/bin/spindown_multi.sh
      
    3. systemd 服务(开机自启)

      创建 /etc/systemd/system/spindown-multi.service

      [Unit]
      Description=Auto spin-down multiple disks after idle
      After=local-fs.target
      
      [Service]
      Type=simple
      ExecStart=/usr/local/bin/spindown_multi.sh
      Restart=always
      
      [Install]
      WantedBy=multi-user.target
      

      启用并启动:

      sudo systemctl daemon-reload
      sudo systemctl enable --now spindown-multi.service
      

    📊 查看日志

    sudo tail -f /var/log/spindown_multi.log
    

    🔧 调整事项

    • 若想增加/减少磁盘,只需修改脚本里 DISKS=(...) 一行即可。
    • 若希望间隔更短/更长,改 INTERVAL_SEC(单位为秒)。
    • 日志文件路径也可自行修改。

    参考这个配置

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则