GitHub top language Latest Version Rust Documentation GitHub Workflow Status Minimum rustc version

BTM

Blockchain Time Machine.

BTM is an incremental data backup mechanism that does not require downtime.

Why would you need this?

btm will give you the following abilities or advantages:

Library Usages

```rust use btm::{BtmCfg, SnapMode, SnapAlgo};

let cfg = BtmCfg { enable: true, itv: 10, cap: 100, mode: SnapMode::Zfs, algo: SnapAlgo::Fade, volume: "zroot/data".to_owned(), };

// Generate snapshots in some threads. cfg.snapshot(0).unwrap(); cfg.snapshot(1).unwrap(); cfg.snapshot(11).unwrap();

/// Print all existing snapshots. cfg.list_snapshots();

/// Rollback to the state of the last snapshot. cfg.rollback(None, false).unwrap();

/// Rollback to the state of a custom snapshot. cfg.rollback(Some(0), true).unwrap(); ```

Binary Usages

Usage of btm ...:

```shell btm

USAGE: btm [FLAGS] [OPTIONS] [SUBCOMMAND]

FLAGS: -h, --help Prints help information -C, --snapshot-clean clean up all existing snapshots -l, --snapshot-list list all available snapshots in the form of block height -x, --snapshot-rollback rollback to the last available snapshot -V, --version Prints version information

OPTIONS: -r, --snapshot-rollback-to rollback to a custom height, will try the closest smaller height if the target does not exist

-R, --snapshot-rollback-to-exact <Height>
        rollback to a custom height exactly, an error will be reported if the target does not exist

-p, --snapshot-target <TargetPath>           a data volume containing both ledger data and tendermint data

SUBCOMMANDS: daemon help Prints this message or the help of the given subcommand(s) ```

Usage of btm daemon ...:

```shell btm-daemon

USAGE: btm daemon [OPTIONS]

FLAGS: -h, --help Prints help information -V, --version Prints version information

OPTIONS: -a, --snapshot-algo fair/fade, default to fair -c, --snapshot-cap the maximum number of snapshots that will be stored, default to 100 -i, --snapshot-itv interval between adjacent snapshots, default to 10 blocks -m, --snapshot-mode zfs/btrfs/external, will try a guess if missing -p, --snapshot-target a data volume containing both ledger data and tendermint data ```

Install as a 'systemd service'

Steps:

```shell make mv btmpackage.tar.gz /tmp/ cd /tmp/ tar -xpf btmpackage.tar.gz cd btm_package

su # swith your user account to 'root'

./install.sh \ --snapshot-itv=4 \ --snapshot-cap=100 \ --snapshot-mode=zfs \ --snapshot-algo=fade \ --snapshot-target=zfs/data ```

Outputs of systemctl status btm-daemon.service:

shell ● btm-daemon.service - "btm daemon" Loaded: loaded (/lib/systemd/system/btm-daemon.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-10-12 21:24:16 CST; 2min 27s ago Main PID: 334 (btm) Tasks: 1 (limit: 37805) CPU: 1ms CGroup: /system.slice/btm-daemon.service └─334 /usr/local/bin/btm daemon -p=/data -i=4 -c=100 -m=btrfs -a=fade

Usage of tools/install.sh:

```shell

tools/install.sh -h

Usage

install.sh
    --snapshot-itv=<ITV>
    --snapshot-cap=<CAP>
    --snapshot-mode=<MODE>
    --snapshot-algo=<ALGO>
    --snapshot-target=<TARGET>

Example

install.sh \
    --snapshot-itv=4 \
    --snapshot-cap=100 \
    --snapshot-mode=zfs \
    --snapshot-algo=fade \
    --snapshot-target=zfs/data

Example, short style

install.sh -i=4 -c=100 -m=zfs -a=fade -t=zfs/data

```