CentOS 5.6
NFS 安装在服务器上用于备份磁盘空间。当备份作业开始时,它可以达到 80MB/s,我们真的没想到它会占用这么多带宽。所以我需要找到一种方法来限制写入 NFS 的速度。
我试过同步和--bwlimit=5000不过确实限制了读取速度,但累计数据还是以80MB/s的速度写入,并且几秒钟内没有写入活动。
有没有什么办法可以限制NFS的写入速度?
答案1
抱歉开了这么老的帖子,但我写了一个小脚本来限制使用该pv
命令的传输速度,它也适用于 NFS。我唯一还没解决的问题是速度下降,只有当我使用 NFS 而不是 sshfs 时才会发生这种情况,一切都很好。
我的服务器 NFS 配置(导出):
rw,sync,no_subtree_check
客户端配置(挂载选项):
rsize=8192,wsize=8192,timeo=14,intr,_netdev,noauto,hard,sync
这是我的脚本:
#!/bin/bash
# Simple Script to mv files OR folders at $3 BPS
tor_path="$1"
mv_dir="$2"
speed="$3"
tor_dir="$(basename "$tor_path")"
file=""
tlines=""
cnt=""
file=""
[[ "$mv_dir" != *"/" ]] && mv_dir=""$mv_dir"/"
if [[ -f "$tor_path" ]] && [[ -d "$mv_dir" ]]
then
pv -L "$speed" "$tor_path" > "$mv_dir""$tor_dir"
elif [[ -d "$tor_path" ]] && [[ -d "$mv_dir" ]]
then
tor_files="$(mktemp --tmpdir tor_files.XXXXXX)"
[[ "$tor_path" != *"/" ]] && tor_path=""$tor_path"/"
find "$tor_path" -type d > "$tor_files"
sed 's#'"$tor_path"'#'"$tor_dir"'/#g; s###g' -i "$tor_files"
tlines="$(wc -l < "$tor_files")"
cnt=0
while [ "$cnt" -lt "$tlines" ]
do
let cnt++
file="$(head -n $cnt $tor_files | tail -1)"
mkdir "$mv_dir""$file"
done
find "$tor_path" -type f > "$tor_files"
sed 's#'"$tor_path"'#'"$tor_dir"'/#g' -i "$tor_files"
tlines="$(wc -l < "$tor_files")"
cnt=0
while [ "$cnt" -lt "$tlines" ]
do
let cnt++
file="$(head -n $cnt $tor_files | tail -1)"
pv -L "$speed" "$tor_path""$(basename "$file")" > "$mv_dir""$file"
done
rm "$tor_files"
else
exit 1
fi
答案2
NFS 不提供限制客户端使用的带宽的方法。
您看到的行为是数据积累然后全速写入,脏页在客户端增长然后被刷新到 NFS 服务器。这是 IO 工作的预期方式。
在 Linux NFS 客户端上,您可以使用它tc
来匹配和控制流量。这很简单,只需创建一个以 NFS 服务器的 IP 地址为目标的类,然后对该类进行速率限制即可。
这在Linux 高级路由和流量控制指南,具体见第 9 章带宽管理的排队原则并在 之内man tc
。
以下是要使用的确切命令的示例:http://iomem.com/archives/17-Rate-limiting-with-sch_htb.html