2个版本
0.1.2 | 2023年7月14日 |
---|---|
0.1.1 | 2023年7月14日 |
#1263 在 文件系统
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
设置为不同的级别,例如trace
或debug
以获得更详细的输出,或warn
或error
以获得较少的冗余输出。
以下是一个示例命令,它以增加日志输出量运行应用程序,将日志保存到文件中,并在命令行上显示它们
RUST_LOG=debug dd_backup run 2>&1 | tee -a backup.log
依赖项
~7-18MB
~232K SLoC