为什么 tar 备份命令成功完成后系统会滞后或停顿?

为什么 tar 备份命令成功完成后系统会滞后或停顿?

我有一个脚本,它通过 tar 作为服务器的 cronjob 运行系统文件备份。每次启动脚本时,它都会成功完成任务。所有备份都经过测试,似乎可以正常工作且没有损坏。

但是,我的系统停滞并冻结了一段时间,并且命令执行速度很慢。这与我运行图形桌面时的情况相同。那么,为什么 tar 运行后系统会停滞?

这是我的 crontab 脚本中用于 tar 备份运行的命令。

tar -zcvf tarbackup.tar.gz --one-file-system \
--exclude=/run \
--exclude=/tmp \
--exclude=/home \
--exclude=*.system.tar.gz \
--exclude=*.home.tar.gz \
/

編輯:

为了解决这个问题,我每次都必须重启。我希望了解为什么会发生这种情况,这样我就可以探索运行 tar 备份而无需重启系统的选项。

答案1

在将脏页写入磁盘时会发生停顿;您可以在此快速了解该问题这篇 LWN 文章基本上,当前用于缓存写入的内存量的默认值太高了。尝试设置/proc/sys/vm/dirty_background_bytes至 104857600 和/proc/sys/vm/dirty_bytes改为 209715200。您可以通过运行sysctl或永久编辑来为当前启动执行此操作/etc/sysctl.conf

答案2

此答案的功能是避免您必须操作 dirty_bytes/dirty_background_bytes 系统全局变量,这可能会在未进行备份时影响其他应用程序。

老实说,这有点儿像黑客行为,但我还是保留它,以防它对你有用。

tar -zcv --one-file-system \
--exclude=/run \
--exclude=/tmp \
--exclude=/home \
--exclude=*.system.tar.gz \
--exclude=*.home.tar.gz \
/ | \
dd bs=2048k oflag=sync of=tarbackup.tar.gz

相关内容