切腹倶楽部
日々是切腹
pokeでbtrfsを弄る
{
date:
"",
category: "/unix-like"
}
ずっとぶっ壊れたままだったbtrfsをいい加減直そうと思い,pokeに入門した。

自分は普段からバイナリを弄るためにhyxというソフトウェアを使用している。 Vim風のシンプルなエディタで大変重宝していたのだが,btrfsを弄るにはちょっとキツかった。 かといってファイルをアドホックに弄る為だけにC++やRustを書くのは実にかったるい。
そこで,バイナリをREPLでいい感じにつんつんできる環境としてのpokeの出番である。 とっつき難くて今まで入門すらしてなかったが,やっと使い所さんを理解できた気がする。
入門
基本はマニュアルに全部書いてあるが,個人的にわかりづらかったところだけ抜粋。
… we came to realize that offsets and data sizes in Poke should not be pure magnitudes or mere integer values: they should be united. They should have units.
…
The syntax that we eventually used to denote united values is to specify the magnitude part, a hash ('#'character, and then the unit. For example, the size “three bytes” is expressed as3#B, and “three bits” as3#b.
offset等の量を指定するには単位が要るらしい。ふーん。

なるほどね。
Btrfs pickle
本題。
<linux/btrfs_tree.h>を参考にbtrfs.pkを書いた。
type a = b