1 个不稳定版本

0.1.0 2019年12月25日

#1509文件系统

Apache-2.0

23KB
311

metadata_backup: 备份您的文件系统元数据

本项目以您的文件系统中的位置作为输入,递归遍历您的目录结构,并将计算机上存在的文件的元数据保存到一个便于导航的 ZIP 文件中。这可以在许多情况下使用,以下是一些例子

  1. 您有大量数据以不易搜索的格式(例如冷存储)备份,但您希望有一个更小的本地索引来了解哪些备份需要提取。

  2. 您计算机上有可以重新创建或从公共来源再次获取的数据,但您希望记录您在目录结构中如何安排它们 — 例如,您有来自多个提供商的许多电子书、电影、游戏等,以特定方式组织,但您仍然可以访问原始来源,并且不需要备份实际文件。

  3. 您希望以比您进行完整备份更高的频率记录元数据日志,出于任何原因。

我确信还有其他原因您可能需要这个,尽管我不确定为什么我要试图说服任何人这是一件有用的事情 — 如果它解决了您的问题,请使用它,否则不要使用。

安装

本项目是用 Rust 编写的,并使用 cargo 来管理构建。要从源代码构建它,首先 安装 cargo,克隆项目,然后从仓库根目录运行 cargo build --release,二进制文件将在 target/release/metadata_backup 下找到。如果需要,您可以将其移动到路径上的某个位置。

使用

安装完成后,使用 metadata_backup -r <filesystem_root> -o <output> 使用它

metadata-backup 0.1.0

USAGE:
    metadata_backup [FLAGS] -o <output> -r <root>

FLAGS:
    -h, --help                    Prints help information
    --no-remove-on-failure        Leave the zip file in place on error
    -V, --version                 Prints version information

OPTIONS:
    -o <output>
    -r <root>

输出格式

此操作会输出一个包含目录 FILESYSTEM_ROOT 和根目录下的文件 FILE_MANIFEST 的压缩文件。备份根目录的结构在 FILESYSTEM_ROOT 下被复制,但所有文件和符号链接都被替换为单个 contents.csv 文件,其中包含关于目录内容的详细信息。因此,例如,备份如下目录

$ tree root
root
├── a
   └── a1.txt
├── a1.txt -> a/a1.txt
├── b
   └── b1.txt
├── f1.txt
└── f2.txt

3 directories, 5 files

输出的文件结构将如下所示

backup
├── FILE_MANIFEST
└── FILESYSTEM_ROOT
    ├── a
    │   └── contents.csv
    ├── b
    │   └── contents.csv
    └── contents.csv

contents.csv

每个目录中的 contents.csv 文件将包含以下属性中的尽可能多的属性(属性可用性因平台而异)

  1. name:文件名
  2. size:文件大小,以字节为单位
  3. is_dir:名称是否表示目录
  4. atime:访问时间
  5. mtime:修改时间
  6. ctime:创建时间
  7. st_mode:表示文件或目录的 Unix 权限的整数
  8. st_mode_string:表示 st_mode 的人读可读等价的字符串,例如 drwxr-xr-x
  9. uid:拥有文件的数字用户 ID
  10. gid:拥有文件的数字组 ID。
  11. link:如果文件不是符号链接,则为空,否则包含相对于备份根的链接文件的路径。

FILE_MANIFEST

FILE_MANIFEST 文件旨在是易于搜索的列表,列出了 zip 文件中每个 contents.csv 文件中列出的每个文件和目录的完整路径(相对于备份根)。对于我们的示例目录结构,内容将如下所示

$ cat backup/FILE_MANIFEST
a
a/a1.txt
a1.txt
b
b/b1.txt
f1.txt
f2.txt

备份过程中的错误

metadata_backup 将跳过用户没有权限遍历的目录,但所有其他错误都会导致备份提前终止。默认情况下,如果发生故障,它还将删除任何半完成的备份。如果您希望在错误情况下保留半完成的备份,请传递 --no-remove-on-failure 标志。

许可证

此项目受 Apache 2.0 许可,所有新文件应包含以下样板

   Copyright 2019 metadata-backup Authors (see AUTHORS.md)

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

依赖项

~7–16MB
~172K SLoC