收起左侧

还是叠瓦盘,我想是否可以通过限速的方法避免爆盘变只读

0
回复
24
查看
[ 复制链接 ]

2

主题

4

回帖

0

牛值

江湖小虾

我想是否可以通过限速的方法避免爆盘变只读,只要写入速度低于硬盘自身写入真实盘体的速度应该就不会爆盘了,下面内容是deepseek教的,指定写入速度,我限制在25M,现在在用fastcopy复制了300G,暂时还没事。

使用 Cgroup 这类内核级通用限速方案,核心原理是通过 Linux 内核自带的 Block I/O 控制器(blkio),为特定进程组设定一个“I/O 配额”,精确地控制该组内所有进程对指定物理磁盘的写入上限。

它不依赖网络协议,因此能直接作用于本机的所有磁盘写入行为。Cgroup 分为 v1 和 v2 两个版本,它们的限速方法有所不同。考虑到飞牛NAS基于Debian 12(内核6.x),原生支持并默认启用 Cgroup v2,所以会重点介绍 v2 的 io.max 控制器。

⚖️ Cgroup v1 与 v2 对比

特性 Cgroup v1 (blkio子系统) Cgroup v2 (io控制器)
配置路径 /sys/fs/cgroup/blkio/ /sys/fs/cgroup/
限速接口 blkio.throttle.write_bps_device io.max
限速格式 : : wbps=
Buffered I/O限制 不支持 支持(通过 io.max
内核要求 旧版内核 (2.6.24+) 新版内核 (5.0+)

以下是在飞牛NAS上,使用 Cgroup v2 io.max 控制器限制特定进程写入速率的具体操作步骤。

📋 准备工作:确认设备号与系统支持

  1. SSH连接到飞牛NAS:获取 root 权限。

    sudo -i
    
  2. 确认 Cgroup v2 已启用:执行 mount | grep cgroup,如果输出包含 type cgroup2,则说明系统正在使用 Cgroup v2。

  3. 查找目标磁盘的设备号:这是限速的核心。

    ls -l /dev/disk/by-path/ | grep -v part
    

    根据设备连接的物理位置(如 PCIe、SATA 接口)和设备型号找到对应的设备,例如 sdc。然后,获取它的主次设备号:

    ls -l /dev/sdc
    # 输出示例: brw-rw---- 1 root disk 8, 32 Sep 1 10:00 /dev/sdc
    

    这里,8, 32 就是设备号。务必记录,后续将 8:32 作为目标地址。

⚙️ 操作步骤:创建Cgroup并限速

  1. 创建一个Cgroup:在 Cgroup v2 的统一层级下创建一个名为 smr_limit 的控制组。

    mkdir -p /sys/fs/cgroup/smr_limit
    
  2. 设定写入速率上限:使用上一步获取的设备号 8:32,将写入带宽上限设为 60MB/s

    echo "8:32 wbps=62914560" > /sys/fs/cgroup/smr_limit/io.max
    
    • 60MiB/s 换算为字节是 60 * 1024 * 1024 = 62914560。
    • 若需同时限制带宽,格式为 echo "8:32 rbps=62914560" > ...
  3. 将目标进程移入Cgroup:将Samba服务进程的PID写入该控制组,使其后续的所有操作都受规则约束。

    echo $(pidof smbd) > /sys/fs/cgroup/smr_limit/cgroup.procs
    
  4. 验证限速是否生效:从客户端向飞牛NAS的SMB共享拷贝一个大文件,同时用 iostat 监控。

    # -x 显示详细统计, 1 表示每秒刷新一次
    iostat -x 1
    

    观察 sdc 对应的 wkB/s 列,数值应在 61440(60MB/s)左右,说明限速生效。

  5. (可选)自动生效:以上操作重启后失效。如需开机自启,可创建一个systemd服务

    cat > /etc/systemd/system/smr-io-limit.service <
    

    [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c 'mkdir -p /sys/fs/cgroup/smr_limit

    [Install] WantedBy=multi-user.target EOF

    systemctl daemon-reload systemctl enable smr-io-limit.service systemctl start smr-io-limit.service

    code

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则