fix scrub logic

This commit is contained in:
timeshifter
2026-05-03 15:21:15 +02:00
parent e8daad0c16
commit df540dd43b
2 changed files with 16 additions and 2 deletions
+7 -1
View File
@@ -21,10 +21,16 @@ pub fn zpool_scrub(pool_name: &str) -> Result<()> {
run_command("zpool", vec!["scrub", pool_name])
}
pub fn zpool_wait_scrub(pool_name: &str) -> Result<()> {
pub fn zpool_wait_scrub_complete(pool_name: &str) -> Result<()> {
run_command("zpool", vec!["wait", "-t", "scrub", pool_name])
}
pub(crate) fn zpool_scrub_in_progress(pool_name: &str) -> Result<bool> {
let output = get_output("zpool", vec!["status", pool_name])?;
let string = String::from_utf8(output.stdout)?;
Ok(string.contains("scrub in progress"))
}
pub fn zpool_status(pool_name: &str) -> Result<String> {
let output = get_output("zpool", vec!["status", pool_name])?;
let status = String::from_utf8(output.stdout)?;
+9 -1
View File
@@ -95,7 +95,15 @@ impl ZPool {
}
pub fn scrub(&self) -> Result<()> {
zpool_scrub(&self.name)
let name = &self.name;
if !zpool_scrub_in_progress(&self.name)? {
println!("scrubbing {name}");
zpool_scrub(&self.name)?;
}
println!("waiting for scrub to complete");
zpool_wait_scrub_complete(&self.name)
}
pub fn import(name: &str) -> Result<ZPool> {