btrbk, btrfs subvolumes的创建快照和远程备份的工具

分享于 

19分钟阅读

GitHub

  繁體 雙語
Backup tool for btrfs volumes
  • 源代码名称:btrbk
  • 源代码网址:http://www.github.com/digint/btrbk
  • btrbk源代码文档
  • btrbk源代码下载
  • Git URL:
    git://www.github.com/digint/btrbk.git
    Git Clone代码到本地:
    git clone http://www.github.com/digint/btrbk
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/digint/btrbk
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    简介

    btrbk是 btrfs subvolumes的备份工具,利用btrfs的特定功能创建原子快照并逐步将它们转移到你的备份位置。

    源和目标位置在配置文件中指定,它允许轻松配置简单场景,如"带本地附加备份磁盘的笔记本电脑",以及更复杂的场景( 比如"服务器通过ssh从多个主机接收备份,具有不同的保留策略")。

    主要功能:

    • 原子快照
    • 增量备份
    • 可以配置的保留策略
    • 备份到多个目的地
    • 通过ssh传送
    • 备份恢复( 如果在一段时间内无法达到备份目标)
    • 对非btrfs目标的加密备份
    • 通配符 subvolumes ( 适用于 Docker 和lxc容器)
    • 事务日志
    • 全面的列表和统计输出
    • 解析和跟踪btrfs父进程并从关系中接收
    • 在两个备份之间显示文件更改

    btrbk设计为作为一个定期快照和备份来运行,以及 命令行 ( 比如 )的运行。 用于立即创建附加快照的步骤。

    从v0.22.2升级

    如果你正在从 btrbk <= v0.22.2更新,请阅读升级指南

    安装

    btrbk作为单个可执行文件( perl脚本),不需要任何安装过程。 如果要正确安装包和手册页,请按照以下说明操作。

    先决条件

    • Btrfs progs: Btrfs 文件系统 实用程序> = v3.18.2
    • Perl解释器: 可能已经安装在你的系统上
    • 如果你想从/到远程位置传输备份,请执行下列操作:
    • 如果你想要速率限制和进度栏,请按以下步骤操作

    命令行指令

    要安装btrbk可执行文件以及手册页和示例配置文件,请选择以下方法之一:

    通用Linux系统

    下载并解压新的稳定的 btrbk源代码包,并键入:

    
    sudo make install
    
    
    
    

    Gentoo

    btrbk在:

    
    emerge app-backup/btrbk
    
    
    
    

    基于的Debian发行版

    btrbk在 stretch (testing) (utils): https://packages.debian.org/stretch/btrbk

    还可以通过NeuroDebian提供软件包: http://neuro.debian.net/pkgs/btrbk.html

    Fedora Linux

    btrbk在正式的Fedora档案库中: https://apps.fedoraproject.org/packages/btrbk

    
    sudo dnf install btrbk
    
    
    
    

    Arch Linux

    btrbk在 AUR: https://aur.archlinux.org/packages/btrbk/

    高山 Linux

    btrbk在 testing 中,安装:

     
    apk add btrbk
    
    
    
     

    Linux

    btrbk位于void知识库的current

    
    xbps-install -S btrbk
    
    
    
    
    概要

    请参考这里包提供的btrbk(1) 手册页以获得 命令行 选项的完整描述。

    配置文件

    在运行 btrbk 之前,你需要创建一个配置文件。 你可能想看看这个包提供的btrbk.conf.example。 有关详细说明,请参考 btrbk.conf(5) 手册页。

    使用配置文件时,强烈建议在执行备份之前使用 dryrun 命令检查输出:

    
    btrbk -c/path/to/myconfig -v dryrun
    
    
    
    

    这将读取源/目标文件系统的所有btrfs信息,并显示执行哪个操作。

    示例:带有u盘的笔记本电脑

    在本示例中,假设你有一台笔记本电脑:

    • 安装在 /mnt/btr_pool 上的btrfs root,包含一个用于 root 文件系统的subvolume rootfs ( 例如。 安装在 / 上,并为用户数据提供 subvolume home
    • 一个目录或者 subvolume /mnt/btr_pool/btrbk_snapshots,它将保存btrbk快照,
    • 一个备份磁盘,它的中包含作为 /mnt/btr_backup 装载的,包含增量备份的subvolume或者目录 mylaptop

    保留策略:

    • 保留 2天的所有快照,无论( 或者你的cron作业) 运行btrbk的频率如何
    • 保持每日快照 14天( 如果你在路上,并且没有附加备份磁盘非常方便)
    • 永久保存每月备份
    • 每周保存 10周的备份
    • 保留 20天的每日备份

    /etc/btrbk/btrbk-mylaptop.conf:

    
    snapshot_preserve_min 2d
    
    
    snapshot_preserve 14d
    
    
    
    target_preserve_min no
    
    
    target_preserve 20d 10w *m
    
    
    
    snapshot_dir btrbk_snapshots
    
    
    
    volume/mnt/btr_pool
    
    
     subvolume rootfs
    
    
     target send-receive/mnt/btr_backup/mylaptop
    
    
    
     subvolume home
    
    
     target send-receive/mnt/btr_backup/mylaptop
    
    
    
    

    /etc/cron.daily/btrbk:

    
    #!/bin/sh
    
    
    exec/usr/sbin/btrbk -q -c/etc/btrbk/btrbk-mylaptop.conf run
    
    
    
    
    • 这将在每天创建快照:
      • /mnt/btr_pool/btrbk_snapshots/rootfs.YYYYMMDD
      • /mnt/btr_pool/btrbk_snapshots/home.YYYYMMDD
    • 并在以下位置创建增量备份:
      • /mnt/btr_backup/mylaptop/rootfs.YYYYMMDD
      • /mnt/btr_backup/mylaptop/home.YYYYMMDD

    如果只在附加备份磁盘时希望创建快照,只需在配置中添加以下行:

    
    snapshot_create ondemand
    
    
    
    

    示例:主机在文件服务器上启动备份

    假设你在"myserver.mydomain.com" 中有一个文件夹,你想要创建笔记本磁盘的备份,配置如下所示:

    
    ssh_identity/etc/btrbk/ssh/id_rsa
    
    
    
    volume/mnt/btr_pool
    
    
     subvolume rootfs
    
    
     target send-receive/mnt/btr_backup/mylaptop
    
    
     target send-receive ssh://myserver.mydomain.com/mnt/btr_backup/mylaptop
    
    
    
    

    除了在 /mnt/btr_backup/mylaptop 上安装的本地usb磁盘备份外,增量备份还将被推送到 myserver.mydomain.com

    示例:文件服务器从多个主机启动备份

    如果你是系统管理员,并且希望直接从服务器服务器中触发备份,则配置将如下所示:

    
    ssh_identity/etc/btrbk/ssh/id_rsa
    
    
    
    volume ssh://alpha.mydomain.com/mnt/btr_pool
    
    
     subvolume rootfs
    
    
     target send-receive/mnt/btr_backup/alpha
    
    
    
     subvolume home
    
    
     target send-receive/mnt/btr_backup/alpha
    
    
    
    volume ssh://beta.mydomain.com/mnt/btr_pool
    
    
     subvolume rootfs
    
    
     target send-receive/mnt/btr_backup/beta
    
    
    
     subvolume dbdata
    
    
     target send-receive/mnt/btr_backup/beta
    
    
    
    

    这将从 alpha/beta.mydomain.com 和本地创建备份:

    • /mnt/btr_backup/alpha/rootfs.YYYYMMDD
    • /mnt/btr_backup/alpha/home.YYYYMMDD
    • /mnt/btr_backup/beta/rootfs.YYYYMMDD
    • /mnt/btr_backup/beta/dbdata.YYYYMMDD

    示例:本地时间机( 每小时快照)

    如果你想要的只是定期创建你的主目录快照:

    /etc/btrbk/btrbk.conf:

    
    timestamp_format long
    
    
    snapshot_preserve_min 18h
    
    
    snapshot_preserve 48h 20d 6m
    
    
    
    volume/mnt/btr_pool
    
    
     snapshot_dir btrbk_snapshots
    
    
     subvolume home
    
    
    
    

    /etc/cron.hourly/btrbk:

    
    #!/bin/sh
    
    
    exec/usr/sbin/btrbk -q run
    
    
    
    

    请注意,你可以每小时运行一次 btrbk,通过从 命令行 调用 sudo btrbk run 来运行 比如。 通过这个设置,所有额外的快照将保留 18小时。

    示例:多个btrbk实例

    假设我们有一个主机( 在 192.168.0.42 ) 运行btrbk的时间机器示例 上面,我们需要一个备份服务器来获取快照。

    /etc/btrbk/btrbk.conf ( 备份服务器上):

    
    target_preserve_min no
    
    
    target_preserve 0d 10w *m
    
    
    
    volume ssh://192.168.0.42/mnt/btr_pool
    
    
     subvolume home
    
    
     snapshot_dir btrbk_snapshots
    
    
     snapshot_preserve_min all
    
    
     snapshot_create no
    
    
    
     target send-receive/mnt/btr_backup/my-laptop.com
    
    
    
    

    如果服务器使用这里配置运行 btrbk,则 10 weeklies和所有monthlies都从 192.168.0.42 接收。 源 文件系统 从未因 snapshot_preserve_min all 而改变。

    示例:从btrfs源备份

    首先在备份服务器上创建 btrfs subvolume:

    
    # btrfs subvolume create/mnt/btr_backup/myhost_sync
    
    
    
    

    在日常cron脚本中,在运行btrbk之前,将你的源代码同步到 myhost_sync,如下所示:

    
    rsync -a --inplace --delete -e ssh myhost.mydomain.com:/data//mnt/btr_backup/myhost_sync/
    
    
    
    

    然后运行 btrbk,使用myhost_sync配置 ,不带任何目标插件,如下所示:

    
    volume/mnt/btr_backup
    
    
     subvolume myhost_sync
    
    
     snapshot_name myhost
    
    
    
     snapshot_preserve_min latest
    
    
     snapshot_preserve 14d 20w *m
    
    
    
    

    这将生成每日快照 /mnt/btr_backup/myhost.20150101,并按snapshot_preserve选项定义保留。

    请注意提供的脚本: "contrib/cron/btrbk-mail" 对这里有支持 !

    示例:针对非btrfs目标的加密备份

    如果备份服务器不支持 btrfs,你可以将你的subvolumes发送到原始文件。

    这是一个的实验特性: btrbk支持"原始"目标,这意味着 btrfs subvolume使用 btrfs send ( 镜像 文件系统 级别数据) 发送,但是它会被目标 文件系统 重定向到文件,它被重定向到一个文件,有可能被压缩并通过GnuPG进行管道传输。

    /etc/btrbk/btrbk.conf:

    
    raw_target_compress xz
    
    
    raw_target_encrypt gpg
    
    
    gpg_keyring/etc/btrbk/gpg/pubring.gpg
    
    
    gpg_recipient btrbk@mydomain.com
    
    
    
    volume/mnt/btr_pool
    
    
     subvolume home
    
    
     target raw ssh://cloud.example.com/backup
    
    
     ssh_user btrbk
    
    
     # incremental no
    
    
    
    

    这将在目标主机上创建一个加密的。压缩的文件。 对于每个备份,将创建两个文件:

    • /backup/home.YYYYMMDD.btrfs.xz.gpg: 包含btrfs发送流的主数据文件,
    • /backup/home.YYYYMMDD.btrfs.xz.gpg.info :包含btrbk使用的元数据的sidecar文件。

    请注意,你正在使用原始的增量备份,备份,请确保你理解了的含义。

    设置 SSH

    由于btrbk需要远程访问远程端,所以最好采取你可以采取的所有安全预防措施。 通常在不使用用户交互的情况下生成备份,因这里不能使用密码保护ssh密钥。 below 将向你提供有关如何保护你的ssh服务器以实现备份方案的提示。 注意,远程端并不需要btrbk可执行文件,但是你需要btrfs包中的"/sbin/btrfs"。

    btrbk带有 shell script" ssh_filter_btrbk.sh",它限制了对快照创建和发送/接收操作( 请参见 ssh_filter_btrbk(1) ) 所需的对/sbin/btrfs 命令的理性调用。 下面是一个关于如何将它的与ssh一起使用的示例:

    步骤 1 ( 客户端): 创建一个专用于btrbk的ssh密钥,无需密码保护:

    
    ssh-keygen -t rsa -b 2048 -f/etc/btrbk/ssh/id_rsa -C btrbk@mydomain.com -N""
    
    
    
    

    步骤 2 ( 服务器): 将" ssh_filter_btrbk.sh"从btrbk项目复制到"/backup/scripts/".

    步骤 3 ( 服务器): 向"/root/.ssh/authorized_keys", 添加 public 密钥 (/etc/btrbk/ssh/id_rsa.pub)的内容,并配置在这里密钥用于身份验证时执行的" ssh_filter_btrbk.sh"。 示例行:

    
    # example backup source (also allowing deletion of old snapshots)
    
    
    command="/backup/scripts/ssh_filter_btrbk.sh -l --source --delete" <pubkey>...
    
    
    
    # example backup target (also allowing deletion of old snapshots)
    
    
    command="/backup/scripts/ssh_filter_btrbk.sh -l --target --delete" <pubkey>...
    
    
    
    # example fetch-only backup source (snapshot_preserve_min=all, snapshot_create=no),
    
    
    # restricted to subvolumes within/home or/data
    
    
    command="/backup/scripts/ssh_filter_btrbk.sh -l --send -p/home -p/data" <pubkey>...
    
    
    
    

    你可能还希望限制对网络内 static IP地址的ssh访问:

    
    from="192.168.0.42",command="/backup/scripts/ssh_filter_btrbk.sh [...]" <pubkey>...
    
    
    
    

    有关" ssh_filter_btrbk.sh"选项的描述,请参考 ssh_filter_btrbk(1),以及 sshd(8) 文件的描述,以获取"authorized_keys"文件格式的描述。

    同时考虑为专用于btrbk的用户设置ssh访问,并选择:

    • backend btrfs-progs-btrbk 要完全摆脱 ssh_filter_btrbk.sh, 和 btrfs-progs-btrbk
    • backend btrfs-progs-sudo,配置/etc/sudoers, 并考虑使用" ssh_filter_btrbk.sh --sudo"选项。

    为了更安全,在/etc/ssh/sshd_config ( 请参见 sshd_config(5) ) 中设置 chroot 环境。

    还原备份

    btrbk没有提供任何恢复备份的机制,这必须手动完成。 在示例 below 中,我们假设你有一个装载到 /mnt/btr_pool的lsn卷,你想要还原的subvolume位于 /mnt/btr_pool/data 中。

    重要: 在恢复后不要使用 btrfs property set 使subvolume读取写入。 这是一个低级别命令,并将"接收 UUID"留在 false 状态,使btrbk在后续增量备份中失败。 相反,使用下面描述的btrfs subvolume snapshot ( 没有 -r 标志)。

    示例:还原快照

    首先,选择要还原的快照:

    
    btrbk list snapshots
    
    
    
    

    从列表中选择要还原的快照。 假设它是 /mnt/btr_pool/_btrbk_snap/data.20150101

    如果损坏的subvolume仍然存在,请将它的移走:

    
    mv/mnt/btr_pool/data/mnt/btr_pool/data.BROKEN
    
    
    
    

    现在还原快照:

    
    btrfs subvolume snapshot/mnt/btr_pool/_btrbk_snap/data.20150101/mnt/btr_pool/data
    
    
    
    

    就是这样,你的data subvolume被恢复了。 如果一切正常就是时候核对破坏的subvolume了

    
    btrfs subvolume delete/mnt/btr_pool/data.BROKEN
    
    
    
    

    示例:还原备份

    首先,选择要还原的备份:

    
    btrbk list backups
    
    
    
    

    从列表中选择要还原的备份。 假设它是 /mnt/btr_backup/data.20150101

    如果损坏的subvolume仍然存在,请将它的移走:

    
    mv/mnt/btr_pool/data/mnt/btr_pool/data.BROKEN
    
    
    
    

    现在还原备份:

    
    btrfs send/mnt/btr_backup/data.20150101 | btrfs receive/mnt/btr_pool/
    
    
    btrfs subvolume snapshot/mnt/btr_pool/data.20150101/mnt/btr_pool/data
    
    
    btrfs subvolume delete/mnt/btr_pool/data.20150101
    
    
    
    

    或者,如果要还原远程主机上的数据,请执行如下操作:

    
    btrfs send/mnt/btr_backup/data.20150101 | ssh root@my-remote-host.com btrfs receive/mnt/btr_pool/
    
    
    
    

    如果一切顺利,请打开损坏的subvolume:

    
    btrfs subvolume delete/mnt/btr_pool/data.BROKEN
    
    
    
    
    常见问题解答

    请务必阅读 btrbk FAQ页面。 通过询问帮助改进它 !

    捐赠

    所以btrbk保存了你的一天?

    我将绝对继续开发 btrbk,但如果你想支持我,你可以执行以下操作:

    Donate

    插件开发

    源代码库

    使用Git管理btrbk的源代码。

    正式存储库:

    
    git clone https://dev.tty0.ch/btrbk.git
    
    
    
    

    在GitHub上镜像:

    
    git clone https://github.com/digint/btrbk.git
    
    
    
    

    :如何贡献

    欢迎你的捐赠 !

    如果你想要贡献或者找到 Bug:

    建议任何反馈 !

    许可证

    btrbk是免费软件,可以在 GNU通用 public 许可证下使用,版本 3。


    tool  备份  SNA  snap  backups  btrfs  
    相关文章