changer: &str,
state: &MtxStatus,
) -> Result<(), Error> {
- let mut path = PathBuf::from("/run/proxmox-backup/changer-state");
- std::fs::create_dir_all(&path)?;
+
+ let mut path = PathBuf::from(crate::tape::CHANGER_STATE_DIR);
path.push(changer);
+ let state = serde_json::to_string_pretty(state)?;
+
let backup_user = crate::backup::backup_user()?;
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0644);
let options = CreateOptions::new()
.owner(backup_user.uid)
.group(backup_user.gid);
- let state = serde_json::to_string_pretty(state)?;
-
replace_file(path, state.as_bytes(), options)
}
pub use mam::*;
use std::os::unix::io::AsRawFd;
+use std::path::PathBuf;
use anyhow::{bail, format_err, Error};
use ::serde::{Deserialize};
drive: &str,
state: &str,
) -> Result<(), Error> {
- let mut path = "/run/proxmox-backup/drive-state".to_string();
- std::fs::create_dir_all(&path)?;
- use std::fmt::Write;
- write!(path, "/{}", drive)?;
+
+ let mut path = PathBuf::from(crate::tape::DRIVE_STATE_DIR);
+ path.push(drive);
let backup_user = crate::backup::backup_user()?;
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0644);
/// Directory path where we store all tape status information
pub const TAPE_STATUS_DIR: &str = "/var/lib/proxmox-backup/tape";
+/// Directory path where we store temporary drive state
+pub const DRIVE_STATE_DIR: &str = concat!(PROXMOX_BACKUP_RUN_DIR_M!(), "/drive-state");
+
+/// Directory path where we store cached changer state
+pub const CHANGER_STATE_DIR: &str = concat!(PROXMOX_BACKUP_RUN_DIR_M!(), "/changer-state");
+
/// 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)
/// 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()
+ let mode = nix::sys::stat::Mode::from_bits_truncate(0o0750);
+ let options = CreateOptions::new()
.perm(mode)
.owner(backup_user.uid)
.group(backup_user.gid);
- create_path(TAPE_STATUS_DIR, None, Some(opts))
+ create_path(TAPE_STATUS_DIR, None, Some(options))
.map_err(|err: Error| format_err!("unable to create tape status dir - {}", err))?;
Ok(())
}
+
+/// Create drive state dir with correct permission
+pub fn create_drive_state_dir() -> Result<(), Error> {
+ let backup_user = crate::backup::backup_user()?;
+ let mode = nix::sys::stat::Mode::from_bits_truncate(0o0750);
+ let options = CreateOptions::new()
+ .perm(mode)
+ .owner(backup_user.uid)
+ .group(backup_user.gid);
+
+ create_path(DRIVE_STATE_DIR, None, Some(options))
+ .map_err(|err: Error| format_err!("unable to create drive state dir - {}", err))?;
+
+ Ok(())
+}
+
+/// Create changer state cache dir with correct permission
+pub fn create_changer_state_dir() -> Result<(), Error> {
+ let backup_user = crate::backup::backup_user()?;
+ let mode = nix::sys::stat::Mode::from_bits_truncate(0o0750);
+ let options = CreateOptions::new()
+ .perm(mode)
+ .owner(backup_user.uid)
+ .group(backup_user.gid);
+
+ create_path(CHANGER_STATE_DIR, None, Some(options))
+ .map_err(|err: Error| format_err!("unable to create changer state dir - {}", err))?;
+
+ Ok(())
+}