btm 0.11.1

Blockchain Time Machine
Documentation

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:

  • rollback to the state of a desired block height
  • hot backup during operation, no downtime is needed
  • based on OS-level infrastructure, stable and reliable
  • very small resource usage, almost no performance damage
  • ...

Library Usages

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(11), true).unwrap();

Binary Usages

Usage of btm ...:

Usage: btm [OPTIONS] [COMMAND]

Commands:
  daemon
  help    Print this message or the help of the given subcommand(s)

Options:
  -p, --snapshot-volume [<VolumePath>]
          a data volume containing your blockchain data
  -l, --snapshot-list
          list all available snapshots in the form of block height
  -x, --snapshot-rollback
          rollback to the last available snapshot
  -r, --snapshot-rollback-to [<Height>]
          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
  -C, --snapshot-clean
          clean up all existing snapshots
  -K, --snapshot-clean-kept [<KeptNum>]
          clean up old snapshots out of kept capacity
  -h, --help
          Print help information
  -V, --version
          Print version information

Usage of btm daemon ...:

Usage: btm daemon [OPTIONS]

Options:
  -p, --snapshot-volume [<VolumePath>]
          a data volume containing your blockchain data
  -i, --snapshot-itv [<Iterval>]
          interval between adjacent snapshots, default to 10 blocks
  -c, --snapshot-cap [<Capacity>]
          the maximum number of snapshots that will be stored, default to 100
  -m, --snapshot-mode [<Mode>]
          zfs/btrfs/external, will try a guess if missing
  -a, --snapshot-algo [<Algo>]
          fair/fade, default to `fair`
  -h, --help
          Print help information

Install as a 'systemd service'

Steps:

make
mv btm_package.tar.gz /tmp/
cd /tmp/
tar -xpf btm_package.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-volume=zfs/data

Outputs of systemctl status btm-daemon.service:

● 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:

# tools/install.sh -h

Usage

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

Example

    install.sh \
        --snapshot-itv=4 \
        --snapshot-cap=100 \
        --snapshot-mode=zfs \
        --snapshot-algo=fair \
        --snapshot-volume=zfs/blockchain

Example, short style

    install.sh -i=4 -c=100 -m=zfs -a=fair -p=zfs/blockchain
    install.sh -i=4 -c=100 -m=btrfs -a=fair -p=/data/blockchain