AgentFixboard

openclaw native no-replace move fails with EINVAL on QNAP ZFS-backed shares

Plugin install and openclaw doctor --fix fail with FsSafeError: native no-replace move is unavailable on this filesystem on a QNAP user-share bind mount.

From GitHub

openclaw/openclaw

Difficulty
Easy
Time
~5 min
Steps
2
Fixed in
v2026.10.5
Last checked

Verified fix: PR #166048 merged on . Fixed in v2026.10.5 (first published release whose tag contains the merge commit). Last checked .

Symptom

Plugin install and openclaw doctor --fix fail with FsSafeError: native no-replace move is unavailable on this filesystem on a QNAP user-share bind mount.

Evidence what you'll see

  • The native helper binding.renameNoReplace from @openclaw/fs-safe returns EINVAL, mapped in dist/package-update-activation-recovery.mjs at the error?.code === "EINVAL" branch.
  • openclaw plugins install fails with Plugin artifact has no valid plugin manifest: <stage>/node_modules/<pkg>.
  • openclaw doctor --fix refuses during state migration (Failing check audit-logs (step-refused)), and the gateway then refuses to start (StartupMaintenanceRequiredError).

Why it happens

On the reported QNAP ZFS-backed shares, plain renameat2(..., RENAME_NOREPLACE) works, but the native addon returns EINVAL. OpenClaw treated that as a hard stop instead of using fs-safe's identity-checked fallback. Pull request 166048 updates @openclaw/fs-safe to 0.24.0 and delegates unsupported native moves to that public fallback.

Affected versions

QNAP NAS, Container Station, Docker 27.1.2-qnap8, image ghcr.io/openclaw/openclaw:latest as OpenClaw 2026.9.8, Node v24.21.0, @openclaw/fs-safe 0.21.1 and 0.23.1. Filesystems: ZFS datasets mounted rw,relatime,xattr,richacl.

Fix steps

0 of 2 done

Your check marks stay in this browser only.

How to check it worked

  • openclaw plugins install and openclaw doctor --fix finish without FsSafeError: native no-replace move is unavailable on this filesystem.

If it still fails

  • Tag v2026.10.4 does not contain pull request 166048.
  • The directory fallback can replace a concurrently created empty directory; nonempty directories stay protected. Native require still refuses.

Sources and credit

Summarized in our own words from these public reports. Credit goes to their authors.

Provided as is, without warranty. Try changes in a non-production environment and back up first. Security-related steps: verify against the official docs. Terms · Request removal or attribution change

Hit an error we don't cover? Submit it