BackupPC 文档学习

背景学习

搭建过的backuppc是4.3.1版本。
文档资料

基本上,相当于把上面的文档资料翻译一遍,主要是为了学习。

BackupPC Introduction

Overview 回顾

BackupPC是一种高性能的企业级系统,用于将Unix,Linux,WinXX和MacOSX PC,台式机和便携式计算机备份到服务器磁盘。 BackupPC是高度可配置的,并且易于安装和维护。

鉴于磁盘和RAID系统的成本不断降低,现在将大量计算机备份到服务器的本地磁盘或网络存储上已变得切实可行且具有成本效益。 对于某些站点,这可能是完整的备份解决方案。 对于其他站点,可以通过定期将服务器备份到磁带来创建其他永久存档。

BackupPC的初始使用看,是将所有的记录信息保存到本地的存储设备上。那么,从这个情况看如果本地存储空间不足倒是可以将它在迁移到其他存储设备上。

Features include:

  1. Pool最大程度地减少了磁盘存储和磁盘I/O。 同一台或不同PC的多个备份中的相同文件仅存储一次,从而大大节省了磁盘存储和磁盘写操作。(加粗的那一段会不会导致备份或者迁移的数据不能够完全一致?得看一下我们机器底层的副本是怎么保存的

  2. 压缩可进一步减少存储量,具体取决于要备份的数据类型。 压缩对CPU的影响很小,因为仅需要压缩新文件(那些尚未在池中的文件)。

  3. 强大的http / cgi用户界面使管理员可以查看当前状态,编辑配置,添加/删除主机,查看日志文件,并允许用户启动和取消备份以及浏览和还原备份中的文件。(自带的web界面还真是挺好的)

  4. http/cgi的界面支持中文和英文,还有其他10几种语言。

  5. 不需要客户端软件。 在WinXX上,标准smb协议用于提取备份数据。 在linux,unix或MacOSX客户端上,rsync,tar(通过ssh / rsh / nfs)或ftp用于提取备份数据。 另外,rsync也可以在WinXX上使用cygwin(因为使用cygwin),因为rsync提供了有效的传输并允许增量备份检测几乎所有更改。(linux用rsync协议就可以了,winXX可以用smb协议)

  6. 灵活的还原选项。 可以从任何备份直接从CGI界面下载单个文件。 也可以从CGI界面下载任何备份中选定文件或目录的Zip或Tar存档。 最后,CGI界面还支持将所选文件或目录直接还原到客户端计算机(使用smb或tar)。(CGI是和web对接的中间件)

  7. BackupPC支持移动环境,在该环境中,笔记本电脑仅间歇性地连接到网络并且具有动态IP地址(DHCP)。 通过配置设置,即使使用与直接连接到LAN时相同的固定或动态IP地址,也不会备份通过较慢的WAN连接(例如,拨号,DSL,电缆)连接的计算机。(???

  8. 灵活的配置参数允许并行执行多个备份,指定要备份的共享,要备份或不备份的目录,完整和增量备份的各种计划,向用户发送电子邮件提醒的计划等。 配置参数可以在系统范围内设置,也可以在每台PC上设置。

  9. 如果用户最近没有备份过PC,则会定期向他们发送电子邮件提醒。 电子邮件内容,时间和策略是可配置的。(这里不确定备份的策略是不是可以指定的

  10. BackupPC是由GitHub托管的开源软件。

BackupPC 4.0

简要介绍BackupPC4.0中做出的主要更改。

  1. 不使用硬链接(临时执行原子重命名除外)。 引用计数在应用程序级别以批处理方式处理(对于任何旧版V3备份,硬链接仍将保留)。

  2. 备份存储为“反向增量”-始终填充最新备份,并通过合并所有增量(从最近的将来填充的备份开始并向后工作)来重建较早的备份。

这与V3相反,在V3中,增量存储为先前备份(通常是上次完全备份或先前较低级别的增量备份,或在rsync情况下是最后一次完全备份)的“正向增量”。

(这里也不清楚反向增量和正向增量有啥区别)

  1. 由于最新的备份已满,因此查看/还原该备份(这是最常用的备份)不需要合并其他备份的任何增量。(???

  2. incr /完全备份和未填充/已填充存储的概念是分离的。 总是会填充最新的备份。 默认情况下,对于其余备份将填充完整备份,而未填充增量备份但这是可配置的。 (???

  3. 使用完整文件的MD5摘要,这些摘要存储在目录attrib文件中。 每个备份目录仅包含一个空的attrib文件,其名称包含其自己的MD5摘要,该摘要用于在池中查找attrib文件的内容。 反过来,该文件包含该目录中每个文件的元数据,包括每个文件的MD5摘要。

  4. pool仍然支持链来处理md5冲突。 尽管可以构造碰撞并且已经众所周知,但在发生碰撞的可能性很小。 与V3不同,pool中的文件永远不会重命名或移动。(具体怎么解决的冲突呢)

  5. 可以删除任何备份(如果未填充,则增量将合并到下一个较早的备份中)。(删除备份会发生写什么

  6. 反向增量允许“无限增量”-如果您愿意以速度为代价,如果元数据(例如,mtime或大小)不变,则不会检测到文件变更,则不需要完全备份。(???

  7. 现在,rsync“完整”备份使用–checksum(而不是–ignore-times),这在服务器端效率更高-服务器只需要检查客户端计算的完整文件校验和以及 mtime,nlinks,size属性,以查看文件是否已更改。 如果您想要一种更保守的方法,则可以将其改回–ignore-times,这要求服务器将块校验和发送给客户端。(完成备份中使用checksum,为啥服务端效率更高不应该更慢才对?

  8. 使用rsync --checksum可以使BackupPC猜测池中任何位置的潜在匹配,即使是首次备份也是如此。 在这种情况下,仍将交换通常的rsync块校验和,以确保整个文件相同。(???

  9. 在服务器端(代替File :: RsyncP)使用名为rsync_bpc(当前基于rsync-3.0.9)的经过修改的rsync,并具有到BackupPC存储的C代码接口。 因此,rsync的整个数据路径现在都在编译的C代码中,这比perl快得多。(估计数据存储路径是用的C, 可以看看接口怎么调用的

  10. 由于使用了rsync-3.X,因此支持acls和xattrs,并且支持许多其他有用的选项(但不是全部)。 Rsync协议30支持有效的增量文件列表,这大大改善了存储器使用和启动时间。 它还支持与BackupPC的新摘要匹配的MD5完整文件校验和。 这样就可以像在服务器端的mtime一样轻松地检查完整文件摘要。

  11. 现在,在名为BackupPC :: XS的新模块中将BackupPC代码的重要部分编译为C代码,该模块动态链接到perl。

接下来是更为细节的描述:

  1. 全新的备份存储。 没有硬链接! 备份存储为反向增量,始终填充最新备份。 先前备份“ n”包含相对于先前备份“ n + 1”的更改。

  2. 由于每个备份都基于上一次填充的备份,因此删除了增量级别的概念。

  3. 举了一个例子: 假设备份#4是最新的,因此已填充,而备份#0…3未填充。那么, 备份#0…3仅存储重建相对于下一个备份的那些备份所需的必要反向更改

这个例子没怎么看懂。。。

   - To view/restore backup #4, all the information is stored in backup #4.
   - To view/restore backup #3, backup #4 (the filled one), is merged with the deltas in #3.
   - To view/restore backup #2, backup #4 (the filled one), is merged with the deltas in #3 and #2
   - etc.`

当开始新的备份(#5)时,我们首先将备份#4重命名为#5。 此时,备份4的存储现在为空(这意味着备份4和5当前相同)。 在备份运行时,对#5进行更改,并保留已更改/新的文件,并将相反的更改添加到备份#4中,以保持备份#4的“视图”不变。

上面的逻辑应该是开始新的备份的时候,先将最后一次的备份记录也就是#4更新为#5。然后,启动备份,如果发生更改则在当前文件中做一系列的更改。未更改的内容回填到备份#4当中。(整体的思路是删除的逻辑

备份完成后,#5现在是最新备份的填充版本,并且**#4包含必要的更改,以使#5返回到备份#4完成后的状态。** 如果在新备份中未检测到更改,则#4的存储树将为空。 如果仅更改一个文件,则新文件将位于#5以下,而先前文件将位于#4以下(嗯,从技术上讲,这不是很正确,因为文件没有存储在备份树下;更正确的是,attrib文件位于 #5将指向新的池文件,而#4中的attrib文件将指向旧的池文件)。(后面的那句没看懂

大致理解的备份流程如下图:
backuppc备份迁移
4. 现在已取消增量备份/完全备份和未填充/已填充存储的概念。 总是会填充最新的备份(无论上一次备份是完整备份还是增量备份)。 为了方便起见,可以填充某些较早的备份,以便更快地还原较早的备份(因为需要合并的备份较少),并用于指定到期时间表。

  1. 开始备份时,有几种情况决定了如何存储备份以及是否存储先前的增量:

    这里的增量是啥概念???

    1. 没有现有备份:创建一个新的#0备份并就地进行完整备份(即:不存储以前的增量)。(看起来是初次备份

    2. 存在V3备份,但没有V4备份。 最后的V3备份被复制为V4格式,并且已完成完整备份(即:不存储以前的增量)。(???

    3. 自上次填充备份以来,上一个V4备份是完整备份,或超过$ Conf {FillCycle}。 复制上一个备份以创建一个新的已填充备份,然后新备份就位(即:不存储以前的增量)。

    4. 有V4备份,由于已填满最后一个,因此少于$ Conf {FillCycle}。 将最后一个备份重编号为#n + 1,并将反向增量放在最初为空的备份树#n中。

    5. CompressLevel已在备份之间打开/关闭。 这没有经过很好的测试,很难有效地支持。 我们将其视为已准备就绪的全新(空)备份。 这样,我们就无需在启用/禁用压缩的备份之间合并。

    6. 上次备份是V4部分。 如果以前的V4备份已满(而不是部分备份),则只需执行另一个就地备份。 否则,请视为情况4。完成后(无论成功还是其他),请删除#n中的先前增量,从而将累积更改合并到#n-1中。

  2. “部分”备份的处理方式已更改。 与在V3中部分备份在下一次备份之前被删除的情况不同,在V4中,部分备份被保留并用作下一次备份的起点。 请参阅上面的情况6。 如果新备份失败,则如果没有备份任何文件,则将删除空备份#n。

  3. 备份存储为损坏的目录树,但每个目录仅包含一个“ attrib”文件。 attrib文件的长度为零,其名称包括MD5摘要,因此可以在池中查找内容。

池中的attrib内容包含目录内容:对于每个文件,这意味着文件内容的元数据,xattrs和MD5摘要。

  1. 在服务器端使用了基于rsync 3.0.9的经过修改的rsync,称为rsync_bpc,它具有一个C代码层,该层模拟所有文件系统OS调用以与BackupPC存储兼容。 这意味着对于rsync,数据路径现在完全位于已编译的C语言中,这意味着可以大大提高速度。 这也意味着本地支持许多(但不是全部)rsync选项。(修改了一下rsync, 得看看改成什么样子了

  2. BackupPC存储和池化代码的重要部分已用C编写(服务器rsync_bpc中使用了相同的代码)。 BackupPC :: FileZIO,BackupPC :: PoolWrite,BackupPC :: Attrib,BackupPC :: AttribCache和BackupPC :: PoolRefCnt(引用计数和存储)都替换为BackupPC :: XS(C代码perl扩展名)。

  3. 支持扩展属性(xattr)。 Rsync配置为“使用xattr存储ACL”,这意味着ACL和Xattr均受支持。

  4. 支持使用rsync进行无限增量。 总是会填充最新的备份,因此增量备份仍将保留最新的备份。

  5. 任何V4备份都可以删除-如果依赖关系尚未合并,则合并到下一个较早的备份中。

  6. 文件摘要为完整文件MD5。 碰撞比V3可能性小得多,但仍有可能。 复制是通过扩展16字节MD5摘要实现的(即:16字节用于纯文件,17字节用于接下来的255个复制等)。

  7. V4池文件存储在一个新的层次结构中,该层次结构深为两层,每层有7位(即:顶层有128个目录,下一层有128个目录)。

  8. V4池文件从不移动或重命名。

  9. 硬链接文件的inode存储在每个备份树中。 与V3相比,这使备份的硬链接更加准确,并在备份之间提供一致的inode编号。

  10. 零大小的文件或空的属性文件不会被写入或合并。

  11. 消除硬链接意味着必须由BackupPC代码维护引用计数。 就开发和测试而言,这是风险最高的领域之一。 每个备份,每个主机以及整个池都维护引用计数。(???

更改引用计数的每个操作(例如:执行新备份,删除备份或复制(填充)备份)在该客户端的备份目录(即TopDir / pc / HOST / NNN)中创建一个或多个poolRefDelta文件。 这些文件是MD5摘要的列表,以及相应的计数增量。

每天晚上,BackupPC_nightly运行BackupPC_refCountUpdate,该更新为每个主机使用新的增量更新每个主机的引用计数数据库。 然后,它结合所有每个主机的参考计数文件来创建全局池参考计数数据库。

BackupPC_refCountUpdate可以与备份同时运行。 如果仍然有V3备份和池,则BackupPC_nightly仍需要运行并检查可以删除的旧V3池文件。 但是由于没有新的V3备份发生,因此BackupPC_nightly可以与备份同时运行。

  1. 有一个新的实用程序BackupPC_fsck,可以检查/修复每个主机和全局引用计数。 通过解析每个备份树中的所有attrib文件来验证每个主机的引用计数数据库。 通过组合所有每个主机的参考计数数据库并进行比较来验证全局参考计数数据库。

BackupPC处于运行状态时,BackupPC_fsck无法运行。

  1. 当BackupPC_refCountUpdate更新总体参考计数时,它将删除参考计数为零的池文件。 为了避免出现竞争状况,它使用了两个阶段的过程。** 它首先使用文件属性之一标记参考计数为零的文件。 下次运行(通常在24小时后)时,所有仍具有零引用计数的标记文件将被删除。** 其余代码知道不要使用标记的池文件来避免争用情况。(竞争这些都是啥东西,有没有更详细的文档)

  2. 进度指示:一种简单状态,显示到目前为止已处理的文件数。 很难将其转换为百分比,因为直到备份结束才知道总数。 但是,了解文件数量非常有帮助,因为您可以基于先前的备份了解预期的总数,也可以了解已更改的配置(即添加新的大树)。

  3. 由于不再使用BackupPC_link,因此将其删除。

  4. 由于文件不再存储在备份树中,因此浏览备份树比V3更加困难(您只需要在V3中处理损坏问题)。 新的实用程序BackupPC_ls的作用类似于“ ls -l”,它显示文件的准确目录列表以及MD5摘要。

可以给BackupPC_ls一个显式的主机名,数字和无冲突的路径,也可以给其完整的(受干扰的)路径,这使使用目录完成功能更加容易。 应该有可能配置tcsh和bash以及BackupPC_ls中的一些新钩子,以提供更自然的文件/目录完成。

BackupPC_zcat还可以仅获取MD5摘要(可以从BackupPC_ls粘贴该摘要)。 当前,BackupPC_zcat不支持BackupPC_ls进行的树解析(它只能zcat实际文件),但是应该很容易纠正。

  1. 到期配置:由于将full / incr与填充/未填充解耦,所以到期有点棘手。

到期参数的约定是“ FullKeepPeriod / FullKeepCnt”等,指的是已填充备份,“ IncrKeepPeriod / IncrKeepCnt”是指未填充的备份。

  1. V3迁移:不需要任何特定的内容。 V4可以浏览/查看/还原V3备份。 安装V4时,不会对任何V3备份进行任何更改。 如果要从V3升级,请确保将$ Conf {PoolV3Enabled}设置为1,以便在旧的V3池中搜索匹配的文件。

  2. 安装V4时,它会注意到V3池存在。在这种情况下,运行configure.pl应该将$ Conf {PoolV3Enabled}设置为1,但是您一定要检查一下。

  3. 首次完成V4备份时,将运行BackupPC_backupDuplicate以复制最新的V3备份以创建新的V4备份。最新V3备份的“已填充”视图用于创建“已填充” V4备份树。

  4. 此步骤可能很耗时,因为每个文件都需要读取(作为V3文件)并作为V4文件写入。但是,V4池代码了解V3池,因此它将把V3池文件移到V4池中。因此,此复制过程不会消耗大量池存储空间,但是每个文件仍然需要读取(以计算MD5摘要)和“写入”(实际上只是匹配/链接)。

  5. 到期:合并检查所有V3 + V4备份以进行到期检查。

  6. 在全新安装的V4上,省去了计算和检查V3摘要的步骤。

  7. 降级V4-> V3:未经测试,不建议使用。从理论上讲,您可以删除任何新的V4备份,也可以删除V4池本身,并且应该能够重新安装V3并仍然可以访问原始的完全正常工作的V3存储(V4可能定期删除的所有V3备份除外)在正常的备份到期配置上)。

  8. 但是,任何移至V4的V3池文件都将不再位于V3池中。因此,随着文件重新添加到旧的V3池中,后续的V3备份将消耗更多的存储空间。

  9. 优化:C代码实现应具有显着的性能优势,并且更加灵活。

已计划但尚未实施的潜在V4优化包括:

	1. rsync-bpc不支持校验和缓存。

	2. 具有--ignore-times的rsync-bpc实际上会读取每个未更改的文件3次,然后将其写入一次(正常rsync会读取两次并写入一次;多余的归因于压缩)。 一些仔细的优化可以消除两次读取和写入操作。 最终的读取可以通过校验和缓存来消除。

	3. BackupPC_refCountUpdate,BackupPC_fsck,BackupPC_backupDuplicate,BackupPC_backupDelete均为单线程。

Backup basics

下面应该是介绍了Backup basics的几个基本概念。

Full Backup(全量备份)

完整备份是共享的完整备份。 可以将BackupPC配置为定期执行一次完整备份(通常是每周一次)。 可以将BackupPC配置为保留一定数量的完整备份。 还支持指数到期,从而可以保留具有多个年份的完整备份(例如,可设置数量的最近一次每周的数量,以及可设置数量的相隔2、4、8或16周的较早版本的数量)。(时间间隔的设置,在哪里搞

Incremental Backup(增量备份)

增量备份是对自上次成功备份以来已更改文件的备份。

Rsync是BackupPC的最佳选择。自上次完整备份以来,属性已更改的所有文件(即:uid,gid,mtime,modes,size)都将备份。 rsync增量会检测到已删除的新文件和重命名的文件。

对于SMB和tar,BackupPC使用修改时间(mtime)确定自上次备份以来已更改了哪些文件。这意味着SMB和tar增量文件无法检测已删除文件,重命名文件或修改时间早于上次较低级别备份之前的新文件。

还可以将BackupPC配置为保留一定数量的增量备份,并保留较少数量的非常旧的增量备份。

在浏览或还原时,BackupPC根据每个备份的级别“填充”增量备份,使每个备份都具有“完整”外观。这使浏览和还原备份变得更加容易:您可以从任何一个备份进行还原,而无论是增量备份还是完整备份。

Partial Backup(部分备份)

当完全或增量备份失败或被取消时,最新的备份被标记为“部分”。 在V4之前,该备份不完整,下次备份完成时将被删除。

在V4中,部分备份表示最后一次备份不完整。 但是,由于V4确实进行了备份更新,因此它代表了最佳和最新的备份。 就像成功的完整备份或增量备份一样,可以浏览部分备份或将其用于还原文件。 并且它将用作下一次备份尝试的起点。

Identical Files (相同的文件)

BackupPC池化相同的文件。 **“相同文件”是指具有相同内容的文件,而不必具有相同的权限,所有权或修改时间。 **两个文件可能具有不同的权限,所有权或修改时间,但只要内容相同,它们仍将被合并。 这是可能的,因为BackupPC将文件元数据(权限,所有权和修改时间)与文件内容分开存储。

在V4之前,使用硬链接存储了相同的文件。 在V4 +中,消除了硬链接(临时原子重命名除外),并且引用计数在应用程序级别完成。

(相同内的文件合并,可能会导致迁移的时候出现问题呀!!)

Backup Policy(备份策略)

** BackupPC并非旨在提供故障磁盘的精确重新映像。**有关更多信息,请参见“某些限制”。但是,对于Linux / unix客户端,使用rsync和tar传输,再加上对特殊文件类型,扩展属性等的完全支持,可能意味着可以制作linux / unix文件系统的确切映像。

BackupPC将备份保存到磁盘上。由于池化可以相对经济地保留数周或数月的旧备份。

在某些站点上,基于磁盘的备份就足够了,而无需辅助的异地云,磁盘或磁带备份。该系统对于任何单个故障都具有鲁棒性:如果客户端磁盘发生故障或丢失文件,则可以使用BackupPC服务器还原文件。如果服务器磁盘出现故障,可以在全新的文件系统上重新启动BackupPC,并从客户端创建新的备份。 通过将更多的钱花在日益完善的RAID系统上,可以使服务器磁盘出现故障的可能性很小。但是,仍然存在灾难性事件(例如火灾或地震)的风险,这些灾难性事件可能会破坏BackupPC服务器和正在备份的客户端(如果它们在附近)。

一些站点可能选择对磁带或cd / dvd进行定期备份。可以使用BackupPC的存档功能每周执行一次备份。

其他用户报告了使用可移动磁盘旋转BackupPC数据驱动器或使用rsync在异地镜像BackupPC数据池的成功。

在V4中,由于不会永久使用硬链接,因此复制V4池要容易得多,从而可以远程复制池。

Resources

BackupPC home page

BackupPC工程的主页:

https://backuppc.github.io/backuppc
Github

BackupPC的github主页:

https://github.com/backuppc

BackupPC所需要的安装包:

https://github.com/backuppc/backuppc/releases
https://github.com/backuppc/backuppc-xs/releases
https://github.com/backuppc/rsync-bpc/releases
BackupPC Wiki

BackupPC 的维基百科地址 https://github.com/backuppc/backuppc/wiki.

Mailing lists

对于公告(backuppc-announce),开发人员(backuppc-devel)和用于支持,询问问题或与BackupPC相关的任何其他主题的常规用户列表,存在三个BackupPC邮件列表(backuppc-users)。
列表已存档在SourceForge上:
https://sourceforge.net/p/backuppc/mailman/backuppc-users/
您可以通过访问以下列表来订阅这些列表:
http://lists.sourceforge.net/lists/listinfo/backuppc-announce
http://lists.sourceforge.net/lists/listinfo/backuppc-users
http://lists.sourceforge.net/lists/listinfo/backuppc-devel
backuppc-announce列表经过审核,仅用于重要的声明(例如:新版本)。这是低流量。您只需要订阅backuppc-announce和backuppc-users之一:backuppc-users也会在backuppc-announce上接收任何消息。
backuppc-devel列表仅适用于使用BackupPC的开发人员。不要在此处发布问题或支持请求。但是详细的技术讨论应该在此列表上进行。
要将消息发布到backuppc-users列表,请发送电子邮件至
backuppc-users@lists.sourceforge.net
不要向该地址发送订阅请求!

Other Programs of Interest

如果要将Linux或Unix文件或目录镜像到远程服务器,则需要使用rsync,http://rsync.samba.org。 BackupPC使用rsync作为传输机制。如果您已经是rsync用户,则可以将BackupPC视为为rsync添加有效的存储(压缩和池化)和方便的用户界面。

这句话倒是挺意味深长的, BackupPC是对rsync添加有效的存储的一个中间件(压缩和池化)

两个流行的用于磁带备份的开源软件包是Amanda(http://www.amanda.org)和Bacula(http://www.bacula.org)。这些软件包可以用作完整的解决方案,也可以用作BackupPC的后端,以将BackupPC服务器数据备份到磁带。

Avery Pennarun的bup(https://github.com/bup/bup)使用git packfile格式进行有效的增量和重复数据删除。各种程序和脚本都使用rsync提供硬链接备份。例如,请参阅Mike Rubel的网站(http://www.mikerubel.org/computers/rsync_snapshots)、JW Schultz的苦恼(http://www.dirvish.org/)、Ben Escoto的rdiff-backup(http:// www.nongnu.org/rdiff-backup)和约翰·鲍曼(John Bowman)的rlbackup(http://www.math.ualberta.ca/imaging/rlbackup)。

BackupPC提供了许多其他功能,例如压缩存储,对所有匹配文件(而不只是具有相同名称的文件)进行重复数据删除以及存储没有root特权的特殊文件。但是,这些其他程序提供了简单,有效和快速的解决方案,绝对值得考虑。

Road map

Wiki上https://github.com/backuppc/backuppc/wiki上计划有BackupPC的将来版本的新功能。

欢迎提出意见和建议

You can help

BackupPC是免费的。 我之所以在BackupPC上工作是因为我喜欢这样做,并且我喜欢为开源社区做出贡献。

BackupPC已经具有满足我自己需要的功能。 继续在BackupPC上工作的主要补偿是,越来越多的人发现它有用。 因此,肯定会受到好评,无论是正面还是负面的反馈。

此外,鼓励每个人提供补丁程序,错误报告,功能和设计建议,新代码,Wiki附加内容(您可以直接进行添加)以及文档更正或改进。 回答邮件列表中的问题也很有帮助。

Installing BackupPC

Requirements

BackupPC requires:
  1. 具有大量可用磁盘空间的基于Linux,solaris或unix的服务器(有关含义,请参阅下一节)。 此服务器上的CPU和磁盘性能将决定您可以运行多少个同时备份。 您应该能够在配置适当的服务器上运行4-8个同时备份。

还建议您考虑使用LVM或RAID设置,以便可以根据需要扩展文件系统。

  1. Perl版本5.8.0或更高版本。 如果您没有perl,请访问http://www.cpan.org。

  2. 需要perl模块BackupPC :: XS(版本> = 0.50),以及其他几个模块:File :: Listing,Archive :: Zip,XML :: RSS,JSON :: XS,Net :: FTP,Net :: FTP: 建议使用:RetrHandle,Net :: FTP :: AutoReconnect。

尝试使用“ perldoc BackupPC :: XS”和“ perldoc Archive :: Zip”来查看是否有这些模块。 如果没有,请从http://www.cpan.org上获取它们,并参阅下面的说明以了解如何构建和安装它们。

http / cgi用户界面需要CGI Perl模块。 CGI是一个核心模块,但是Perl从5.22版开始不再提供。

  1. 如果使用rsync备份linux / unix计算机,则应在每台客户机上都具有rsync。 强烈建议使用3+版,但也可以使用早期版本。 请参阅http://rsync.samba.org。 使用“ rsync --version”检查您的版本。

为了使BackupPC使用Rsync,您还需要在服务器上安装rsync-bpc。

  1. 如果使用smb备份WinXX计算机,则需要samba软件包中的smbclient和nmblookup。 如果要备份linux / unix DHCP计算机,则还需要nmblookup。 请参阅http://www.samba.org。

有关源代码和二进制文件,请参见http://www.samba.org。 提取和编译samba相当容易,而无需进行安装即可获取smbclient和nmblookup。 另外,http://www.samba.org具有大多数平台的二进制发行版。

  1. 如果您使用tar备份linux / unix计算机,则建议这些计算机的版本为1.13.20或更高。 使用“ tar --version”检查您的版本。 各种GNU镜像具有tar的最新版本; 请参阅http://www.gnu.org/software/tar/。

  2. Apache Web服务器,请参见http://www.apache.org,最好使用mod_perl支持构建。

  3. 如果在BackupPC服务器上安装了rrdtool,则将维护并显示池使用情况的图表。 要启用图形,将$ Conf {RrdToolPath}指向rrdtool可执行文件。

What type of storage space do I need?

和硬链接这么密切相关吗?

从4.0.0开始,BackupPC不再使用硬链接来存储重复数据删除的文件。但是,硬链接仍在一些地方临时用于原子重命名,如果硬链接失败,则回退进行文件复制;如果文件跨越多个文件系统,则会跨各种路径移动(重命名)文件,这些路径会变成昂贵的文件副本。

因此,理想情况下,BackupPC的数据存储(TOPDIR)是支持硬链接的单个文件系统。可以在顶级目录(TOPDIR)中使用单个符号链接将整个数据存储指向其他位置。 当然,您可以使用将多种磁盘的容量组合到一个更大的文件系统中的任何类型的RAID系统或逻辑卷管理器。此类方法的优势在于,无需复制即可扩展文件系统。

How much disk space do I need?

这是一个实际示例(大约在2002年),该环境在关闭压缩的情况下备份65台笔记本电脑。每个完整备份的平均容量为3.2GB。每个增量备份平均约0.2GB。每台笔记本电脑存储一个完整备份和两个增量备份大约需要240GB的原始数据。但是由于池化了相同的文件,因此仅使用了87GB。这是没有压缩的。

另一个启用压缩的示例:备份95台笔记本电脑,其中每台备份平均3.6GB,每台增量平均0.3GB。每周保留三份完整备份,再进行六份增量备份,则原始数据约为1200GB。由于池化和压缩,因此仅需要150GB。

这是一个经验法则。总计要备份的所有计算机的磁盘使用量(在上面的第一个示例中为210GB)。这是一个粗略的最小空间估计,应允许每台计算机进行几个完整备份和至少六个增量备份。如果启用压缩,则可以减少30-40%的存储需求。如果您添加更多计算机或决定保留更多旧备份,请增加一些余量。

您的实际里程将取决于您拥有的客户端,操作系统和应用程序的类型。客户端和应用程序越统一,则池化公用文件的好处就越大。

除了总磁盘空间外,您还应确保BackupPC数据分区上有足够的inode。一些用户报告说他们的BackupPC数据分区上的索引节点用尽了。因此,即使您有足够的磁盘空间,当inode耗尽时,BackupPC也会报告故障。这是ext2 / ext3文件系统的一个特殊问题,该文件系统在构建文件系统时具有固定数目的inode。使用“ df -i”查看您的inode用法。

Step 1: Getting BackupPC

现在,许多Linux发行版都包含BackupPC,因此最好通过软件包管理器安装BackupPC。

例如,在Ludovic Drolez支持下的Debian,可以在http://packages.debian.org/backuppc上找到,并包含在当前的稳定Debian版本中。 在Debian上,可以使用以下命令安装BackupPC:
apt-get install backuppc
您还应该安装rsync-bpc;。 BackupPC软件包可能已经包含它,但是如果没有:
apt-get安装rsync-bpc
如果这些命令有效,则可以跳到步骤3。

另外,手动获取和安装BackupPC也很容易。 首先从下载最新版本
https://github.com/backuppc/backuppc/releases

Step 2: Installing the distribution

注意:此步骤中的大多数信息仅在您自己构建和安装BackupPC时才有用。 如果使用发行版提供的软件包,则软件包管理系统应安装所有需要的依赖项。

首先,您应该安装几个perl模块。 第一个是BackupPC :: XS,是必需的。 其他是可选的,但强烈建议。 使用linux软件包管理器或cpan命令,或按照README文件中的说明安装以下软件包:

  1. BackupPC::XS

BackupPC的重要部分用此模块中包含的C代码实现。 您可以运行“ perldoc BackupPC :: XS”来查看是否安装了此模块。 您需要的版本> = 0.50。 BackupPC :: XS可从以下位置获得:
https://github.com/backuppc/backuppc-xs/releases
还有CPAN。

  1. Archive::Zip

为了支持通过Zip存档进行还原,您还需要从http://www.cpan.org安装Archive :: Zip。 您可以运行“ perldoc Archive :: Zip”查看是否已安装此模块。

  1. XML::RSS

要支持RSS功能,您还需要从http://www.cpan.org安装XML :: RSS。 如果您不打算使用RSS,则无需安装此模块。 您可以运行“ perldoc XML :: RSS”以查看是否已安装此模块。

  1. JSON::XS

要支持JSON格式的指标,您还需要从http://www.cpan.org安装JSON :: XS。 如果您不打算使用JSON格式的指标,则无需安装此模块。 您可以运行“ perldoc JSON :: XS”以查看是否已安装此模块。

  1. CGI

http / cgi用户界面需要CGI Perl模块。 CGI是一个核心模块,但是Perl从5.22版本开始不再提供perl语言用着就奇怪,又搞这么个web,版本升级都不支持了。好怀疑这玩意行不行),因此如果您使用的是Perl的最新版本,则需要安装它。

  1. SCGI

必须使用SCGI Perl模块才能将S / CGI协议用于http / cgi用户界面。

  1. File::Listing, Net::FTP, Net::FTP::RetrHandle, Net::FTP::AutoReconnect

要将FTP与BackupPC一起使用,您将需要四个库,但实际上只需要安装来自http://www.cpan.org的File :: Listing。 您可以运行“ perldoc File :: Listing”来查看是否安装了该模块。 Net :: FTP是一个标准模块。 Net :: FTP :: RetrHandle和Net :: FTP :: AutoReconnect包含在BackupPC分发中。

要构建和安装这些软件包,您应该使用cpan命令。 在提示符下,键入

install BackupPC::XS

另外,如果您想手动安装它们,则可以从http://www.cpan.org获取压缩包,然后运行以下命令:

tar zxvf BackupPC-XS-0.50.tar.gz
cd BackupPC-XS-0.50
perl Makefile.PL
make
make test
make install

每个模块可以使用相同的命令序列。

接下来,如果要使用rsync备份客户端,则应安装rsync_bpc(这是所有客户端类型的推荐方法)。 如果您不使用包管理器,请从以下位置获取发布:

https://github.com/backuppc/rsync-bpc/releases

然后运行以下命令(适当更新版本号):

tar zxf rsync-bpc-3.0.9.5.tar.gz
cd rsync-bpc-3.0.9.5
./configure
make
make install

现在,让我们进入BackupPC本身。 提取BackupPC-4.4.0.tar.gz后,以超级用户身份运行以下命令:

tar zxf BackupPC-4.4.0.tar.gz
cd BackupPC-4.4.0
perl configure.pl

如果您希望以非交互方式运行configure.pl脚本,则它还会接受命令行选项。 它具有所有命令行选项的独立文档,您可以使用perldoc进行阅读:

perldoc configure.pl

从BackupPC 3.0.0开始,默认情况下configure.pl脚本符合文件系统层次结构(FHS)约定。 与早期版本相比的主要区别在于,默认情况下,配置文件将存储在/ etc / BackupPC中,而不是存储在数据目录__TOPDIR __ / conf下,日志文件将存储在/ var / log / BackupPC中,而不是存储在目录下。 数据目录__TOPDIR __ / log。

请注意,与这些默认设置相比,发行版可能选择对BackupPC文件使用不同的位置。

如果要从早期版本升级,则configure.pl脚本会将配置文件和日志文件保留在其原始位置。

运行configure.pl时,将提示您输入各种可执行文件的完整路径,并提示您提供以下信息。

  1. BackupPC User

最好让BackupPC作为具有受限特权的特殊用户(例如backuppc)运行。 优选的是,backuppc属于系统管理员组,以便sysadmin成员可以浏览BackupPC文件,编辑配置文件等。 尽管是可配置的,但默认设置保留对池文件的组读取权限,因此请确保限制性地选择BackupPC用户的组。

在此安装中,这是__BACKUPPCUSER__。

为了安全起见,您可以选择将Shell设置为/ bin / false来配置BackupPC用户。 由于出于测试目的可能需要以BackupPC用户身份运行某些BackupPC程序,因此可以使用-s选项su来显式运行外壳程序,例如:

    su -s /bin/bash __BACKUPPCUSER__

根据您的配置,您可能还需要-l选项。

如果-s选项在您的操作系统上不可用,则可以指定-m选项以将登录shell用作调用的shell:

    su -m __BACKUPPCUSER__
  1. Data Directory

您需要确定将数据目录放置在何处,所有BackupPC数据都存储在该目录下。 这必须是一个大文件系统。

在此安装中,这是__TOPDIR__。

  1. Install Directory

您应该确定BackupPC脚本,库和文档的安装位置,例如:/ usr / local / BackupPC。

在此安装中,这是__INSTALLDIR__。

  1. CGI bin Directory

您应该确定BackupPC CGI脚本所在的位置。 这通常位于Apache的cgi-bin目录下。

也可以使用其他目录并使用Apache的``’'指令指定该位置。 有关其他信息,请参见Apache HTTP Server文档。

在此安装中,这是__CGIDIR__。

  1. Apache image Directory

一个目录,用于存储BackupPC的映像,以便Apache可以为它们提供服务。 您应该确保该目录可被Apache读取,并从BackupPC CGI bin目录创建指向该目录的符号链接。

  1. Config and Log Directories

在此安装中,配置和日志目录位于以下位置:

 __CONFDIR __ / config.pl主配置文件
 __CONFDIR __ / hosts主机文件
 __CONFDIR __ / pc / HOST.pl每个PC的配置文件
 __LOGDIR __ / BackupPC日志文件,PID,状态

configure.pl脚本不会提示您输入这些位置,但是可以使用命令行选项为新安装设置它们。

Step 3: Setting up config.pl

运行configure.pl后,浏览配置文件__CONFDIR __ / config.pl,并确保所有默认设置均正确。 特别是,您将需要决定是使用smb,tar还是rsync或ftp传输(或是否基于每台PC进行设置),并为该传输方法设置相关参数。 有关更多详细信息,请参见“步骤5:客户端设置”部分。

Step 4: Setting up the hosts file

__CONFDIR __ / hosts文件包含要备份的客户端列表。 BackupPC在三种情况下读取此文件:

  1. 启动时。

  2. 发送BackupPC时,会发出HUP(-1)信号。 假设您安装了init.d脚本,也可以使用“ /etc/init.d/backuppc reload”来执行此操作。

  3. 当主机文件的修改时间更改时。 在每次常规唤醒期间,BackupPC都会检查一次修改时间。

每当更改主机文件(添加或删除主机)时,您都可以执行kill -HUP BackupPC_pid或简单地等待下一个常规唤醒期。

主机文件中的每一行都包含三个字段,用空格隔开:

Host name

这通常是客户端计算机的主机名或NetBios名称,并且应小写。 主机名可以包含空格(带反斜杠的转义符),但不建议这样做。

请阅读“ BackupPC如何查找主机”部分。

在某些情况下,您可能希望多个不同的客户端引用同一台物理计算机。 例如,您可能要备份一个数据库,并且要使用$ Conf {DumpPreUserCmd}和$ Conf {DumpPostUserCmd}在关机/重新启动时对数据库的备份进行分类。 但是,您还想在数据库仍在运行时备份计算机的其余部分。 在这种情况下,您可以使用任何助记符名称(例如:myhost_mysql和myhost)在主机文件中指定两个不同的客户端,并在myhost_mysql的config.pl中使用$ Conf {ClientNameAlias}指定计算机的真实主机名。

DHCP flag

从v2.0.0开始,发现主机的方式已更改,现在在大多数情况下,即使主机具有动态分配的IP地址,您也应将DHCP标志指定为0。 请阅读“ BackupPC如何查找主机”部分,以了解是否需要设置DHCP标志。

如果客户端计算机不响应NetBios多播请求,则只需将DHCP设置为1:

nmblookup myHost

但确实回应了指向其IP地址的请求:

nmblookup -A W.X.Y.Z

如果确实在任何客户端上将DHCP设置为1,则需要在$ Conf {DHCPAddressRanges}中指定要搜索的DHCP地址范围。

还请注意,$ Conf {ClientNameAlias}功能不适用于DHCP设置为1的客户端。

User name

这应该是“拥有”或使用此计算机的用户的UNIX登录名/电子邮件名。 将向该用户发送有关此计算机的电子邮件,并且该用户将有权停止/启动/浏览/还原该主机的备份。 如果没有特定的人应该收到电子邮件或被允许停止/启动/浏览/还原该主机的备份,则将该字段保留为空白。 管理员仍将具有完全权限。

More users

可以指定其他用户名,用逗号分隔并且没有空格。 这些用户还将在CGI界面中具有完全权限,以停止/启动/浏览/还原该主机的备份。 这些用户将不会收到有关此主机的电子邮件。

主机文件的第一行非注释行是特殊的:它包含各列的名称,不应进行编辑。

这是一个主机文件的简单示例:

host        dhcp    user      moreUsers
farside     0       craig     jim,dave
larson      1       gary      andy
Step 5: Client Setup

支持四种从客户端获取备份数据的方法:smb,tar,rsync和ftp。 Smb或rsync是WinXX客户端的首选方法,rsync或tar是linux / unix / MacOSX客户端的首选方法。(这里反正我们是要用rsync

使用$ Conf {XferMethod}配置设置来设置传输方法。 如果您有混合环境(即:某些客户端将使用smb,而其他客户端将使用tar),则需要为config.pl主文件选择$ Conf {XferMethod}的最常见选择,然后在其中覆盖它 每个将使用其他方法的主机的每PC配置文件。 (或者,您可以运行两个完全独立的BackupPC实例,它们具有不同的数据目录,一个用于WinXX,另一个用于linux / unix,但是不同机器类型之间的公用文件将被复制。)

以下是一些简短的客户端设置说明:

WinXXX:
… 忽略不写了

Linux/Unix:

linux / unix客户端的首选设置是将**$ Conf {XferMethod}设置为“ rsync”**(这里我们默认使用rsync),“ rsyncd”或“ tar”。

您可以在Linux / unix计算机上使用rsync,smb或tar。 Smb要求运行Samba服务器(smbd)来提供共享。 由于smb协议不能表示符号链接和fifos之类的特殊文件,因此tar和rsync是linux / unix机器的较好传输方法。 (实际上,默认情况下,samba使符号链接看起来像它们指向的文件或目录,因此,如果符号链接指向当前目录或父目录,则可能会出现无限循环。如果您确实需要在Linux上使用Samba共享, / unix备份时,应关闭“ follow symlinks” samba配置设置。请参见smb.conf手册页。)

重要说明:许多linux系统使用/ var / log / lastlog的稀疏文件,并在/ proc和/ run下面有大型特殊文件。 在配置客户端时,请确保排除那些目录和文件。

每个Xfer方法的要求是:

rsync:
要使用rsync,您需要在BackupPC服务器上安装rsync-bpc。

在客户端上,您至少应具有rsync3.x。 Rsync通过ssh在远程客户端上运行。

相关配置设置为$ Conf {RsyncClientPath},$ Conf {RsyncSshArgs},$ Conf {RsyncShareName},$ Conf {RsyncArgs},$ Conf {RsyncArgsExtra},$ Conf {RsyncFullArgsExtra}和$ Conf {RsyncRestoreArgs}。

rsyncd:

要使用rsync,您需要在BackupPC服务器上安装rsync-bpc。

在客户端上,您至少应具有rsync3.x。 在这种情况下,rsync守护程序应在客户端计算机上运行,并且BackupPC直接与其连接。

相关配置设置为$ Conf {RsyncBackupPCPath},$ Conf {RsyncdClientPort},$ Conf {RsyncdUserName},$ Conf {RsyncdPasswd},$ Conf {RsyncShareName},$ Conf {RsyncArgs},$ Conf {RsyncArgsExtra}和$ Conf {RsyncRestoreArgs}。 $ Conf {RsyncShareName}是rsync模块的名称(即:rsyncd的conf文件中方括号中的内容-请参见rsyncd.conf),而不是文件系统路径。

请注意,如果在rsynd.conf文件中指定“ use chroot = no”,则rsyncd将从符号链接的路径名中删除开头的“ /”。 有关更多信息,请参见rsyncd.conf手册页。

**tar: **

客户端计算机上必须具有GNU tar。 使用“ tar --version”或“ gtar --version”进行验证。 版本应至少为1.13.20。 Tar通过rsh或ssh在客户端计算机上运行。

相关配置设置为$ Conf {TarClientPath},$ Conf {TarShareName},$ Conf {TarClientCmd},$ Conf {TarFullArgs},$ Conf {TarIncrArgs}和$ Conf {TarClientRestoreCmd}。

**ftp: **

V4支持FTP Xfer Method,但不建议使用FTP Xfer Method,因为它仅处理最少的元数据,不支持硬链接或特殊文件,并且只能还原常规文件(不包括符号链接等)。

您需要在客户端计算机上运行ftp服务器。 相关配置设置为$ Conf {FtpShareName},$ Conf {FtpUserName},$ Conf {FtpPasswd},$ Conf {FtpBlockSize},$ Conf {FtpPort},$ Conf {FtpTimeout}和$ Conf {FtpFollowSymlinks}。

您需要将$ Conf {ClientCharset}设置为客户端的字符集,以便将文件名正确转换为utf8。在客户端上使用“ locale charmap”来查看其字符集。但是请注意,现代版本的smbclient和rsync自动处理此转换,因此在大多数情况下,您无需设置$ Conf {ClientCharset}。

对于linux / unix机器,您不应备份“ / proc”。该目录包含各种看起来像常规文件的文件,但是它们是不需要备份的特殊文件(例如:/ proc / kcore是包含物理内存的常规文件)。请参阅$ Conf {BackupFilesExclude}。备份/ dev是安全的,因为它主要包含字符专用文件和块专用文件,这些文件由BackupPC正确处理(例如:备份/ dev / hda5仅保存块专用文件信息,而不是磁盘内容) )。同样,在许多linux系统上,/ var / log / lastlog是一个稀疏文件,具有很大的表观大小,因此您也应该排除该文件。

或者,与其将所有文件系统都备份为一个共享(“ /”),不如单独备份每个文件系统,还原单个文件系统更为容易。为此,您应该在$ Conf {TarShareName}或$ Conf {RsyncShareName}中列出每个文件系统安装点,并将–one-file-system选项添加到$ Conf {TarClientCmd}或$ Conf {RsyncArgs}中。在这种情况下,由于它看起来像是另一个文件系统,因此无需显式排除/ proc。

Ssh允许BackupPC在客户端(例如:root)上以特权用户身份运行,因为它需要足够的权限才能读取所有备份文件。设置了Ssh,以便服务器上的BackupPC(否则为低特权用户)可以在客户端上以root用户身份以ssh身份登录,而无需提示输入密码。但是,直接启用ssh根登录不是一个好习惯。更好的方法是使用ssh作为普通用户,然后将sudo配置为仅执行rsync。

ssh有两种常见版本:v1和v2。以下是一些有关设置ssh的方法的说明。 (通过键入“ ssh”或“ man ssh”来检查您拥有的SSH版本。)

MacOSX:
…忽略不写了

SSH Setup
SSH是在备份客户端上运行tar或rsync来提取数据的安全方法。 SSH提供了对网络数据的强身份验证和加密。

请注意,如果您运行rsyncd(rsync守护程序),则不使用ssh。 在这种情况下,rsyncd提供了自己的身份验证,但是不对网络数据进行加密。 如果要加密网络数据,则可以使用ssh创建隧道,或使用stunnel之类的程序。

ssh的安装说明可在Wiki上找到,网址为https://github.com/backuppc/backuppc/wiki。

Clients that use DHCP

Step 6: Running BackupPC

该安装包含一个init.d backuppc脚本,该脚本可以复制到/etc/init.d,以便BackupPC可以在启动时自动启动。 有关更多说明,请参见init.d / README。

BackupPC应该已经准备好启动。 如果安装了init.d脚本,则应该能够使用以下命令运行BackupPC:

/etc/init.d/backuppc start

(也可以使用“ stop”调用此脚本以停止BackupPC,并使用“ reload”调用以告诉BackupPC重新加载config.pl和hosts文件。)

否则,只需运行:

__INSTALLDIR__/bin/BackupPC -d

以用户__BACKUPPCUSER__的身份。 -d选项告诉BackupPC作为守护程序运行(即:它执行附加的派生)。

任何即时错误将被打印到stderr,BackupPC将退出。 否则,请查看__LOGDIR __ / LOG并验证BackupPC报告它已启动并且一切正常。

Step 7: Talking to BackupPC

您应该使用BackupPC_serverMesg验证BackupPC是否正在运行。 这将通过unix(或TCP)套接字将消息发送到BackupPC并打印响应。这里是在走TCP协议吗??) 与所有BackupPC程序一样,BackupPC_serverMesg应该以BackupPC用户(BACKUPPCUSER)的身份运行,因此您应该

    su __BACKUPPCUSER__

在运行BackupPC_serverMesg之前。 如果将BackupPC用户配置为/ bin / false作为shell,则可以使用-s选项su来显式运行shell,例如:

su -s /bin/bash __BACKUPPCUSER__

根据您的配置,您可能还需要-l选项。

如果-s选项在您的操作系统上不可用,则可以指定-m选项以将登录shell用作调用的shell:

    su -m __BACKUPPCUSER__

您可以使用此界面请求状态信息以及开始和停止备份。 此套接字接口主要是为CGI接口提供的(某些BackupPC子程序也使用它)。 但是现在,我们只想确保BackupPC满意。 这些命令中的每一个都应产生一些状态输出:

    __INSTALLDIR__/bin/BackupPC_serverMesg status info
    __INSTALLDIR__/bin/BackupPC_serverMesg status jobs
    __INSTALLDIR__/bin/BackupPC_serverMesg status hosts

输出应该是一些用Data :: Dumper打印的哈希值。 如果它看起来晦涩难懂,并且看起来不像是错误消息,那么一切正常。

主机状态应生成您在__CONFDIR __ / hosts中列出的每个主机的列表,作为输出行的一部分。

您还可以请求所有主机排队:

    __INSTALLDIR__/bin/BackupPC_serverMesg backup all

在这一点上,您应该确保CGI接口可以正常工作,因为这样可以更轻松地查看正在发生的情况。 我们将尽快解决。

Step 8: Checking email delivery

脚本BackupPC_sendEmail将状态和错误电子邮件发送给管理员和用户。 它通常由BackupPC_nightly每晚运行。

为了验证它可以运行sendmail并正确发送电子邮件,您应该要求它向您发送测试电子邮件:
su BACKUPPCUSER
__INSTALLDIR __ / bin / BackupPC_sendEmail -u MYNAME@MYDOMAIN.COM
BackupPC_sendEmail还具有-c选项,该选项检查BackupPC是否正在运行,如果没有运行,它将向$ Conf {EMailAdminUserName}发送电子邮件。 通过添加可以用作保持活动检查

 __INSTALLDIR __ / bin / BackupPC_sendEmail -c

到__BACKUPPCUSER__的cron。

BackupPC_sendEmail的-t选项使它打印电子邮件,而不是调用sendmail来传递消息。

Step 9: CGI interface

CGI界面脚本BackupPC_Admin是查看和控制BackupPC正在执行的功能的强大而灵活的方式。 它是为Apache服务器编写的。 如果没有Apache,请访问http://www.apache.org。

设置CGI界面有三个选项:

SCGI:
SCGI是4.x的新增功能,它使用Apache的SCGI接口,这需要由Apache安装和加载mod_scgi.so模块。 这使Apache可以以任何非特权用户身份运行。 实际的SCGI服务器以BackupPC用户(BACKUPPCUSER)的身份运行,并通过TCP套接字处理来自Apache的请求。

mod_perl:
Mod_perl要求mod_perl模块由Apache加载。 这样可以从Apache内部运行BackupPC_Admin。 与SCGI不同,将mod_perl与BackupPC_Admin结合使用需要专用的Apache以BackupPC用户(BACKUPPCUSER)的身份运行。 这是因为BackupPC_Admin需要访问BackupPC数据目录中各种文件的权限。

standard:

标准模式比SCGI或mod_perl慢得多,在该模式下,Apache将BackupPC_Admin作为每个请求的单独进程运行。 这将增加每个请求的大量启动开销,并且如果未以该用户的身份运行Apache,则还要求以setuid的身份对BackupPC用户(BACKUPPCUSER)运行BackupPC_Admin。 不鼓励使用Setuid脚本,因此首选使用SCGI或mod_perl。

下面是每种设置的细节:

SCGI SETUP

首先,您需要安装mod_scgi。 如果找不到预编译的软件包,则可从http://python.ca/scgi获取该源。 该发行版包含apache1和apache2的子目录。 选择您匹配的版本(当今最有可能是apache2)。 您需要安装apxs(Apache扩展工具)才能从源代码构建。 编译后,应通过Makefile安装模块mod_scgi.so。

要启用SCGI服务器,请将$ Conf {SCGIServerPort}设置为可用的非特权TCP端口号,例如:10268。匹配的端口号必须出现在Apache配置文件中。 典型的Apache配置条目如下所示:

LoadModule scgi_module modules/mod_scgi.so
SCGIMount /BackupPC_Admin 127.0.0.1:10268
    <Location /BackupPC_Admin>
        AuthUserFile /etc/httpd/conf/passwd
        AuthType basic
        AuthName "access"
        require valid-user
    </Location>

或典型的Nginx配置文件:

server {
        listen 80;					<--- 这里需要开放80端口
        server_name yourBackupPCServerHost;

        root  /var/www/backuppc;

        access_log  /var/log/nginx/backuppc.access.log;
        error_log   /var/log/nginx/backuppc.error.log;

        location /BackupPC_Admin {
            auth_basic "BackupPC";
            auth_basic_user_file conf.d/backuppc.users;

            include   scgi_params;
            scgi_pass 127.0.0.1:10268;
                scgi_param REMOTE_USER $remote_user;
                scgi_param SCRIPT_NAME $document_uri;
        }
    }

这允许使用URL访问SCGI界面:

    http://yourBackupPCServerHost/BackupPC_Admin

如果您希望使用其他URL,则可以使用其他路径或名称。 与传统的CGI不同,无需指定CGI脚本的有效路径。

重要的安全警告! 不受信任的任何人都不得访问SCGIServerPort。 这意味着您不能允许不受信任的用户访问BackupPC服务器,并且应该阻止BackupPC服务器上的SCGIServerPort TCP端口。 如果您不明白这意味着什么,或者无法确认已经安全地配置了SCGI,则不要启用SCGI-使用以下两种方法之一!、

Mod_perl Setup

mod_perl设置的优点是不需要setuid脚本(就像下面的标准方法一样),并且具有显着的性能优势。所有的perl代码不仅需要解析一次,而且config.pl和hosts文件以及与BackupPC服务器的连接都可以在请求之间进行缓存。典型的加速比约为10-15倍。

要使用mod_perl,您需要以__BACKUPPCUSER__用户身份运行Apache。如果需要为不同的服务运行多个Apache,则需要创建多个顶级Apache目录,每个目录都有自己的配置文件。您可以复制/etc/init.d/httpd并使用-d选项将httpd指向每个http指向不同的顶层目录。或者,您可以使用-f选项来明确指向配置文件。多个Apache将在不同的端口上运行(例如:80是标准端口,8080是可通过http://yourhost.com:8080访问的典型替代端口)。

在BackupPC的Apache http.conf文件中,您应该检查ServerRoot,DocumentRoot,User,Group和Port的设置。有关更多详细信息,请参见http://httpd.apache.org/docs/server-wide.html。

对于mod_perl,BackupPC_Admin应该没有setuid权限,因此您应该将其关闭:

    chmod u-s __CGIDIR__/BackupPC_Admin

要告诉Apache使用mod_perl执行BackupPC_Admin,请将其添加到Apache的1.x httpd.conf文件中:

(我安装的版本和这个应该不一样,没看到过)

    <IfModule mod_perl.c>
        PerlModule Apache::Registry
        PerlTaintCheck On
        <Location /cgi-bin/BackupPC/BackupPC_Admin>   # <--- change path as needed
           SetHandler perl-script
           PerlHandler Apache::Registry
           Options ExecCGI
           PerlSendHeader On
        </Location>
    </IfModule>

Don Silvia报告说,在RedHat 7.1上具有Perl 5.8.0的Apache 2.0.44和Perl 5.8.0的支持下,这是可行的(通过Michael Tuzi的调整):

    LoadModule perl_module modules/mod_perl.so
    PerlModule Apache2

    <Directory /path/to/cgi/>
        SetHandler perl-script
        PerlResponseHandler ModPerl::Registry
        PerlOptions +ParseHeaders
        Options +ExecCGI
        Order deny,allow
        Deny from all
        Allow from 192.168.0
        AuthName "Backup Admin"
        AuthType Basic
        AuthUserFile /path/to/user_file
        Require valid-user
    </Directory>

mod_perl还有其他优化和选项。 例如,您可以告诉mod_perl预加载各种perl模块,与分叉后在每个Apache进程中加载单独的副本相比,可以节省内存。 请参阅http://perl.apache.org/guide上Stas的权威mod_perl指南。

Standard Setup

CGI接口应该已经由__CGIDIR __ / BackupPC_Admin中的configure.pl脚本安装。 除了用户和组执行权限之外,BackupPC_Admin应该已作为setuid安装到BackupPC用户(__BACKUPPCUSER__)。

您应该非常注意BackupPC_Admin和目录__CGIDIR__的权限:普通用户不能直接执行或更改BackupPC_Admin,这一点很重要,否则他们可以访问任何PC的备份文件。 您可能需要将BackupPC_Admin的组所有权更改为Apache所属的组,以便Apache可以执行它(不要添加“其他”执行权限!)。 权限应如下所示:

(**大脑缺氧中。。。**)
ls -l __CGIDIR__/BackupPC_Admin
    -swxr-x---    1 __BACKUPPCUSER__   web      82406 Jun 17 22:58 __CGIDIR__/BackupPC_Admin
除非使用setuid仿真在计算机上安装了perl,否则setuid脚本将无法工作。 如果出现诸如“错误的用户:我的用户名是25,而不是150”之类的错误消息,这可能是问题所在,这意味着脚本以httpd用户而不是BackupPC用户的身份运行。 这是因为在大多数unix和linux版本中,内核禁用setuid脚本。

要查看您的perl是否具有setuid仿真,请查看在安装perl的地方是否有一个名为sperl5.8.0(或sperl5.8.2等,基于您的perl版	本)的程序。 如果找不到该程序,则有两个选择:运行setl仿真时,在打开setuid仿真的情况下重建并重新安装perl(在运行perl的configure时对问题“是否要执行setuid / setgid仿真?”回答“ y”) 脚本),或切换到CGI脚本的mod_perl替代方案(不需要setuid即可工作)。

BackupPC_Admin要求用户通过Apache认证。 具体来说,它期望Apache在运行时设置REMOTE_USER环境变量。 有几种方法可以做到这一点。 一种方法是在cgi-bin目录中创建一个.htaccess文件,如下所示:

AuthGroupFile /etc/httpd/conf/group    # <--- change path as needed
AuthUserFile /etc/http/conf/passwd     # <--- change path as needed
AuthType basic
AuthName "access"
require valid-user

您还需要Apache httpd.conf文件中的“ AllowOverride Indexes AuthConfig”来启用.htaccess文件。 另外,所有内容都可以放在Location指令内的Apache httpd.conf文件中。 可以从NIS passwd文件中提取上面的用户列表和密码文件。

一种替代方法是使用LDAP。 在Apache的http.conf中添加以下行:

LoadModule auth_ldap_module   modules/auth_ldap.so
    AddModule auth_ldap.c

    # cgi-bin - auth via LDAP (for BackupPC)
    <Location /cgi-bin/BackupPC/BackupPC_Admin>    # <--- change path as needed
      AuthType Basic
      AuthName "BackupPC login"
      # replace MYDOMAIN, PORT, ORG and CO as needed
      AuthLDAPURL ldap://ldap.MYDOMAIN.com:PORT/o=ORG,c=CO?uid?sub?(objectClass=*)
      require valid-user
    </Location>

如果要禁用用户身份验证,可以将$ Conf {CgiAdminUsers}设置为“ *”,这允许任何用户对所有主机和备份具有完全访问权限。 在这种情况下,Apache不必设置REMOTE_USER环境变量。

另外,您可以通过让Apache设置REMOTE_USER来强制使用特定的用户名,例如,将用户硬编码为www,则可以将其添加到Apache的httpd.conf中:

<Location /cgi-bin/BackupPC/BackupPC_Admin>   # <--- change path as needed
    Setenv REMOTE_USER www
</Location>

最后,您还应该编辑config.pl文件,并根据需要调整CGI特定的设置。 它们接近配置文件的末尾。 特别是,您应该指定哪些用户或组具有管理员(特权)访问权限:请参阅配置设置$ Conf {CgiAdminUserGroup}和$ Conf {CgiAdminUsers}。 另外,configure.pl脚本将各种映像放入$ BackupPC_Admin需要提供的$ Conf {CgiImageDir}中。 您应该确保$ Conf {CgiImageDirURL}是图像目录的正确URL。

请参阅“修复安装问题”部分,以获取有关调试Apache身份验证设置的建议。

How BackupPC Finds Hosts

从v2.0.0开始,发现主机的方式已更改。 在大多数情况下,即使主机具有动态分配的IP地址,也应在conf / hosts文件中为DHCP标志指定0。

BackupPC(从v2.0.0开始)以这种方式查找DHCP = 0的主机:

1. 第一个DNS用于使用perl的gethostbyname()函数在给定客户端名称的情况下查找IP地址。 对于具有通过DNS已知的固定IP地址的计算机,这应该成功。 您可以使用以下命令根据perl的gethostbyname函数手动查看给定的主机是否具有DNS条目:
     perl -e'print(gethostbyname(“ myhost”)?“ ok \ n”:“未找到\ n”);'
2. 如果gethostbyname()失败,则BackupPC然后尝试NetBios多播查找主机。 如果您的客户端计算机配置正确,它应该响应此NetBios多播请求。 具体来说,BackupPC运行以下形式的命令:
    nmblookup myhost
如果失败,您将看到类似以下的输出:
    querying myhost on 10.10.255.255
    name_query failed to find name myhost
如果成功,您将看到类似以下的输出:
    querying myhost on 10.10.255.255
    10.10.1.73 myhost<00>
根据您的网络掩码,您可能需要为nmblookup指定-B选项。 例如:
    nmblookup -B 10.10.1.255 myhost
如有必要,尝试使用nmblookup命令,该命令将返回给定客户端名称的客户端IP地址。 然后使用nmblookup的任何必要选项更新$ Conf {NmbLookupFindHostCmd}。

对于将DHCP标志设置为1的主机,这些机器的发现如下:

1. 需要指定DHCP地址池($ Conf {DHCPAddressRanges})。 BackupPC将使用以下格式的命令检查范围内每台计算机的NetBIOS名称:
    nmblookup -A W.X.Y.Z
其中W.X.Y.Z是$ Conf {DHCPAddressRanges}中的每个候选地址。 具有此命令返回的有效NetBIOS名称的任何主机(即:匹配hosts文件中的条目)将被备份。 您可以根据需要通过$ Conf {NmbLookupCmd}修改特定的nmblookup命令。

2.  仅当客户端计算机不响应NetBios多播请求时,才需要使用此DHCP功能:	
    nmblookup myHost
但确实回应了指向其IP地址的请求:
    nmblookup -A W.X.Y.Z

Other installation topics

Removing a client

如果有一台不再需要备份的计算机(例如,一台淘汰的计算机),则有两种选择。首先,您可以保持备份的可访问性和可浏览性,但是禁用所有新备份。或者,您可以完全删除客户端及其所有备份。

要为客户端禁用备份,可以在该客户端的每PC config.pl文件中将$ Conf {BackupsDisable}设置为两个不同的值:

不要在此计算机上进行任何常规备份。手动请求的备份(通过CGI界面)仍将发生。

不要在这台机器上做任何备份。手动请求的备份(通过CGI界面)将被忽略。

这样仍然可以浏览和还原客户端的旧备份。

要完全删除客户端及其所有备份,应在conf / hosts文件中删除其条目,然后删除__TOPDIR __ / pc / $ host目录。每当更改主机文件时,都应向BackupPC发送HUP(-1)信号,以便它重新读取主机文件。如果您不这样做,BackupPC将在下次常规唤醒时自动重新读取主机文件。

请注意,删除客户端的备份时,最初不会恢复太多的磁盘空间。这是因为客户端的文件仍在池中。一夜之间,当BackupPC_nightly下一次运行时,所有未使用的池文件将被删除,这将恢复客户端备份使用的磁盘空间。

Copying the pool

如果池磁盘需求增加,则可能需要将整个数据目录复制到新的(更大)文件系统中。希望您有幸通过在RAID文件系统或LVM上放置数据目录来避免这种情况,该目录允许通过添加磁盘来增加容量。

V4之前的备份会大量使用硬链接。因此,除非您未安装V4,否则您的文件系统将包含大量硬链接。这使得很难复制。

在V4(或从V4升级到V3安装)之前,备份数据目录包含大量的硬链接。如果您尝试复制池,则在未重新建立硬链接的情况下,目标目录将占用更多空间。

除非您是纯粹的V4安装,否则复制池文件系统的最佳方法(如果可能)是在块级别复制原始设备(例如:使用dd)。理解硬链接的应用程序级程序包括带有-a选项的GNU cp程序和rsync -H。但是,池中的大量硬链接将使内存使用量很大,并且副本非常慢。副本运行时,别忘了停止BackupPC。

如果您使用的是纯V4安装,则复制池和PC备份目录应该非常容易。 Rsync 3.x应该可以正常工作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值