-
release: v0.4.3 — btrfs Copy-on-Write fragmentation fix (#131)
发布于
2026-05-06 06:53:45 +00:00 | 600 次提交 在此版本后已推送到 mainThe 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 viawinpodx 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)betweenMigrating storage...andOK: migrated 71 GiB.
Afterwardslsattr -dandlsattr data.imgboth show the C flag.
dockur'sWarning: COW (copy on write) is not disabled for disk image file /storage/data.imgno longer appears in the journal.657 passed, 1 skipped, ruff check + format clean.
下载附件
- PR #125 — bind mount + auto chattr +C + named-volume migration