2个版本

0.1.2 2023年7月14日
0.1.1 2023年7月14日

#1263文件系统

MIT 协议

76KB
1.5K SLoC

dd_backup

一个使用dd命令执行块设备备份的命令行工具。它允许您将特定设备备份到指定的文件系统。

功能

  • 创建通过序列号识别的设备的自动备份。
    • 支持多个目标文件系统,每个文件系统都可以备份多个设备。
    • 为每个目标文件系统的备份提供可配置的相对目标路径。
  • 每个设备都可以有一个可选的copies字段,以保持存储备份的固定数量。
    • 确保存储备份的大小一致。
    • 如果计数超过,自动删除最旧的备份映像文件。
  • 允许您为存储其他备份的设备定义另一个备份文件系统。
    • 允许您备份备份设备。
  • 安全功能
    • 模拟备份操作而不进行实际更改的Dry运行模式。
    • 在开始下一个备份之前检查可用空间。
    • 验证UUID和序列号的唯一性,以避免混淆。
    • 在卸载前执行sync以将数据刷新到磁盘。
    • 在目标文件系统上写入任何数据之前执行文件系统检查。
      • 可以禁用,或用自定义命令覆盖
  • 日志记录
    • 支持不同的日志级别(跟踪、调试、信息、警告、错误)。
    • 彩色编码日志输出以提高可读性。
  • 可用于带有Linux live系统的U盘,以备份任何操作系统。

安装

cargo install dd_backup

用法

要使用dd_backup,您可以在JSON配置文件中配置备份设置,或者仅用于单次备份使用选项。

配置

配置文件(~/.config/dd_backup/config.json)用于指定备份配置。它具有以下结构

{
  "mountpath": "/mnt",
  "backups": [
    {
      "uuid": "dst-back-up-fs-uuid-1",
      "destination_path": "./",
      "fsck_command": "fsck -n",
      "skip_fsck": false,
      "skip_mount": false,
      "backup_devices": [
        {
          "serial": "device-serial-1",
          "name": "desktop"
          "copies": 2
        },
        {
          "serial": "device-serial-2",
          "name": "laptop"
        }
      ]
    },
    {
      "uuid": "dst-back-up-fs-uuid-2",
      "backup_devices": [{ "serial": "device-serial-3" }]
    },
    {
      ...
    }
  ]
}
  • mountpath:目标文件系统将被挂载的路径。此路径用作指定每个备份的目标路径的基础目录。

    • 可选的,默认为"/mnt"
  • backups:备份配置数组。每个配置指定目标备份文件系统以及在该文件系统上要备份的设备。

    • uuid:目标备份文件系统的UUID。

      • 使用像lsblk -n -o NAME,UUID这样的工具获取uuid
    • destination_path:备份存储的目标路径。此路径相对于挂载路径。如果不提供,备份将存储在挂载路径的根目录。

      • 可选,默认为 "./"

      • 注意:如果需要使用子目录,请手动创建它们。

    • fsck_command:指定用于文件系统检查的替代命令。如果所有测试都通过,则命令应退出状态码为0。仅支持指定 fsck 命令支持的文件系统。

      • 可选字段。默认为 fsck -n(只读模式)。

      • 命令将附加目标文件系统路径,例如:/dev/sda3

    • skip_fsck:配置是否完全跳过文件系统检查(fsck)。

      • 可选字段。默认为 false。如果设置为 true,则将跳过文件系统检查。
    • skip_mount:配置是否挂载文件系统。

      • 可选字段。默认为 false。如果设置为 true,则不会挂载文件系统。如果您希望文件系统已挂载并且在备份过程之后保持挂载状态,请使用此选项。将 skip_fsck 设置为 true
    • backup_devices:要备份到目标文件系统的设备数组。每个设备通过其序列号和可选名称指定。

      • 使用类似 lsblk -n -o NAME,SERIAL 的工具获取序列号。

      • copies:此设备要保留的副本数量。如果指定,当创建新的备份且备份数量超过指定数量时,将删除最旧的备份。如果没有指定,则不会删除任何内容。

        • 可选,默认为 None

        • 注意:如果您在一段时间后减小副本的数量,您可能需要手动删除备份文件,直到达到所需的副本数量。否则,程序将继续每次运行只删除一个备份,这可能导致与之前相同的计数。

        • 注意:为了获得程序将考虑名称、型号和序列号作为计数共同后缀的现有副本数量。如果您想保留一个不会被应用程序管理的副本,请将一些值附加到文件名。

程序允许您为所有备份设备配置备份,无论它们当前是否连接。它检查文件系统和设备的存在。如果任一不存在,则备份过程中将跳过相应的配对。

运行备份

在指定备份设备和目标文件系统/分区时,请务必 谨慎行事。使用 --dry-run 标志在运行之前查看将要备份的设备。

CLI 接口

没有短标志的选项仅适用于单次备份执行。

Usage: dd_backup run [OPTIONS]

Options:
  -n, --dry-run
          Performs a dry run, simulating backup operations without making any changes [default: "false"]
  -c, --config-file-path <CONFIG_FILE_PATH> [default: "~/.config/dd_backup.json"]
          The path to the configuration file
      --destination-uuid <DESTINATION_UUID>
          The UUID of the destination backup filesystem, single-back-up-only
      --source-serial <SOURCE_SERIAL>
          The serial number of the source device to be backed up, single-back-up-only
      --destination-path <DESTINATION_PATH>
          The destination path where the backup will be stored, single-back-up-only [default: ./]
      --copies <COPIES>
          The number of backup copies to maintain, single-back-up-only
      --name <NAME>
          The name of the backup, single-back-up-only
      --fsck-command <FSCK_COMMAND>
          Alternative command to perform filesystem check (`fsck -n`), single-back-up-only [default: "fsck -n"]
      --skip-fsck
          Flag to skip filesystem check (`fsck`), single-back-up-only [default: "false"]
      --skip-mount
          Flag to skip mounting, single-back-up-only [default: "false"]
  -m, --mountpath <MOUNTPATH>
          The mount path of the destination filesystem, overwrites config value [default: "/mnt"]
  -h, --help
          Print help
  -V, --version
          Print version

run 命令将根据需要挂载备份文件系统,为每个指定的设备执行备份,最后(除非配置为其他方式)卸载文件系统。

文件将具有类似于 2023-06-15_desktop_Micro-Line_10170080910002B1.img 的名称,包含日期、备份设备名称、型号和序列号。

执行单次备份

还可以选择进行单个备份。如果需要使用cron作业触发特定的备份过程,或者如果您有卡片阅读器并想要备份带有不同名称的SD卡,这些选项非常有用。

在使用单个备份选项时,必须指定特定备份操作的数据源序列号和目标UUID。您还可以为在backup_devices数组中定义的备份设备提供任何其他可配置选项。

这些选项与配置文件选项(-c, --config-file-path)不兼容,因为它们旨在用于一次性备份场景。此外,使用它时不会选择默认的配置文件。

日志记录

要调整日志输出量,可以将环境变量RUST_LOG设置为不同的级别,例如tracedebug以获得更详细的输出,或warnerror以获得较少的冗余输出。

以下是一个示例命令,它以增加日志输出量运行应用程序,将日志保存到文件中,并在命令行上显示它们

RUST_LOG=debug dd_backup run 2>&1 | tee -a backup.log

依赖项

~7-18MB
~232K SLoC