snapshots

This commit is contained in:
JMARyA 2025-01-05 01:43:55 +01:00
parent 738c7ed504
commit 7238164677
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
5 changed files with 297 additions and 4 deletions

View file

@ -45,10 +45,17 @@ pub fn run_backup_rsync(conf: &RsyncConfig) {
}
}
cmd.push(&conf.src);
cmd.push(&conf.dest);
run_command(&cmd);
if conf.cephfs_snap.unwrap_or_default() {
let (snap_dir, snap_name) = cephfs_snap_create(&conf.src);
cmd.push(&snap_dir);
cmd.push(&conf.dest);
run_command(&cmd);
cephfs_snap_remove(&conf.src, &snap_name);
} else {
cmd.push(&conf.src);
cmd.push(&conf.dest);
run_command(&cmd);
}
}
pub fn run_backup(conf: Config) {
@ -68,3 +75,28 @@ pub fn run_backup(conf: Config) {
run_command(&["sh", script.as_str()]);
}
}
pub fn cephfs_snap_create(dir: &str) -> (String, String) {
let path = std::path::Path::new(dir);
let now = chrono::Utc::now().format("%Y_%m_%d").to_string();
let snap_name = format!("SNAP_{now}");
let snap_dir = path.join(".snap").join(&snap_name);
println!("--> Creating snapshot {} on {}", snap_name, dir);
if std::fs::create_dir(&snap_dir).is_err() {
if !std::fs::exists(&snap_dir).unwrap() {
println!("{} Could not create snapshot", "Error:".paint(Color::Red));
std::process::exit(1);
}
}
(snap_dir.to_str().unwrap().to_string(), snap_name)
}
pub fn cephfs_snap_remove(dir: &str, snap: &str) {
let path = std::path::Path::new(dir);
let snap_dir = path.join(".snap").join(snap);
println!("--> Removing snapshot {} on {}", snap, dir);
std::fs::remove_dir(snap_dir).unwrap()
}

View file

@ -19,6 +19,7 @@ pub struct RsyncConfig {
pub exclude: Option<Vec<String>>,
pub delete: Option<bool>,
pub ensure_exists: Option<String>,
pub cephfs_snap: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]