如何限制页面缓存/缓冲区大小

如何限制页面缓存/缓冲区大小

我的问题是:我的笔记本电脑的磁盘子系统相对较慢(我不会买更好的),我用它备份系统,rsync效果很好。然而,在备份过程中,读取的文件被读入系统的缓冲区/缓存中,最终触发交换系统。

例如,运行cat Win10.qcow2 > /dev/null一个 60 GB 的文件将导致

free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       2.2Gi       210Mi       170Mi        13Gi        12Gi
Swap:          30Gi        14Mi        30Gi

如果我写入真实设备(例如我的 USB 备份驱动器),交换空间就会开始被使用,最多可达几 GB。我确实vm.swappiness = 0/etc/sysctl

就其本身而言,这还不算什么,但由于我的磁盘系统速度较慢,计算机对输入的响应变得不那么灵敏。事实上,速度慢得令人难以忍受。

我想要的是一种方法来限制进程可以使用的页面缓冲区的数量,留下足够的空间来运行较小的命令,例如打开终端。

我尝试过的是使用lxc,它没有限制系统对缓冲区的使用,docker但我还不能完全弄清楚,我正在尝试运行lxd,但我需要一些时间来弄清楚。


有一个程序nocache我认为它可行,但却rsync没有输出进度指示器。

答案1

默认情况下,rsync更新备份时会创建文件副本,然后将其移动到位。要避免此步骤,您可以使用rsync参数直接写入备份--inplace

按照https://linux.die.net/man/1/rsync

- 到位

当文件数据需要更新时,此选项会更改 rsync 传输文件的方式:rsync 不会采用默认方法,即创建文件的新副本并在完成后将其移动到位,而是将更新的数据直接写入目标文件。

这有几个效果:

(1)正在使用的二进制文件无法更新(要么操作系统会阻止这种情况发生,要么试图交换数据的二进制文件会出现异常或崩溃)。

(2)文件的数据在传输过程中将处于不一致的状态,

(3)如果传输中断或更新失败,文件数据在传输后可能会处于不一致的状态,

(4)没有写权限的文件无法被更新,并且

(5)如果目标文件中的某些数据在被复制到文件后面的位置之前被覆盖,那么 rsync 的增量传输算法的效率可能会降低(一个例外是如果您将此选项与 --backup 结合使用,因为 rsync 足够智能,可以使用备份文件作为传输的基础文件)。

警告:您不应使用此选项来更新其他人正在访问的文件,因此在选择使用此选项进行复制时要小心。

此选项对于传输具有基于块的更改或附加数据的大文件很有用,也适用于受磁盘限制而非网络限制的系统。

该选项暗示--partial(因为中断的传输不会删除文件),但与--partial-dir和冲突--delay-updates。 之前也与t 和rsync 2.6.4 --inplace不兼容 。--compare-des--link-dest

相关内容