我的问题是:我的笔记本电脑的磁盘子系统相对较慢(我不会买更好的),我用它备份系统,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