update
This commit is contained in:
parent
8413dfa279
commit
2e7d4aa52b
4 changed files with 39 additions and 3 deletions
|
@ -59,6 +59,12 @@ comment = "Backup of /home/me/"
|
||||||
# Compression
|
# Compression
|
||||||
compression = "zstd,10"
|
compression = "zstd,10"
|
||||||
|
|
||||||
|
# Ensure directory exists before backup
|
||||||
|
ensure_exists = "/home/me"
|
||||||
|
|
||||||
|
# Make a CephFS snapshot before backup
|
||||||
|
cephfs_snap = true
|
||||||
|
|
||||||
# Borg Check Operation
|
# Borg Check Operation
|
||||||
[[borg_check]]
|
[[borg_check]]
|
||||||
# Repository to check
|
# Repository to check
|
||||||
|
|
|
@ -116,3 +116,10 @@ pub fn cephfs_snap_remove(dir: &str, snap: &str) {
|
||||||
println!("--> Removing snapshot {} on {}", snap, dir);
|
println!("--> Removing snapshot {} on {}", snap, dir);
|
||||||
std::fs::remove_dir(snap_dir).unwrap()
|
std::fs::remove_dir(snap_dir).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn cephfs_snap_remove_dir(dir: &str) {
|
||||||
|
let path = std::path::Path::new(dir);
|
||||||
|
|
||||||
|
println!("--> Removing snapshot {}", path.to_str().unwrap());
|
||||||
|
std::fs::remove_dir(path).unwrap()
|
||||||
|
}
|
||||||
|
|
23
src/borg.rs
23
src/borg.rs
|
@ -1,7 +1,7 @@
|
||||||
use yansi::{Color, Paint};
|
use yansi::{Color, Paint};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
backup::nowtime,
|
backup::{cephfs_snap_create, cephfs_snap_remove_dir, ensure_exists, nowtime},
|
||||||
config::{BorgCheckConfig, BorgConfig, BorgPruneConfig},
|
config::{BorgCheckConfig, BorgConfig, BorgPruneConfig},
|
||||||
run_command,
|
run_command,
|
||||||
};
|
};
|
||||||
|
@ -24,6 +24,10 @@ pub fn create_archive(conf: &BorgConfig) {
|
||||||
nowtime()
|
nowtime()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if let Some(dir) = &conf.ensure_exists {
|
||||||
|
ensure_exists(dir);
|
||||||
|
}
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"--> Running backup for {}",
|
"--> Running backup for {}",
|
||||||
conf.src.join(",").paint(Color::Yellow),
|
conf.src.join(",").paint(Color::Yellow),
|
||||||
|
@ -76,11 +80,28 @@ pub fn create_archive(conf: &BorgConfig) {
|
||||||
|
|
||||||
cmd.push(&repo);
|
cmd.push(&repo);
|
||||||
|
|
||||||
|
let mut snaps = Vec::new();
|
||||||
|
|
||||||
|
if conf.cephfs_snap.unwrap_or_default() {
|
||||||
|
for path in &conf.src {
|
||||||
|
let snap = cephfs_snap_create(&path);
|
||||||
|
snaps.push(snap);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
for path in &conf.src {
|
for path in &conf.src {
|
||||||
cmd.push(path);
|
cmd.push(path);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let snap_dirs = snaps.iter().map(|x| x.0.as_str()).collect::<Vec<_>>();
|
||||||
|
cmd.extend(snap_dirs);
|
||||||
|
|
||||||
run_command(&cmd, conf.passphrase.clone());
|
run_command(&cmd, conf.passphrase.clone());
|
||||||
|
|
||||||
|
for cleanup in &snaps {
|
||||||
|
cephfs_snap_remove_dir(&cleanup.0);
|
||||||
|
println!("--> Cleaning up snap {}", cleanup.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn prune_archive(conf: &BorgPruneConfig) {
|
pub fn prune_archive(conf: &BorgPruneConfig) {
|
||||||
|
|
|
@ -37,6 +37,8 @@ pub struct BorgConfig {
|
||||||
pub no_xattrs: Option<bool>,
|
pub no_xattrs: Option<bool>,
|
||||||
pub comment: Option<String>,
|
pub comment: Option<String>,
|
||||||
pub compression: Option<String>,
|
pub compression: Option<String>,
|
||||||
|
pub ensure_exists: Option<String>,
|
||||||
|
pub cephfs_snap: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize)]
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
|
|
Loading…
Reference in a new issue