Essa certamente não é uma tarefa trivial que não pode ser realizada no espaço do usuário. Felizmente, é possível fazer no Linux, usando o cgroup
mechanizm e seu controlador blkio .
A configuração do cgroup é de alguma forma específica da distribuição, pois já pode ser montada ou até usada em algum lugar. Aqui está uma idéia geral, no entanto (supondo que você tenha uma configuração adequada do kernel):
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir -p /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
Agora que você blkio
configurou o controlador, pode usá-lo:
mkdir -p /sys/fs/cgroup/blkio/limit1M/
echo "X:Y 1048576" > /sys/fs/cgroup/blkio/limit1M/blkio.throttle.write_bps_device
Agora você tem um cgroup limit1M
que limita a velocidade de gravação no dispositivo com números maiores / menores X: Y a 1MB / s. Como você pode ver, esse limite é por dispositivo. Tudo o que você precisa fazer agora é colocar algum processo dentro desse grupo e deve ser limitado:
echo $PID > /sys/fs/cgroup/blkio/limit1M/tasks
Não sei se / como isso pode ser feito em outros sistemas operacionais.
echo "X:Y 1073741824" > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
e você obter X e Y por exemplols -l /dev/sda