使用 Déjà Dup / Duplicity 提高完整备份速度

使用 Déjà Dup / Duplicity 提高完整备份速度

是否有一个简单的修复方法来提高使用 Ubuntu Gnome 桌面的默认 Déjà Dup Backup 解决方案的备份速度?

实际上,我对每周的重复备份非常满意,但我设置每三个月将完整备份到本地 NAS。对于约 1TB 的数据,这大约需要整整两天的时间。

Deja Dup 备份

我认为我的重复解决方案至少存在两个瓶颈:

  1. 备份仅运行一个核心,
  2. 它仅将 50 MB 的小块上传到 NAS。

尤其是第二个问题意味着我无法充分利用我的千兆局域网。Duplicity 以大约 25 MiB/s 的速度上传文件。我手动上传一个更大的文件,轻松获得 80 MiB/s(NAS 通过 2 x 1 GbE 绑定连接)。

以下是系统监视器的典型屏幕截图: 屏幕截图 系统监视器 gnome

有人知道如何提高完整备份速度吗?例如,我可以更改块大小等吗?

答案1

找到了,Deja Dup 会覆盖默认的duplicitychunk size,源码解释了优缺点:

  // Returns volume size in megs
  int get_volsize()
  {
    // Advantages of a smaller value:
    // * takes less temp space
    // * retries of a volume take less time
    // * quicker restore of a particular file (less excess baggage to download)
    // * we get feedback more frequently (duplicity only gives us a progress
    //   report at the end of a volume) -- fixed by reporting when we're uploading
    // Downsides:
    // * less throughput:
    //   * some protocols have large per-file overhead (like sftp)
    //   * the network doesn't have time to ramp up to max tcp transfer speed per
    //     file
    // * lots of files looks ugly to users
    //
    // duplicity's default is 25 (used to be 5).
    //
    // For local filesystems, we'll choose large volsize.
    // For remote FSs, we'll go smaller.
    if (DejaDup.in_testing_mode())
      return 1;
    else if (backend.is_native())
      return 50;
    else
      return 25;
  }

我设法编译了一个自定义版本deja-dup。因此,我必须执行以下步骤:

  1. 克隆源代码

    git clone https://gitlab.gnome.org/World/deja-dup.git
    cd ./deja-dup
    
  2. 切换到支持 gtk3 的 Ubuntu 20.04 旧分支

    git checkout --track origin/40
    
  3. get_volsize()修补函数的返回值DuplicityJob.vala并增加版本号。例如。

    git apply patch40-7-1.diff
    

    patch40-7-1.diff (0.82 KB)

    diff --git a/libdeja/tools/duplicity/DuplicityJob.vala b/libdeja/tools/duplicity/DuplicityJob.vala
    index a229e8b0..bb6f77fe 100644
    --- a/libdeja/tools/duplicity/DuplicityJob.vala
    +++ b/libdeja/tools/duplicity/DuplicityJob.vala
    @@ -1399,9 +1399,9 @@ internal class DuplicityJob : DejaDup.ToolJob
         if (DejaDup.in_testing_mode())
           return 1;
         else if (backend.is_native())
    -      return 50;
    +      return 500;
         else
    -      return 25;
    +      return 250;
       }
    
       void disconnect_inst()
    diff --git a/meson.build b/meson.build
    index 266d7a36..fed8434d 100644
    --- a/meson.build
    +++ b/meson.build
    @@ -4,7 +4,7 @@
     # SPDX-FileCopyrightText: Michael Terry
    
     project('deja-dup', ['vala', 'c'],
    -    version: '40.7',
    +    version: '40.7.1',
         license: 'GPL-3.0-or-later',
         meson_version: '>= 0.47'
    
  4. 制作并安装(包括安装缺少的软件包):

    meson . _build
    ninja -C _build
    ninja -C _build install
    

瞧!

自定义编译的 deja dup


性能更新

我刚刚仔细检查了完整备份的速度,它提高了 50%(从 24 小时缩短到 12 小时左右)。不幸的是,这仍然不完美,因为它会打包每个包并在开始下一个包之前上传。但仍然比以前好...

系统监视器中改进上传功能的屏幕截图

相关内容