我们有一个外部 USB 2 驱动器,我们将其用作配置的备份驱动器。我们使用快照用于备份。它使用一些标准命令来管理快照:
rm -rf
:删除过期的快照mv
:将较旧的快照向下移动一个位置cp -al
:将最后一个快照复制到新插槽rsync -a --delete --numeric-ids --relative
:同步新快照
从下面的日志可以看出,大部分时间都花在了以下rm -rf
步骤上cp -al
:
[25/Dec/2010:14:00:02] rsnapshot hourly: started
[25/Dec/2010:14:00:02] echo 21012 > /var/run/rsnapshot.pid
[25/Dec/2010:14:00:02] rm -rf /mnt/extdrive/snapshots/hourly.5/
[25/Dec/2010:14:15:48] mv /mnt/extdrive/snapshots/hourly.4/ /mnt/extdrive/snapshots/hourly.5/
[25/Dec/2010:14:15:48] mv /mnt/extdrive/snapshots/hourly.3/ /mnt/extdrive/snapshots/hourly.4/
[25/Dec/2010:14:15:48] mv /mnt/extdrive/snapshots/hourly.2/ /mnt/extdrive/snapshots/hourly.3/
[25/Dec/2010:14:15:48] mv /mnt/extdrive/snapshots/hourly.1/ /mnt/extdrive/snapshots/hourly.2/
[25/Dec/2010:14:15:48] cp -al /mnt/extdrive/snapshots/hourly.0 /mnt/extdrive/snapshots/hourly.1
[25/Dec/2010:14:23:32] rsync -a --delete --numeric-ids --relative /etc /mnt/extdrive/snapshots/hourly.0/sm4/
[25/Dec/2010:14:23:52] touch /mnt/extdrive/snapshots/hourly.0/
[25/Dec/2010:14:23:52] rm -f /var/run/rsnapshot.pid
[25/Dec/2010:14:23:52] rsnapshot hourly: completed successfully
我的问题:
我目前使用 ext4 作为文件系统。也许这不是 Red Hat 中最好的选择。有人有什么建议可以加快这个过程吗?
分区的挂载选项是
sync,dirsync 1 2
。由于它仅用于 rsnapshot,有没有办法优化它?当然,如果能给出理由就更好了。
答案1
ext4 很好。
“sync,dirsync”选项使数据和元数据更新同步,这对大多数工作负载的性能有重大负面影响。删除这些选项很可能会提高性能,但您必须记住在拔出电缆之前卸载设备,否则您可能会丢失数据(可能这就是为什么首先添加这些选项的原因,它们不是默认选项,或者可能是您的发行版对 USB 设备施展的某种特殊魔法)。
noatime 禁用 atime 更新,从而减少对文件系统的写入量。包括 rsnapshot 在内的所有应用程序几乎都不需要 atimes,因此这应该是绝对安全的。
data=writeback 减少了日志记录的开销,但代价是稍微增加了断电时丢失数据的可能性。根据发行版的不同,这可能已经是默认设置。
使用 ext4 也可以完全禁用日志(从内核 2.6.29 开始),尽管我不推荐这样做。它仍然具有 ext4 的所有其他改进,因此这应该比使用 ext2 更快,仅供参考。
barrier=0 禁用屏障,这可以提高写入的性能,但代价是增加了崩溃时数据丢失的可能性。
答案2
您可以配置 rsnapshot 以保留更多快照(例如 9999 个),然后使用 crontab 自行从磁盘中删除它们。这将使 rnapshot 的速度更加可预测。
答案3
还要注意,使用--link-dest
也会改变完成的计划cp
,这会显著影响性能(它基本上只是rm
然后hourly.$old
使用来同时从源rsync
进行复制和同步)。hourly.1
hourly.0
关于这里有替代技术- 基本上是将最后一个每小时快照旋转到新的快照中,mv hourly.$old hourly.0
而不是rm
-ing 它,然后执行cp -afl
from hourly.1
ontohourly.0
以使其保持最新状态,但我还没有尝试过 - 你必须手动进行旋转,而不是依靠rsnapshot
它来做