# Phase 2 验证方案(用户执行) 目标:验证 phase2 新增 hook 与 POSIX 语义(openat/pread/pwrite/fsync/ftruncate/stat/rename 等)。 ## 1) 构建 ```bash cd /home/lian/share/10.1-spdk/zvfs make -C zvfs -j make -C test -j ``` ## 2) 关键回归(LD_PRELOAD) ```bash cd /home/lian/share/10.1-spdk/zvfs sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_basic /zvfs sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_lseek /zvfs sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_two_files /zvfs sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_phase2_posix /zvfs ``` 期望: - 以上 4 个测试全部 PASSED。 - `test_phase2_posix` 会覆盖: - `mkdir/openat/close/rmdir` - `pread/pwrite` + 稀疏洞校验 - `fsync/fdatasync` - `ftruncate` - `fstat/stat/access` - `rename` - `O_EXCL` 与只读 fd 上 `write` 的 errno ## 3) db_bench 最小验证 ```bash cd /home/lian/share/10.1-spdk/zvfs sudo env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so \ /home/lian/env/rocksdb-test/db_bench \ --benchmarks=fillseq \ --db=/zvfs/rdb_phase2 \ --num=200000 \ --value_size=128 \ --threads=1 \ --compression_type=none \ --stats_interval_seconds=5 sudo /home/lian/env/rocksdb-test/db_bench \ --benchmarks=fillseq \ --db=/tmp/rdb_native \ --num=200000 \ --value_size=128 \ --threads=1 \ --compression_type=none \ --stats_interval_seconds=5 ``` 期望: - 不出现 `Function not implemented` - 不出现 `Bad file descriptor` - 不出现 `While mkdir if missing` 相关 `ENOENT` ## 4) 失败场景建议(可选) 用 `strace` 辅助确认关键 syscall 已被接管: ```bash sudo strace -f -qq -o /tmp/phase2_check.strace \ -e trace=%file,%desc,fsync,fdatasync,ftruncate,pread64,pwrite64,rename,fcntl \ env LD_PRELOAD=/home/lian/share/10.1-spdk/zvfs/zvfs/libzvfs.so ./test/bin/test_phase2_posix /zvfs ``` 看点: - `openat("/zvfs/...")` 不再因目录缺失直接失败 - `rename`/`ftruncate`/`pread64`/`fdatasync` 调用链完整 ## 5) 回填要求 执行后请把结果回填到 `plan/plan.md` 的 phase2 区域: - `### 阶段验收` - `### 正确性验证方案`