disklabelの罠

NetBSD/amd64 3.0.1 (でなくても起こるけど) をいじってたときの話。

# disklabel sd1
disklabel: Can't read master boot record 0: Undefined error: 0
disklabel: ioctl DIOCGDINFO: Inappropriate ioctl for device

というエラーが出まくって,あれこれやっても直らない。
まあ元々初期化したいディスクだったので大胆にddで先頭をまっさらにしてfdiskして…というのもうまくいかない。
ふと,sd1 でなくて /dev/rsd1d を指定したら動いたり。
変だなあと思って ktrace で調べると,たまたまそこに sd1 というファイル(ゴミ)があって,それを開いて使おうとしていたらしい。
どうやら,fdisk も disklabel もディスク名を “sd1″ と指定したら,”sd1”, “sd1d”, ”/dev/rsd1″, “/dev/rsd1d” の順に探すようなのだが,マニュアルとかに書いてないよなあ…。