发布

  • release: v0.4.3 — btrfs Copy-on-Write fragmentation fix (#131)

    frostbyte_neo 发布于 2026-05-06 06:53:45 +00:00

    The 0.4.x line's headline storage rework: per-user bind mount with
    automatic NoCoW (chattr +C) so Windows VM disk image writes stop
    forking new btrfs extents on every overwrite. On btrfs hosts pod
    recreates that previously took many minutes (and frequently timed
    out on the 300 s budget) finish in 30 s like they always did on
    ext4. Reported by @xiyeming in #121, #122; the cachyos failure
    cascade in #126 has the same root cause (install.bat dies mid-stage
    during btrfs CoW file-op stalls; without rdprrap installed the
    host's FreeRDP fallback hits multi-session reset).

    Five PRs landing the fix end-to-end:

    • PR #125 — bind mount + auto chattr +C + named-volume migration
      tool. Fresh installs default to ~/.local/share/winpodx/storage;
      existing users keep the named volume; winpodx setup --migrate-storage (or auto-trigger via winpodx migrate)
      moves it to the bind mount path without reinstalling Windows.
    • PR #127 — compose-prefixed volume name resolution
      (winpodx_winpodx-data, not winpodx-data).
    • PR #128 — chattr +C result inline print + post-rsync NoCoW
      verification (re-lsattr the dir AND a sample .img after rsync).
    • PR #129 — refuse to re-migrate when bind-mount target is already
      populated; defends against install.sh-runs-twice destructive
      overwrite of the already-migrated NoCoW disk image.
    • PR #130 — detect_path_fs walks up to existing ancestor before
      findmnt. THE actual root cause for "chattr never applies on fresh
      installs": findmnt --target on a non-existent path returns rc=1
      with empty stdout on openSUSE Tumbleweed (the docs lie), so
      detect_path_fs returned "unknown" → chattr_will_run False → entire
      chattr branch silent no-op. Walk-up makes plan_migration's pre-
      mkdir target probe resolve to the fs that will contain it.

    Smoke-tested end-to-end on openSUSE Tumbleweed btrfs: clean wipe →
    v0.4.2 fresh install → upgrade to main. install.sh prints
    chattr +C applied to /home/.../winpodx/storage (NoCoW for new files) between Migrating storage... and OK: migrated 71 GiB.
    Afterwards lsattr -d and lsattr data.img both show the C flag.
    dockur's Warning: COW (copy on write) is not disabled for disk image file /storage/data.img no longer appears in the journal.

    657 passed, 1 skipped, ruff check + format clean.

    下载附件