Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nixos/zfs: skip scrub if one is in progress #362131

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

thefossguy
Copy link
Member

The zpool-scrub command has only one non-zero return code and that is for everything: failed to initiate a scrub for some reason, but not for which reason. Since that doesn't exist, we can check the output of the zpool-status command and see if a scrub is in progress. If it is, we skip scrubbing the zpool because doing so would do nothing but cause the zpool-scrub command to erroneously exit.

A for loop was added to iterate over multiple zpools, in case there are more than one zpool that the user hasn't specified in the NixOS configuration.

Fixes #361952.

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 25.05 Release Notes (or backporting 24.11 and 25.05 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

Add a 👍 reaction to pull requests you find important.

The `zpool-scrub` command has only one non-zero return code and that is
for everything: failed to initiate a scrub for _some_ reason, but not
for which reason. Since that doesn't exist, we can check the output of
the `zpool-status` command and see if a scrub is in progress. If it is,
we skip scrubbing the zpool because doing so would do nothing but cause
the `zpool-scrub` command to erroneously exit.

A `for` loop was added to iterate over multiple zpools, in case there
are more than one zpool that the user hasn't specified in the NixOS
configuration.

Fixes NixOS#361952.
@github-actions github-actions bot added 6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: module (update) This PR changes an existing module in `nixos/` 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10 labels Dec 5, 2024
@nixos-discourse
Copy link

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:

https://discourse.nixos.org/t/prs-ready-for-review/3032/4924

@Luflosi
Copy link
Contributor

Luflosi commented Dec 18, 2024

Checking if something can be done and then doing the thing is prone to race-conditions. Instead of first checking if a scrub is not running and then starting the scrub, is it instead possible to try to start the scrub and if that fails to analyze the error message to determine if it failed due to a scrub already running?

@thefossguy
Copy link
Member Author

That's actually a better approach. I started a scrub and attempting to start a scrub while one is in progress, I get the following error message:

cannot scrub $ZPOOL: currently scrubbing; use 'zpool scrub -s' to cancel scrub

I'll push another commit soon-ish.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: module (update) This PR changes an existing module in `nixos/` 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ZFS auto scrub service fails if a pool is already being scrubbed
3 participants