#backup #encryption #deduplication #restic #backup-utility #library #early-stage

rustic_core

rustic_core - 为 rustic-rs 提供快速、加密、去重备份的库

4 个版本 (2 个重大变更)

0.3.0 2024 年 8 月 18 日
0.2.0 2024 年 2 月 1 日
0.1.2 2023 年 11 月 13 日
0.1.1 2023 年 9 月 18 日
0.1.0 2023 年 8 月 10 日

1#deduplication

Download history 69/week @ 2024-04-27 34/week @ 2024-05-04 44/week @ 2024-05-11 62/week @ 2024-05-18 59/week @ 2024-05-25 62/week @ 2024-06-01 47/week @ 2024-06-08 41/week @ 2024-06-15 19/week @ 2024-06-22 8/week @ 2024-06-29 10/week @ 2024-07-06 37/week @ 2024-07-13 102/week @ 2024-07-20 22/week @ 2024-07-27 20/week @ 2024-08-03 27/week @ 2024-08-10

每月 178 次下载
用于 2 crates

Apache-2.0 OR MIT

715KB
12K SLoC

快速、加密和去重备份库

关于

这个库为 rustic-rs 提供支持。这是一个提供快速、加密、去重备份的工具。它读取和写入 restic 仓库格式,该格式在其设计文档中有所描述。

注意: rustic_core 处于早期开发阶段,其 API 在下一个版本中可能会发生变化。如果您想对此提供反馈,请打开 问题

联系方式

您可以在 讨论 中提出问题或查看 常见问题解答

联系方式 在哪里?
问题跟踪器 GitHub 问题
Discord Discord
讨论 GitHub 讨论区

用法

将此添加到您的 Cargo.toml

[dependencies]
rustic_core = "0.2"

crate 功能

此 crate 提供了一些功能来控制依赖项的使用

  • cli - 通过启用 clapmerge 功能来支持 CLI 功能。 此功能默认禁用

  • clap - 启用对 clap crate 的依赖项,并启用从命令行解析。 此功能默认禁用

  • merge - 启用将多个值合并为一个的功能,这需要启用 merge 依赖项。这对于解析命令行参数并将它们合并到一个中(例如 config)是必需的。 此功能默认禁用

  • webdav - 启用对 dav-serverfutures crate 的依赖。这使我们能够在命令行上异步运行 WebDAV 服务器。 该功能默认禁用

示例

示例:初始化新的仓库

use rustic_backend::BackendOptions;
use rustic_core::{ConfigOptions, KeyOptions, Repository, RepositoryOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // Display info logs
    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());

    // Initialize Backends
    let backends = BackendOptions::default()
        .repository("/tmp/repo")
        .to_backends()?;

    // Init repository
    let repo_opts = RepositoryOptions::default().password("test");
    let key_opts = KeyOptions::default();
    let config_opts = ConfigOptions::default();
    let _repo = Repository::new(&repo_opts, backends)?.init(&key_opts, &config_opts)?;

    // -> use _repo for any operation on an open repository
    Ok(())
}

示例:创建新的快照

use rustic_backend::BackendOptions;
use rustic_core::{BackupOptions, PathList, Repository, RepositoryOptions, SnapshotOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // Display info logs
    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());

    // Initialize Backends
    let backends = BackendOptions::default()
        .repository("/tmp/repo")
        .repo_hot("/tmp/repo2")
        .to_backends()?;

    // Open repository
    let repo_opts = RepositoryOptions::default().password("test");

    let repo = Repository::new(&repo_opts, backends)?
        .open()?
        .to_indexed_ids()?;

    let backup_opts = BackupOptions::default();
    let source = PathList::from_string(".")?.sanitize()?;
    let snap = SnapshotOptions::default()
        .add_tags("tag1,tag2")?
        .to_snapshot()?;

    // Create snapshot
    let snap = repo.backup(&backup_opts, &source, snap)?;

    println!("successfully created snapshot:\n{snap:#?}");
    Ok(())

示例:恢复快照

use rustic_backend::BackendOptions;
use rustic_core::{LocalDestination, LsOptions, Repository, RepositoryOptions, RestoreOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // Display info logs
    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());

    // Initialize Backends
    let backends = BackendOptions::default()
        .repository("/tmp/repo")
        .to_backends()?;

    // Open repository
    let repo_opts = RepositoryOptions::default().password("test");
    let repo = Repository::new(&repo_opts, backends)?
        .open()?
        .to_indexed()?;

    // use latest snapshot without filtering snapshots
    let node = repo.node_from_snapshot_path("latest", |_| true)?;

    // use list of the snapshot contents using no additional filtering
    let streamer_opts = LsOptions::default();
    let ls = repo.ls(&node, &streamer_opts)?;

    let destination = "./restore/"; // restore to this destination dir
    let create = true; // create destination dir, if it doesn't exist
    let dest = LocalDestination::new(destination, create, !node.is_dir())?;

    let opts = RestoreOptions::default();
    let dry_run = false;
    // create restore infos. Note: this also already creates needed dirs in the destination
    let restore_infos = repo.prepare_restore(&opts, ls.clone(), &dest, dry_run)?;

    repo.restore(restore_infos, &opts, ls, &dest)?;
    Ok(())
}

示例:检查仓库

use rustic_backend::BackendOptions;
use rustic_core::{CheckOptions, Repository, RepositoryOptions};
use simplelog::{Config, LevelFilter, SimpleLogger};
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // Display info logs
    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());

    // Initialize Backends
    let backends = BackendOptions::default()
        .repository("/tmp/repo")
        .to_backends()?;

    // Open repository
    let repo_opts = RepositoryOptions::default().password("test");
    let repo = Repository::new(&repo_opts, backends)?.open()?;

    // Check repository with standard options but omitting cache checks
    let opts = CheckOptions::default().trust_cache(true);
    repo.check(opts)?;
    Ok(())
}

贡献

发现错误吗? 打开问题!

有改进的想法吗?不要保密!

请确保您已阅读贡献指南

Rust 版本最低政策

此 crate 的最低支持的 rustc 版本是 1.76.0

当前政策是,使用此 crate 所需的最低 Rust 版本可以在次要版本更新中提高。例如,如果 crate 1.0 需要 Rust 1.20.0,那么所有 crate 1.0.z 的值也将需要 Rust 1.20.0 或更高版本。但是,对于 crate 1.yy > 0 的情况,可能需要更高的最低 Rust 版本。

总的来说,此 crate 将对 Rust 的最低支持版本持保守态度。

许可证

许可协议为以下之一

依赖项

~22–37MB
~518K SLoC