我有一个 BareOS 安装,对默认配置文件的修改很少。正在执行完整、增量和差异备份。大多数客户端似乎都按预期进行了备份。
但是,我的一个客户似乎在每个增量周期中重复备份超过 10% 的整个文件系统。
如何找到重复备份的最大文件和文件夹?
BAT 在这里似乎不是很有帮助,因为它只列出了文件节点本身的大小,而不是整个文件夹的大小。我正在有效地寻找一个du
在 BareOS 框架内工作的命令,以进行特定的备份尝试。
我有一个 BareOS 安装,对默认配置文件的修改很少。正在执行完整、增量和差异备份。大多数客户端似乎都按预期进行了备份。
但是,我的一个客户似乎在每个增量周期中重复备份超过 10% 的整个文件系统。
如何找到重复备份的最大文件和文件夹?
BAT 在这里似乎不是很有帮助,因为它只列出了文件节点本身的大小,而不是整个文件夹的大小。我正在有效地寻找一个du
在 BareOS 框架内工作的命令,以进行特定的备份尝试。
请注意,在第一部分末尾添加了一个重要更新
不幸的是,即使很容易准确地检查特定备份发生了什么,要获得备份文件的文件大小也不是那么容易。
让我们通过一些例子来深入了解。
就我而言,
bconsole
我可以从中获得最后一份工作的清单:从上面可以看到两个job:
让我们关注 Job 7060,因为它是增量的。让我们检查备份了哪些文件:
所以 Job 7060 对一个文件(Backup_Plone.bkf)和一个目录(包含文件夹)感兴趣。
不幸的是,正如您所看到的,输出
list files jobid=7060
并没有提供您需要的文件大小,所以......它很有用,希望如此,但不能解决您的问题。让我们先一步。
我一直在浏览bareos 官方文档,无法找到从 bconsole 中获取“文件大小”的正确方法。所以我决定采用重法:直接对目录进行 SQL 访问。
注意:在处理对目录的直接访问时,请格外小心,因为每一个不正确的操作都可能导致严重的损坏,并导致相关的数据丢失!
一旦连接到数据库引擎(MySQL,在我的例子中......但这是一个细节,与 PostgreSQL 一样),我看到备份的文件元数据存储(......等等)在:
File
表:它主要存储所有元数据,除了...Filename
表:它存储备份文件的文件名Path
表:它存储备份文件的完整路径大吃一惊,我发现该
File
表不包含字段size
。所以不可能,通过一个简单的查询,得到我们需要的东西。无论如何,我发现了一个有趣的LStat
领域(稍后会详细介绍)。所以我启动了以下 SQL 查询:
并得到以下结果:
至于该
LStat
领域,我在官方 BareOS 开发者指南中看到:所以,现在,问题是:
而且,正如我敢打赌“是的!绝对!”:
快速搜索“BareOS LStat”让我得到了几个结果。几秒钟后,我收到了这个帖子,其中包括关于 LStat 字段的几条评论,包括一个用于正确解码它的小 PERL 脚本。这是(*由 Brian McDonald 提供,2005 *),稍作修改以更好地满足您的需求:
当启动并给出 LSTAT 字符串时,它会报告大量数据,包括文件大小(st_size,输出的最后一个字段):
所以,现在,我们有了文件大小,但不幸的是,在单个查询中很难找到单个备份作业的最大文件。
存在几种解决方案:
如果您正在运行 MySQL 5.6.1 或更高版本,或者支持 BASE_64 编码/解码的 DBMS 引擎,您可以查询 LSTAT 的 SUBSTR,然后要求 DB 引擎将其值解码为 Base64 值。例如,请参见此处
你可以写一个存储过程。实际上它应该已经存在于 PostgreSQL 中,至于这个(谁声明:“ ...为 lstat 字段添加了示例 postgresql 存储过程...... ”);
你可以编写一个小 PERL 脚本,查询目录并查看解码内容
...
希望这就足够了;-)
更新 1
我刚刚发现了BVFS API的存在,明确地“ ......主要用于希望为 Bareos 开发新 GUI 界面的开发人员...... ”。
这些 API 提供了一组新的命令(所谓的“点命令”),包括一个有趣的命令,
.bvfs_lsfiles
它在控制台上显示一些元数据,包括 LSTAT字段。所以:此外,在 BareOS 15.2 中引入了新的“API 模式 2”,增加了对 JSON 输出的支持。我刚刚测试过:
.bvfs_lsfiles
包含正确解码的文件大小字段。下面举个例子:
所以,最后,使用最新版本的 BareOS,最初的问题似乎可以在不直接访问目录的情况下解决。
虽然我很欣赏 @damiano-verzulli 的努力,但 FreeNode 上的 BareOS IRC 频道中的讨论却没有得到这样的回应:
事实证明,Kjetil Torgrim Homme 已经编写了一个脚本来执行此操作,名为
bacula-du
. (以及许多其他有用的脚本!)它们都已列出并可从此处获取:
http://heim.ifi.uio.no/kjetilho/hacks/
特别
bacula-du
是这样解释的:我必须在这里添加一个小注释。为此,它必须有权访问数据库(显然)。在默认配置中,它使用基于用户的安全机制,因此您必须以 bareos 用户身份运行命令才能使其工作,例如