proxmox-backup/src/tape/mod.rs

71 lines
1.6 KiB
Rust
Raw Normal View History

2020-12-15 12:13:44 +00:00
//! Magnetic tape backup
2020-12-09 09:16:01 +00:00
use anyhow::{format_err, Error};
use proxmox::tools::fs::{
create_path,
CreateOptions,
};
2020-12-05 09:45:08 +00:00
pub mod file_formats;
2020-12-05 09:51:34 +00:00
mod tape_write;
pub use tape_write::*;
2020-12-05 09:54:38 +00:00
mod tape_read;
pub use tape_read::*;
2020-12-05 11:20:46 +00:00
mod helpers;
pub use helpers::*;
2020-12-05 11:53:08 +00:00
mod inventory;
pub use inventory::*;
mod changer;
pub use changer::*;
2020-12-07 07:27:15 +00:00
mod drive;
pub use drive::*;
2020-12-09 09:16:01 +00:00
mod media_state_database;
pub use media_state_database::*;
mod online_status_map;
pub use online_status_map::*;
2020-12-10 10:41:35 +00:00
mod media_pool;
pub use media_pool::*;
2020-12-15 12:13:44 +00:00
mod media_catalog;
pub use media_catalog::*;
2020-12-16 11:08:34 +00:00
mod chunk_archive;
pub use chunk_archive::*;
2020-12-09 09:16:01 +00:00
/// Directory path where we store all tape status information
pub const TAPE_STATUS_DIR: &str = "/var/lib/proxmox-backup/tape";
2020-12-05 11:20:46 +00:00
/// We limit chunk archive size, so that we can faster restore a
/// specific chunk (The catalog only store file numbers, so we
/// need to read the whole archive to restore a single chunk)
pub const MAX_CHUNK_ARCHIVE_SIZE: usize = 4*1024*1024*1024; // 4GB for now
/// To improve performance, we need to avoid tape drive buffer flush.
pub const COMMIT_BLOCK_SIZE: usize = 128*1024*1024*1024; // 128 GiB
2020-12-09 09:16:01 +00:00
/// Create tape status dir with correct permission
pub fn create_tape_status_dir() -> Result<(), Error> {
let backup_user = crate::backup::backup_user()?;
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0640);
let opts = CreateOptions::new()
.perm(mode)
.owner(backup_user.uid)
.group(backup_user.gid);
create_path(TAPE_STATUS_DIR, None, Some(opts))
.map_err(|err: Error| format_err!("unable to create tape status dir - {}", err))?;
Ok(())
}