背景
我正在恢复一个数据库的tar快照。
在还原过程中,由于磁盘I/O饱和,我的计算机几乎无法使用。
不幸的是,我的操作系统(Ubuntu18.04)使用了deadline I/O调度程序,它忽略了I/O优先级的任何概念。
问题
相反,我正在尝试创建一个shell管道来限制读取源代码tar。
something db.tar.gz | tar xzf -因此,我可以控制我的写入速度,并假装我的操作系统缺少真正的I/O调度器。
我该怎么做呢?
尝试
到目前为止,我已经尝试过pv,但是它似乎不适合这个任务。
pv -L 5M db.tar.gz | tar xzf -进度指示器经常显示速度超过限制数倍,当发生这种情况时,我的计算机就会锁定。
发布于 2020-02-11 06:44:39
系统在磁盘IO上阻塞并要求限制吞吐量是不正常的,但是您要求的是StackOverflow而不是ServerFault,所以...
pv命令按照通告的方式工作。您看到速度峰值的原因是tar暂时太慢了,所以pv让它读得更快,以赶上平均5MiB/s的速度。
任何给定的5MB gzipped数据块都可以对应于从5MB到100MB+的任何未压缩数据,因此为了使处理更加统一,您可以在解压后应用它:
gzip -d < db.tar.gz | pv -L 5M | tar x如果做不到这一点,你可以拼凑一个bash循环,它将以稳定的速度编写,并且不允许追赶:
cat db.tar.gz |
while sleep 1 && [[ $(LC_ALL=C dd bs=5M count=1 2>&1 >&3) != "0+0 records"* ]] 3>&1; do true; done |
pv |
tar xzhttps://stackoverflow.com/questions/60159205
复制相似问题