Skip to main content

btrfs_cli/
balance.rs

1pub(crate) use crate::util::open_path;
2use crate::{CommandGroup, Runnable};
3use clap::Parser;
4
5mod cancel;
6mod filters;
7mod pause;
8mod resume;
9mod start;
10mod status;
11
12pub use self::{cancel::*, pause::*, resume::*, start::*, status::*};
13
14/// Balance data across devices, or change block groups using filters.
15///
16/// Rebalance data and metadata across devices to improve performance or
17/// recover space. Balance is typically a long-running operation. You can
18/// pause, resume, or cancel a balance in progress. Progress and status can
19/// be queried at any time. Requires CAP_SYS_ADMIN.
20#[derive(Parser, Debug)]
21#[allow(clippy::doc_markdown)]
22#[clap(arg_required_else_help = true)]
23pub struct BalanceCommand {
24    #[clap(subcommand)]
25    pub subcommand: BalanceSubcommand,
26}
27
28impl CommandGroup for BalanceCommand {
29    fn leaf(&self) -> &dyn Runnable {
30        match &self.subcommand {
31            BalanceSubcommand::Start(cmd) => cmd,
32            BalanceSubcommand::Pause(cmd) => cmd,
33            BalanceSubcommand::Cancel(cmd) => cmd,
34            BalanceSubcommand::Resume(cmd) => cmd,
35            BalanceSubcommand::Status(cmd) => cmd,
36        }
37    }
38}
39
40#[derive(Parser, Debug)]
41pub enum BalanceSubcommand {
42    Start(BalanceStartCommand),
43    Pause(BalancePauseCommand),
44    Cancel(BalanceCancelCommand),
45    Resume(BalanceResumeCommand),
46    Status(BalanceStatusCommand),
47}