记录一下调试 bcachefs 的环境搭建。
编译内核的时候要打开 bcachefs 相关的选项,选为 built-in
。
下载 bcachefs-tools,根据文档编译。因为主机上的内核还没有 bcachefs 的支持,而且我把 bcachefs 作为根文件系统方便调试,因此编译时要打开 fuse 方便拷数据(需要额外安装 libfuse3-dev):
BCACHEFS_FUSE=1 make -j`nproc`
然后制作 rootfs:
truncate -s 1073741824 /path/to/bcachefs.raw
/path/to/bcachefs-tools/target/release/bcachefs format /path/to/bcachefs.raw
/path/to/bcachefs-tools/target/release/bcachefs fusemount /path/to/bcachefs.raw mnt
挂载到 mnt 之后就可以开始往里拷执行环境了(tar 解压备份的系统到 mnt 中)。
启动命令为:
qemu-system-x86_64 -enable-kvm -kernel /path/to/linux/arch/x86_64/boot/bzImage -hda /path/to/bcachefs.raw -append "root=/dev/sda console=ttyS0 rootfstype=bcachefs rw" -nographic -s -S -cpu host
这里加上了 kvm 支持,性能会好很多。
bcachefs-tools 里面包含了完整的 bcachefs 代码,标准的文件系统功能(读写,创建/删除/查看目录等)也可以直接通过 fuse 来 debug:
sudo gdb --args /path/to/bcachefs-tools/target/release/bcachefs fusemount /path/to/bcachefs.raw mnt
但是如果要查看 subvolume/snapshot 等非标准 posix 接口的功能,就只能 debug 内核了,环境搭建可以参考 这里。