跳转到主要内容

使用Python进行硬链接/去重备份

项目描述

pyhardlinkbackup

使用Python进行硬链接/去重备份。

  • 备份应保存为文件系统中的正常文件

    • 无需任何额外软件或额外元文件即可访问

    • 非专有格式

  • 创建带版本控制的备份

    • 每次备份运行都会创建一个完整的文件系统快照树

    • 可以删除每个快照树,而不会影响其他快照

  • 使用硬链接进行去重

    • 仅存储已更改的文件,所有其他文件通过硬链接

    • 在所有地方查找重复文件(即使重命名或移动了文件)

  • 在Windows和Linux上可使用

需求:Python 3.6或更高版本。

请:尝试,分支并贡献! ;)

Build Status on github

github.com/jedie/pyhardlinkbackup/actions

Build Status on travis-ci.org

travis-ci.org/jedie/pyhardlinkbackup

Build Status on appveyor.com

ci.appveyor.com/project/jedie/pyhardlinkbackup

Coverage Status on coveralls.io

coveralls.io/r/jedie/pyhardlinkbackup

Requirements Status on requires.io

requires.io/github/jedie/pyhardlinkbackup/requirements/

示例

$ phlb backup ~/my/important/documents
...start backup, some time later...
$ phlb backup ~/my/important/documents
...

这将创建类似这样的去重备份

~/pyhardlinkbackups
  └── documents
      ├── 2016-01-07-085247
      │   ├── phlb_config.ini
      │   ├── spreadsheet.ods
      │   ├── brief.odt
      │   └── important_files.ext
      └── 2016-01-07-102310
          ├── phlb_config.ini
          ├── spreadsheet.ods
          ├── brief.odt
          └── important_files.ext

安装

Windows

  1. 安装Python 3:https://pythonlang.cn/downloads/

  2. 下载文件boot_pyhardlinkbackup.cmd

  3. 以管理员身份调用 boot_pyhardlinkbackup.cmd(右键单击并使用 以管理员身份运行

如果一切正常,你将在这里得到一个 venv: %ProgramFiles%\PyHardLinkBackup

在 venv 创建后,调用以下脚本来完成设置

  1. %ProgramFiles%\PyHardLinkBackup\phlb_edit_config.cmd - 创建配置 .ini 文件

  2. %ProgramFiles%\PyHardLinkBackup\phlb_migrate_database.cmd - 创建数据库表

要升级 pyhardlinkbackup,调用

  1. %ProgramFiles%\PyHardLinkBackup\phlb_upgrade_pyhardlinkbackup.cmd

要启动 Django 网络服务器,调用

  1. %ProgramFiles%\PyHardLinkBackup\phlb_run_django_webserver.cmd

Linux

  1. 下载文件 boot_pyhardlinkbackup.sh

  2. 调用 boot_pyhardlinkbackup.sh

如果一切正常,你将在这里得到一个 venv: ~\pyhardlinkbackup

在 venv 创建后,调用以下脚本来完成设置

  • ~/PyHardLinkBackup/phlb_edit_config.sh - 创建配置 .ini 文件

  • ~/PyHardLinkBackup/phlb_migrate_database.sh - 创建数据库表

要升级 pyhardlinkbackup,调用

  • ~/PyHardLinkBackup/phlb_upgrade_pyhardlinkbackup.sh

要启动 Django 网络服务器,调用

  • ~/PyHardLinkBackup/phlb_run_django_webserver.sh

启动备份运行

要启动备份运行,使用此辅助脚本

  • Windows 批处理: %ProgramFiles%\PyHardLinkBackup\pyhardlinkbackup_this_directory.cmd

  • Linux shell 脚本: ~/PyHardLinkBackup/pyhardlinkbackup_this_directory.sh

将此文件复制到需要备份的位置,然后调用它以运行备份。

验证现有备份

$ cd pyhardlinkbackup/
~/PyHardLinkBackup $ source bin/activate

(PyHardLinkBackup) ~/PyHardLinkBackup $ phlb verify --fast ~/PyHardLinkBackups/documents/2016-01-07-102310

使用 –fast 不会检查文件的完整性。如果没有提供:将计算文件的哈希值并比较它们。因此,必须从文件系统中完全读取每个文件,所以需要一些时间。

验证运行会

  • 备份中的所有文件都存在吗?

  • 比较文件大小

  • 比较哈希值文件中的哈希值

  • 比较文件的修改时间戳

  • 从文件内容计算哈希值并进行比较(如果使用 –fast 将跳过)

配置

phlb 将使用一个名为: PyHardLinkBackup.ini 的配置文件

搜索顺序是

  1. 从当前目录到根目录

  2. 用户目录

例如,如果当前工作目录是 /foo/bar/my_files/,则搜索路径将是

  • /foo/bar/my_files/PyHardLinkBackup.ini

  • /foo/bar/PyHardLinkBackup.ini

  • /foo/PyHardLinkBackup.ini

  • /PyHardLinkBackup.ini

  • ~/PyHardLinkBackup.ini Windows/Linux 下的用户主目录

创建/编辑默认 .ini

您可以直接使用用户目录 .ini 文件打开编辑器

(PyHardLinkBackup) ~/PyHardLinkBackup $ phlb config

默认值存储在此处: /phlb/config_defaults.ini

从备份中排除文件/文件夹

有两种方法可以从备份中排除文件/文件夹。在您的 PyHardLinkBackup.ini 中使用以下设置

# Directory names that will be recursively excluded from backups (comma separated list!)
SKIP_DIRS= __pycache__, temp

# glob-style patterns to exclude files/folders from backups (used with Path.match(), Comma separated list!)
SKIP_PATTERNS= *.pyc, *.tmp, *.cache

文件系统扫描分为两个步骤:1. 仅扫描文件系统树 2. 为每个目录项过滤和加载元数据

SKIP_DIRS 用于第一步。SKIP_PATTERNS 用于第二步。

升级 pyhardlinkbackup

要升级到新版本,只需启动此辅助脚本

一些注意事项

什么是“phlb”和“manage”?

phlb 是一个命令行界面。

管理类似于正常的Django manage.py,但始终使用pyhardlinkbackup设置。

你到底为什么要用Django?!?

  • 嗯,只是因为出色的数据库ORM和Admin Site。 ;)

如何进入Django管理界面?

只需启动

  • Windows: phlb_run_django_webserver.cmd

  • Linux: phlb_run_django_webserver.sh

然后请求‘localhost’(注意:Windows中venv需要–noreload!)

运行单元测试

只需启动:phlb_run_tests.cmd / phlb_run_tests.sh 或者这样做

$ cd pyhardlinkbackup/
~/PyHardLinkBackup $ source bin/activate
(PyHardLinkBackup) ~/PyHardLinkBackup $ manage test

使用CLI

$ cd pyhardlinkbackup/
~/PyHardLinkBackup $ source bin/activate
(PyHardLinkBackup) ~/PyHardLinkBackup $ phlb --help
Usage: phlb [OPTIONS] COMMAND [ARGS]...

  pyhardlinkbackup

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  add     Scan all existing backup and add missing ones...
  backup  Start a Backup run
  config  Create/edit .ini config file
  helper  link helper files to given path
  verify  Verify a existing backup

将缺失的备份添加到数据库

phlb add可用于不同的场景

  • 重新创建数据库

  • 手动添加备份

phlb add这样做

  • 扫描< strong>BACKUP_PATH(默认:~/PyHardLinkBackups)下的完整文件树

  • 重新创建所有哈希文件

  • 将所有文件添加到数据库

  • 如果可能,通过硬链接进行去重

因此,可以重新创建完整的数据库

  • 删除当前的.sqlite文件

  • 运行 phlb add以重新创建

另一个场景是例如。

  • DSLR图像存储在网络驱动器上。

  • 您已经在本地有所有文件的副本。

  • 您希望将本地副本添加到pyhardlinkbackup中。

执行以下步骤

  • 将本地文件移动到< strong>BACKUP_PATH下的子目录中

  • 例如:~/PyHardLinkBackups/pictures/2015-12-29-000015/

  • 注意:子目录名称中的日期格式必须与您的配置中的SUB_DIR_FORMATTER匹配

  • 运行:phlb add

现在您可以从网络驱动器运行 phlb backup以创建一个新的、最新的备份。

Windows开发

有关在Windows上设置开发环境的注意事项: /dev/WindowsDevelopment.creole

替代解决方案

另请参阅: https://github.com/restic/others#list-of-backup-software

历史记录

  • dev - 比较v0.13.0…master

    • TBC

  • 2020年3月18日 - v0.13.0 - 比较v0.12.3…v0.13.0

    • 动态块大小

    • 将< span class="docutils literal">CHUNK_SIZE在< span class="docutils literal">PyHardLinkBackup.ini中替换为< span class="docutils literal">MIN_CHUNK_SIZE

    • 修复对dst OSError的错误消息,异常处理不当 #23

    • 修复“运行django服务器不工作” #39

    • 修复“add”命令

    • 在Travis CI上禁用PyPy测试

  • 2020年3月17日 - v0.12.3 - 比较v0.12.2…v0.12.3

    • 修复 #44 - 进度条中的文件大小错误

    • 使用 pytest-randomly

    • 更新依赖项

  • 2020年3月6日 - v0.12.2 - 比较v0.12.1…v0.12.2

  • 2020年3月5日 - v0.12.1 - 比较v0.12.0…v0.12.1

    • 撤销对环境目标地址和默认备份目录的 PyHardLinkBackup 的小写

  • 2020年3月5日 - v0.12.0 - 比较v0.11.0…v0.12.0

    • 重构备份过程:使用 https://github.com/jedie/IterFilesystem 以减少内存使用并加快对大型源树的启动

    • 更新项目/源

      • 升级到 Django v2.2.x TLS

      • 使用 poetry

      • 添加 Makefile

      • 使用 pytest 和 tox 运行测试

      • 仅使用 python 3.8、3.7、3.6 运行测试

      • 也在 github 上运行测试

      • 移除对 python 3.5 的支持(移除 os.scandir 回退)

    • 注意: Windows 支持尚未测试!(需要帮助)

  • 2019年3月3日 - v0.11.0 - 比较v0.10.1…v0.11.0

    • 更新引导文件

    • 使用 django v1.11.x

  • 2016年9月9日 - v0.10.1 - 比较v0.10.0…v0.10.1

    • 修复 #24 号问题:捕获扫描目录错误

  • 2016年4月26日 - v0.10.0 - 比较v0.9.1…v0.10.0

    • 将 Windows 下的安装位置从 %APPDATA%\PyHardLinkBackup 移动到 %ProgramFiles%\PyHardLinkBackup

    • 要“迁移”:只需删除 %APPDATA%\PyHardLinkBackup 并通过 boot_pyhardlinkbackup.cmd 安装

  • 2016年4月26日 - v0.9.1 - 比较v0.9.0…v0.9.1

    • 在引导过程中运行迁移数据库

    • 添加缺失的迁移脚本

  • 2016年2月10日 - v0.9.0 - 比较v0.8.0…v0.9.0

  • 2016年2月4日 - v0.8.0 - 比较v0.7.0…v0.8.0

    • 新增:将所有缺失的备份添加到数据库: phlb add(如上所述)

  • 2016年2月3日 - v0.7.0 - 比较v0.6.4…v0.7.0

    • 新增:验证现有备份

    • 重要:需要运行数据库迁移!

  • 2016年2月1日 - v0.6.4 - 比较v0.6.2…v0.6.4

    • Windows:修复由于 Windows API 限制导致的临时重命名错误,请参阅: #13

    • Linux:修复扫描器在符号链接损坏时的错误

    • 在低级错误时显示局部变量

  • 2016年1月29日 - v0.6.3 - 比较v0.6.2…v0.6.3

    • 关于 SKIP_DIRS/SKIP_PATTERNS 的命中提供更少的信息

  • 2016年1月28日 - v0.6.2 - 比较v0.6.1…v0.6.2

    • 处理意外错误并继续备份下一个文件

    • 在执行过程中更好地处理中断键

  • 2016年1月28日 - v0.6.1 - 比较v0.6.0…v0.6.1

    • 通过使用更好的临时重命名例程修复 #13 号错误

  • 2016年1月28日 - v0.6.0 - 比较v0.5.1…v0.6.0

    • 新增:仅当存在旧备份文件时,通过比较mtime/size进行更快的数据备份

  • 2016年1月27日 - v0.5.1 - 比较 v0.5.0…v0.5.1

    • 重要:需要运行数据库迁移!

    • 新增 .ini 设置:用于更改翻译的 LANGUAGE_CODE

    • 标记备份是否完成

    • 显示上次备份运行的信息

    • 将更多信息添加到摘要文件中

  • 2016年1月27日 - v0.5.0 - 比较 v0.4.2…v0.5.0

    • 重构源树扫描。分为两个步骤。

    • 更改 .ini 配置中的 SKIP_FILES 为: SKIP_PATTERNS

    • 从最新文件备份到最旧文件。

    • 修复 #10

      • 新增 –name 命令行选项(可选)以强制备份名称。

      • 如果备份名称无法找到,则显示错误消息(例如:备份根文件夹)

  • 2016年1月22日 - v0.4.2 - 比较 v0.4.1…v0.4.2

  • 2016年1月22日 - v0.4.1 - 比较 v0.4.0…v0.4.1

    • 跳过无法读取/写入的文件。(并尝试备份剩余的文件)

  • 2016年1月21日 - v0.4.0 - 比较 v0.3.1…v0.4.0

    • 从当前工作目录的每个父目录中搜索 PyHardLinkBackup.ini 文件

    • 将默认块大小增加到20MB

    • 为每次备份运行保存摘要和日志文件

  • 2016年1月15日 - v0.3.1 - 比较 v0.3.0…v0.3.1

    • 修复在Windows下运行unittest的错误

  • 2016年1月15日 - v0.3.0 - 比较 v0.2.0…v0.3.0

    • 需要数据库迁移

    • 将“no_link_source”添加到数据库中(例如,如果Windows下创建了1024个链接,则跳过源)

  • 2016年1月14日 - v0.2.0 - 比较 v0.1.8…v0.2.0

    • 良好的unittest覆盖率,涵盖了备份过程

  • 2016年1月8日 - v0.1.8 - 比较 v0.1.0alpha0…v0.1.8

    • 在Windows下安装和可运行

  • 2016年1月6日 - v0.1.0alpha0 - d42a5c5

    • PyPi上的第一个版本

  • 2015年12月29日 - commit 2ce43

    • 提交“Proof of concept”

捐赠


注意:此文件由README.creole于2020-03-18 10:02:44生成,使用"python-creole"

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

pyhardlinkbackup-0.13.0.tar.gz (66.1 kB 查看哈希值)

上传时间

构建分布

pyhardlinkbackup-0.13.0-py3-none-any.whl (81.7 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误记录 StatusPageStatusPage 状态页面