btrfs的智能、功能丰富的备份

btrfs-backup的Python项目详细描述


btrfs备份
====
此项目支持在文件系统之间使用*快照*和*发送/接收*对*btrfs*进行增量备份。把它看作是时间机器的基本版本。


备份可以本地和/或远程存储(例如通过ssh)。支持多目标
设置以及处理传输故障
(例如由于网络中断)。


其主要目标是**可靠**和**功能**,同时保持**用户友好性**。不需要详细了解btrfs发送/接收的工作原理,只需几分钟就可以轻松开始。但是,您应该对快照和
子卷有一个基本的了解。

各种设置,只需很少的维护工作。


作者:克里斯·劳伦斯。从那时起,大部分代码都经过了重构,并且在这个存储库转移到我之前添加了许多新功能。感谢chris的工作。
旧的代码库已经被标记为"legacy"。如果出于任何原因,
您想继续使用它并错过新的功能,可以查看
这一点。

:最新版本:v0.3.0
:下载:http://pypi.python.org/pypi/btrfs廑backup
:来源:https://github.com/efficiosoft/btrfs backup
:平台:linux>;=3.12,python>;=3.3
:关键字:备份、btrfs、快照、发送、接收,ssh


features
----
-初始创建完整备份
-后续运行时的增量备份
-不同的备份存储引擎:

-本地存储
-通过ssh进行远程存储
-自定义存储:或者,"btrfs"的输出发送``可以通过管道将
传输到自定义shell命令。

-多目标支持,跟踪每个位置上缺少的快照。
-错误时重新传输(例如由于网络中断)。
-本地和远程的简单可配置的保留策略快照
-可以选择,创建快照而不将其传输到任何位置
,反之亦然。
-创建没有根权限的备份,如果满足某些特殊的
条件
-具有可配置日志级别的详细日志输出



通常,您需要**至少**3.12 with
Linux 3.12/3.13
(可选)openssh的"ssh"命令-需要远程备份拉取
并通过ssh推送
(可选)``sshfs`-只需要通过ssh拉取
(可选)``pv``命令来显示进程备份

通过pip安装
~~~~~~~~~~~~~~~~~~~
使用最新稳定版本启动和运行的最简单方法是通过pip。如果系统中缺少"pip3",并且运行基于debian的发行版,只需通过:







$sudo apt get install python3 pip python3 wheel

您可以获取最新版本的btrfs备份:




$sudo pip3 install btrfs-u backup


预构建包
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以下发行版提供预构建包。

-`arch linux<;https://aur.archlinux.org/packages/python btrfs backup>;`(感谢xengi对此进行了维护)


手动安装克隆这个git存储库

::


$git clone https://github.com/efficiosoft/btrfs backup
$cd btrfs backup
$git checkout tags/v0.3.0\r可选地签出特定版本
$sudo./setup.py install


本自述文件解释了btrfs备份的每个功能,因为
以及命令中包含的说明性帮助。

但是,有一些关于一般概念和不同用法的部分,可以尽快开始使用。

"btrfs backup--help``的输出副本附在下面。


作为根:





$btrfs backup/home/backup

这将在
`/home/snapshot/yymmd-hhmms``中创建一个"home"的只读快照,然后将其发送到
`/backup/yymmdd-hhmms```。在以后的运行中,它将获取一个新的只读快照,并发送前一个快照与新快照之间的差异。

**注意:源和目标都需要在btrfs文件系统上。
此外,源必须是根或任何其他子卷,
但不仅仅是一个普通目录,因为快照只能创建子卷的
.*


为了使备份更合理,源和目标不应该是同一个文件系统。否则,您只需快照并省去麻烦。

您可以将多个子卷备份到目标位置的多个子文件夹或子卷。例如,您可能需要同时备份`/``和
`/home`。主要的警告是,您需要将备份放在目标驱动器上的单独
文件夹中,以避免混淆。


::


$btrfs backup//backup/root
$btrfs backup/home/backup/home



位置相同,必须使用`-p/--snapshot prefix`
选项指定前缀。否则,btrfs备份无法区分您的
不同备份链,并将它们混淆。使用上面
中的示例,可以如下所示:

::


$btrfs backup--snapshot prefix root//backup
$btrfs backup--snapshot prefix home/home/backup

您可以指定`-n/--num snapshots<;num>;``以仅保留最新的
`<;num>;``源文件系统上的快照数。``-n/--num备份
<;num>;``对备份位置执行相同的操作。

这是有效的。建议设置公钥身份验证以消除输入密码的需要。有关如何自定义"ssh"调用的详细说明,请参见帮助文本。


现在还支持从远程端提取备份!简单地使用ssh://``方案作为源。

如果由于任何原因无法在任一远程主机上安装btrfs backup
,则可以使用此选项。但是请记住,这个过程会产生两个通信量(从"源服务器"到您,从
到"目标服务器"。

好的,最后一个例子,因为我真的很喜欢这个:




$btrfs backup ssh://source\server/home\
/mnt/backups\
ssh://dest_server/mnt/backups

您能猜出它的功能吗?好吧,它的作用与前面的命令相同,+
额外发送到本地`/mnt/backups``文件夹。请注意,
btrfs备份不够智能,无法防止同一数据两次从"源服务器"提取。但用当前的设计来实现这一点并不容易。




help text
--
这是"btrfs backup--help"的输出。看看它,
你应该对它能做什么和不能做什么有一个很好的了解。




默认情况下,BTRFS备份不会读取任何配置文件。但是,
可以创建一个或多个并在命令行中指定它们:





$btrfs backup@path/to/backup_home.conf


以"`@"为前缀的任何参数都将被视为
配置文件的文件名。

这些文件的格式很简单。在每一行上,可能有一个标志,
选项或参数,您通常会在命令行中指定。有效的
配置文件可能如下所示。

`backup_home.conf`:




以及空行。

/mnt/backups/home
ssh://server/mnt/btrfs-u-storage/backups/home

``global.conf``:





可在帮助
文本中找到。



什么是锁?
----
btrfs备份使用所谓的"锁"来跟踪失败的快照传输。快照文件夹中创建了一个名为`.outstanding_transfers``的文件。此文件为json格式,因此可供人阅读,如有必要,


锁定的工作方式如下:

。启动快照传输时,会在该文件中创建一个条目,
表示已开始将特定快照的快照传输到特定的
目标。我们称这个入口为锁。如果快照传输使用另一个快照作为父快照,则该快照也会获取一个条目,但不会锁定,只需注意,对于无法传输的内容,它是父快照。当传输

完成时没有错误,快照(及其父快照)的锁将被移除。
。中止(例如,由于网络中断或磁盘已满),锁将被保留。


现在,有多个选项可用于处理这些失败的传输。

以及相应的锁
和父注释。之后,这条路可以免费换车。您还可以使用`--no snapshot``只进行传输,而不创建新的快照。


有一个名为`--locked dests`的特殊标志可用。如果提供,
它会自动添加所有存在锁的目的地,就好像它们是在命令行中指定的一样。您可以执行如下操作:



$btrfs backup--no snapshot--locked dests/home

以重试所有失败的``/home``快照备份传输。此
可以定期执行,因为如果没有锁,则它将不执行任何操作。


传输的快照可以从目标中删除,也可以手动删除(见下文)。


作为删除不想再重试的传输锁的最后手段,有一个名为`--remove locks``的标志。请谨慎使用
,并且仅当您可以确保在应用标志的
目标上没有损坏的快照时。


::

$btrfs backup--没有快照--没有传输--删除锁/home ssh://nas/backups

`` ssh://nas/backups``来自
``/home/snapshot/.outstanding\u transfers``。当然,使用
`--locked dests``而不是显式指定目标
也是可能的。




定期备份
————————————————————————————————————————————————————————————————————————如果您经常备份
(即比完成第一次调用要快,
这可能需要几分钟、几个小时甚至几天的时间在一个包含
很多文件的文件系统上),那么您可能会在一个
旧的备份仍在进行时启动一个新的备份。

使用``flock(1)``命令缺少锁定,
如https://github.com/efficiosoft/btrfs backup/issues/4所示。


使用Debian上的anacron,只需添加一个文件
`/etc/cron.daily/local backup`:

。代码:sh

!/bin/sh
flock-n/tmp/btrfs-backup-home.lock\
ionice-c 3 btrfs backup--quiet--num snapshots 1--num backups 3\
/home/backup/home

正在运行。

可以使用其他``cron.``
脚本进行更多或更少的频繁备份。



还原快照
您可以使用以下方法还原整个快照:例如




$mkdir/home/snapshot
$btrfs send/backup/yymmdd-hhmms btrfs receive/home/snapshot

-ar--reflink/home/snapshot/yymmdd-hhmms/home

然后将装入的
子卷重新旋转到读写快照。



/active/home
/inactive
/snapshot/root/yymmdd-hhmms
/snapshot/home/yymmdd-hhmms

,并在`/etc/fstab``中有相应的条目以从`/active/*``装载子卷。这种方法的一个好处是,恢复
快照完全可以使用btrfs工具来完成:




$btrfs send/backup/root/yymmdd-hhmms btrfs receive/snapshot/home
$btrfs send/backup/home/yymmdd-hhmms btrfs receive/snapshot/root
$mv/active/root/inactive
$mv/active/home/inactive
$btrfs子卷快照/snapshot/root/yymmdd-hhmms/active/root
$btrfs子卷快照/snapshot/home/yymmdd-hhmms/active/home

"快照文件夹"选项。



当您找到一个时,
请在github上打开一个问题。如果您这样做了,请将输出
包含在调试日志级别(``-v debug``)中,并提供重现问题的步骤。谢谢您!

如果你想贡献,那太好了!您可以创建问题(对于功能请求,甚至可以
)、发送请求或通过
r.schindler@efficiosoft.com电子邮件与我联系。



|复制Unicode::U+000A9..版权标志
版权副本2017 robert schindler<;r.schindler@efficiosoft.com>;
版权副本2014 chris lawrence<;lawrenc@debian.org>;

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

推荐PyPI第三方库


热门话题
使用jaxrpc的Java eclipse WebService客户端   java编程方式在对象上写入名称   java Spring批处理:重试后跳过   java Android错误:错误:任务执行失败:应用程序:transformClassesWithDexForDebug'   带有清单文件nullPointerException的java Android元数据   spring Java Quartz调度作业停止运行   JavaMockito:如何在不调用实际方法的情况下,模拟带有参数和无效返回类型的静态方法?   java Tomcat连接池问题无法在关闭的连接上调用方法   java如何交换列表中的项目?   java如何停止线程并通过Toast在线程中正确显示文本?   java为什么连续写入OutputStream时偏移量0不会导致重复字节?   java我无法生成头文件   不兼容的返回类型错误java   修改值后键值对的java Jolt转换规范   java有自动更新Javadoc的工具吗?   java线程如何在ints自身实例类中共享变量   java继承一个非gwt模块   java Hibernate xml配置   使用netty4异步调用的java链接HTTP请求响应