Skip to main content

btrfs_cli/
rescue.rs

1use crate::{CommandGroup, Runnable};
2use clap::Parser;
3
4mod chunk_recover;
5mod clear_ino_cache;
6mod clear_space_cache;
7mod clear_uuid_tree;
8mod create_control_device;
9mod fix_data_checksum;
10mod fix_device_size;
11mod super_recover;
12mod zero_log;
13
14pub use self::{
15    chunk_recover::*, clear_ino_cache::*, clear_space_cache::*,
16    clear_uuid_tree::*, create_control_device::*, fix_data_checksum::*,
17    fix_device_size::*, super_recover::*, zero_log::*,
18};
19
20/// Toolbox for specific rescue operations.
21///
22/// Provide emergency recovery tools for damaged or unrecoverable filesystems.
23/// These operations are potentially dangerous and should only be used when
24/// the filesystem cannot be mounted or accessed through normal means.
25/// Most rescue operations require CAP_SYS_ADMIN and an unmounted filesystem.
26#[derive(Parser, Debug)]
27#[allow(clippy::doc_markdown)]
28#[clap(arg_required_else_help = true)]
29pub struct RescueCommand {
30    #[clap(subcommand)]
31    pub subcommand: RescueSubcommand,
32}
33
34impl CommandGroup for RescueCommand {
35    fn leaf(&self) -> &dyn Runnable {
36        match &self.subcommand {
37            RescueSubcommand::ChunkRecover(cmd) => cmd,
38            RescueSubcommand::SuperRecover(cmd) => cmd,
39            RescueSubcommand::ZeroLog(cmd) => cmd,
40            RescueSubcommand::FixDeviceSize(cmd) => cmd,
41            RescueSubcommand::FixDataChecksum(cmd) => cmd,
42            RescueSubcommand::CreateControlDevice(cmd) => cmd,
43            RescueSubcommand::ClearInoCache(cmd) => cmd,
44            RescueSubcommand::ClearSpaceCache(cmd) => cmd,
45            RescueSubcommand::ClearUuidTree(cmd) => cmd,
46        }
47    }
48}
49
50#[derive(Parser, Debug)]
51pub enum RescueSubcommand {
52    ChunkRecover(RescueChunkRecoverCommand),
53    SuperRecover(RescueSuperRecoverCommand),
54    ZeroLog(RescueZeroLogCommand),
55    FixDeviceSize(RescueFixDeviceSizeCommand),
56    FixDataChecksum(RescueFixDataChecksumCommand),
57    CreateControlDevice(RescueCreateControlDeviceCommand),
58    ClearInoCache(RescueClearInoCacheCommand),
59    ClearSpaceCache(RescueClearSpaceCacheCommand),
60    ClearUuidTree(RescueClearUuidTreeCommand),
61}