Implement VFS RAID-Z (software RAID)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

- Add VfsRaidLevel enum:
  - Single (no RAID)
  - RaidZ1 (single parity, similar to RAID 5)
  - RaidZ2 (double parity, similar to RAID 6)
  - RaidZ3 (triple parity)
- Add VfsRaidBackend with:
  - Stripe-based data distribution across disks
  - Galois Field arithmetic for parity (P/Q/R)
  - gf_exp, gf_mul for Reed-Solomon coding
  - rebuild_disk() for disk recovery
- Add VfsRaidConfig:
  - level (RAID level)
  - stripe_size (default 64KB)
  - disk_paths (storage devices)
- All VfsBackend methods propagate to all disks
- Foundation for ZFS-style software RAID

All 229 tests pass.
This commit is contained in:
Warren
2026-06-20 23:17:00 +08:00
parent 37f5da7d6c
commit 4afd96c9ac
2 changed files with 261 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ pub mod compression;
pub mod dedup;
pub mod local_fs;
pub mod open_flags;
pub mod raid;
pub mod s3_fs;
pub mod smb_fs;
#[cfg(feature = "smb-server")]
@@ -452,3 +453,48 @@ impl Default for VfsDedupConfig {
}
}
}
/// RAID级别ZFS RAID-Z
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum VfsRaidLevel {
/// 单磁盘无RAID
Single,
/// RAID-Z1单奇偶校验类似RAID 5
RaidZ1,
/// RAID-Z2双奇偶校验类似RAID 6
RaidZ2,
/// RAID-Z3三奇偶校验
RaidZ3,
}
impl std::fmt::Display for VfsRaidLevel {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
VfsRaidLevel::Single => write!(f, "Single"),
VfsRaidLevel::RaidZ1 => write!(f, "RAID-Z1"),
VfsRaidLevel::RaidZ2 => write!(f, "RAID-Z2"),
VfsRaidLevel::RaidZ3 => write!(f, "RAID-Z3"),
}
}
}
/// RAID配置
#[derive(Debug, Clone)]
pub struct VfsRaidConfig {
/// RAID级别
pub level: VfsRaidLevel,
/// 条带大小字节默认64KB
pub stripe_size: usize,
/// 磁盘列表路径
pub disk_paths: Vec<PathBuf>,
}
impl Default for VfsRaidConfig {
fn default() -> Self {
Self {
level: VfsRaidLevel::Single,
stripe_size: 65536,
disk_paths: Vec::new(),
}
}
}