12 个版本
0.5.3 | 2023年10月23日 |
---|---|
0.5.2 | 2022年5月19日 |
0.5.0 | 2021年10月21日 |
0.4.2 | 2021年8月16日 |
0.1.1 | 2021年4月29日 |
#299 在 文件系统
每月 26 次下载
245KB
6K SLoC
btrd
btrd 是一个 (发音 "buttered") btrfs 调试器。
btrd
是一个 REPL 调试器,它可以帮助检查挂载的 btrfs 文件系统。btrd 特别适用于探索磁盘结构,并且对所有磁盘类型都有全面的了解。
演示
$ sudo btrd
btrd (the btrfs debugger) v0.1.0
Type 'help' for help
(btrd) filesystem "/mnt/btrfs"
(btrd) k = key(BTRFS_DEV_TREE_OBJECTID, BTRFS_ROOT_ITEM_KEY, 0, 0)
(btrd) print k
struct _btrfs_ioctl_search_key {
.min_objectid = 4,
.max_objectid = 18446744073709551615,
.min_type = 132,
.max_type = 255,
.min_offset = 0,
.max_offset = 18446744073709551615,
.min_transid = 0,
.max_transid = 18446744073709551615,
}
(btrd) res = search(BTRFS_ROOT_TREE_OBJECTID, k)
(btrd) len(res)
297
(btrd) res[0]
struct btrfs_root_item {
.inode = struct btrfs_inode_item {
.generation = 1,
.transid = 0,
.size = 3,
.nbytes = 16384,
<...>
.sequence = 0,
.reserved = [
0,
0,
0,
0,
],
.atime = struct btrfs_timespec {
.sec = 0,
.nsec = 0,
},
<...>
(btrd) print res[0].inode.nbytes
16384
(btrd) typeof(res[0])
"struct btrfs_root_item"
(btrd) keyof(res[0])
struct btrfs_key {
.objectid = 4,
.type = 132,
.offset = 0,
}
构建
$ git clone https://github.com/danobi/btrd.git
$ cd btrd
$ cargo build --release
$ sudo ./target/release/btrd
语言特性
btrd 的脚本语言不是一种恶搞,而是一种动态类型语言,专门针对文件系统调试。以下是一些语言特性
类型
- 字符串
- 整数(所有整数在内部都表示为 i128)
- 布尔值
- 数组(不能由用户实例化)
- 结构体(不能由用户定义/实例化)
- 函数(一等支持;不能由用户定义)
表达式
- 二元表达式(如
+
、-
、/
、%
、>>
、&&
、==
等) - 一元表达式(如
-
、~
、!
) - 括号
- 函数调用
- 结构体字段访问
- 数组索引
- 类型转换(如
(struct btrfs_root) physical_bytenr
)
控制流
while
for
(基于范围的循环)if/else
不支持,也不会支持
- 浮点数
依赖关系
~6–14MB
~161K SLoC