tape: create tmp dirs early at server startup
This commit is contained in:
parent
aca4c2b5a9
commit
cd44fb8d84
@ -39,6 +39,8 @@ async fn run() -> Result<(), Error> {
|
|||||||
proxmox_backup::rrd::create_rrdb_dir()?;
|
proxmox_backup::rrd::create_rrdb_dir()?;
|
||||||
proxmox_backup::server::jobstate::create_jobstate_dir()?;
|
proxmox_backup::server::jobstate::create_jobstate_dir()?;
|
||||||
proxmox_backup::tape::create_tape_status_dir()?;
|
proxmox_backup::tape::create_tape_status_dir()?;
|
||||||
|
proxmox_backup::tape::create_drive_state_dir()?;
|
||||||
|
proxmox_backup::tape::create_changer_state_dir()?;
|
||||||
|
|
||||||
if let Err(err) = generate_auth_key() {
|
if let Err(err) = generate_auth_key() {
|
||||||
bail!("unable to generate auth key - {}", err);
|
bail!("unable to generate auth key - {}", err);
|
||||||
|
@ -463,10 +463,12 @@ fn save_changer_state_cache(
|
|||||||
changer: &str,
|
changer: &str,
|
||||||
state: &MtxStatus,
|
state: &MtxStatus,
|
||||||
) -> Result<(), Error> {
|
) -> 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);
|
path.push(changer);
|
||||||
|
|
||||||
|
let state = serde_json::to_string_pretty(state)?;
|
||||||
|
|
||||||
let backup_user = crate::backup::backup_user()?;
|
let backup_user = crate::backup::backup_user()?;
|
||||||
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0644);
|
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0644);
|
||||||
let options = CreateOptions::new()
|
let options = CreateOptions::new()
|
||||||
@ -474,8 +476,6 @@ fn save_changer_state_cache(
|
|||||||
.owner(backup_user.uid)
|
.owner(backup_user.uid)
|
||||||
.group(backup_user.gid);
|
.group(backup_user.gid);
|
||||||
|
|
||||||
let state = serde_json::to_string_pretty(state)?;
|
|
||||||
|
|
||||||
replace_file(path, state.as_bytes(), options)
|
replace_file(path, state.as_bytes(), options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ mod mam;
|
|||||||
pub use mam::*;
|
pub use mam::*;
|
||||||
|
|
||||||
use std::os::unix::io::AsRawFd;
|
use std::os::unix::io::AsRawFd;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use anyhow::{bail, format_err, Error};
|
use anyhow::{bail, format_err, Error};
|
||||||
use ::serde::{Deserialize};
|
use ::serde::{Deserialize};
|
||||||
@ -470,10 +471,9 @@ pub fn set_tape_device_state(
|
|||||||
drive: &str,
|
drive: &str,
|
||||||
state: &str,
|
state: &str,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let mut path = "/run/proxmox-backup/drive-state".to_string();
|
|
||||||
std::fs::create_dir_all(&path)?;
|
let mut path = PathBuf::from(crate::tape::DRIVE_STATE_DIR);
|
||||||
use std::fmt::Write;
|
path.push(drive);
|
||||||
write!(path, "/{}", drive)?;
|
|
||||||
|
|
||||||
let backup_user = crate::backup::backup_user()?;
|
let backup_user = crate::backup::backup_user()?;
|
||||||
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0644);
|
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0644);
|
||||||
|
@ -46,6 +46,12 @@ pub use pool_writer::*;
|
|||||||
/// Directory path where we store all tape status information
|
/// Directory path where we store all tape status information
|
||||||
pub const TAPE_STATUS_DIR: &str = "/var/lib/proxmox-backup/tape";
|
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
|
/// We limit chunk archive size, so that we can faster restore a
|
||||||
/// specific chunk (The catalog only store file numbers, so we
|
/// specific chunk (The catalog only store file numbers, so we
|
||||||
/// need to read the whole archive to restore a single chunk)
|
/// need to read the whole archive to restore a single chunk)
|
||||||
@ -58,14 +64,44 @@ pub const COMMIT_BLOCK_SIZE: usize = 128*1024*1024*1024; // 128 GiB
|
|||||||
/// Create tape status dir with correct permission
|
/// Create tape status dir with correct permission
|
||||||
pub fn create_tape_status_dir() -> Result<(), Error> {
|
pub fn create_tape_status_dir() -> Result<(), Error> {
|
||||||
let backup_user = crate::backup::backup_user()?;
|
let backup_user = crate::backup::backup_user()?;
|
||||||
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0640);
|
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0750);
|
||||||
let opts = CreateOptions::new()
|
let options = CreateOptions::new()
|
||||||
.perm(mode)
|
.perm(mode)
|
||||||
.owner(backup_user.uid)
|
.owner(backup_user.uid)
|
||||||
.group(backup_user.gid);
|
.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))?;
|
.map_err(|err: Error| format_err!("unable to create tape status dir - {}", err))?;
|
||||||
|
|
||||||
Ok(())
|
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(())
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user