使用“rsync”和“btrfs”快照备份

snapshotbackup的Python项目详细描述


什么

使用rsyncbtrfs文件系统上执行增量备份。 已完成的备份保留为只读快照。

用法

安装

pip install snapshotbackup
pip install snapshotbackup[ci]          # install ci related dependencies
pip install snapshotbackup[dev]         # install dev dependencies
pip install snapshotbackup[journald]    # enable logging to journald with `--silent`

示例config.ini

[DEFAULT]; retain_all = '1 day'; retain_daily = '1 month'; decay = '1 year'[data1]source=/path/to/data1backups=/backups/data1[data2]source=/path/to/data2backups=/backups/data2ignore=/.cacheretain_all='1 week'; '1', 'true' or 'True' for `True`, everything else is `False`autodecay=1autoprune=truenotify_remote=user@host

操作

<> P>如果配置的备份目录已经存在,则可以跳过安装步骤。

snapshotbackup setup data1
snapshotbackup backup data1
snapshotbackup list data1
snapshotbackup prune data1
snapshotbackup decay data1

保留政策

prune将保留:

  • 所有备份不早于retain_all
  • 每日备份不早于retain_daily
  • 永久每周备份(请参见decay
  • 始终保留最新的备份

decay删除所有早于配置的备份decay

通知

当通过cron或使用notify_remote运行时,可能需要添加 DBUS_SESSION_BUS_ADDRESS到执行环境,例如。 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus snapshotbackup backup data1

自动化

使用高级安装方法和cron时,请确保PATH 正确设置,F.E.

PATH=/usr/local/bin:/bin:/usr/bin:/home/foo/.local/bin
01 * * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus snapshotbackup backup home -s

要允许非交互式删除,请配置sudo以允许用户“foo” 使用一些不带密码的btrfs命令。

foo ALL=(ALL) NOPASSWD: /usr/bin/btrfs subvolume list *
foo ALL=(ALL) NOPASSWD: /usr/bin/btrfs subvolume delete *

开发环境

virtualenv .env -p python3
. .env/bin/activate
pip install -r requirements.txt
pip install -e .                    # or pip install -e .[journald]

演示

如果手头没有btrfs文件系统,请签出演示文件夹。 它创建一个btrfs映像文件,并将其作为环回设备装载。

disclaimer:我不确定btrfs环回文件在每个环境中是否安全。使用风险自负。

make -f makefile.demo setup
make -f makefile.demo backup
make -f makefile.demo list
make -f makefile.demo prune
make -f makefile.demo decay
make -f makefile.demo clean

请阅读makefile.demodemo/config.ini来了解发生了什么。

构建

./setup.py bdist_wheel

仅此而已

文件不够?嗯,呃..,目标受众是开发人员。 这就是你的爱好项目;-)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java通过Sybase Jconnect JDBC驱动程序与DBCP建立连接   java从ListPreference获取keyValue   java如何在安卓中定义视图的宽度和高度   字符串数组的Java置换   java问题:在字符串和字节数组之间转换时长度发生了变化?   一些Windows机器上的java JMenu字体奇怪地以粗体显示   使用java 8的小程序类的ClassNotFoundException   带有SQLite的java多项选择题测验应用程序(新活动中不显示分数)   Java在转换为列表后插入数组   JDBCType4Java。lang.ClassNotFoundException:com。mysql。jdbc。驾驶员   按键启动计时器,java   java在JavaFX中播放不带扩展名的音频文件   从服务器运行notes java代理时,ssl没有受信任的证书   java如何更新Google云数据流中的现有记录?   java NoClassDefFoundError:io/netty/util/Timer   Spring MVC控件属性的java设置值   带有spring security 5和oauth2的java日历客户端   java中的几个LWJGL问题