えー...とりあえず昨日の続きの調査したりとか. /dev/ad0s1e から起動するより,こいつを /dev/ad0s1a にしてしまう方がよさげだ. けど,この辺って全然理解できてねーので, どういう風にしたものやらサッパリだ(笑)
えー...disklabel とゆーコマンドで, この辺の編集ができる...ようなんだけど, 「disklabel はエラーとか全然チェックしねーで書き込みます」とか書いてあって, 仕組みをよく理解しないで使うととっても後悔しそうな気がする(笑) ということで先生方に IRC で確認.これでいいみたい.
なんだなぁ,a とか e とかってのは,簡単に書き換えちゃえるようなものなのかな? ていうか e って何だよ e って. /dev/ad0s1a.0 とか 1 とかはなんとなくわかるんだけど. えーっと,b が swap パーティション用, c が「その HDD 全部」を示す用,で,a と d~ がフツーのパーティション用なんだが, /stand/sysinstall を使って HDD をアレコレする場合, a ってのは / にマウントするものじゃないといけなくて, そうでない場合は e とかを割り振るらしい. そんなテキトーな感じでいいのか? ていうか a とか e とかって何で決まってるんだろう?
ということで,実際にダンプして見てみましょう.
# dd if=/dev/ad0s1c | od -x | more
えーっと,先頭の 512 バイトが MBR でー, その後ろのテーブルらしき部分を探す. きっとパーティションのサイズとか持ってるんだろうから,その辺をキーに.
えー,まずこっちが社の問題のパーティション.
disklabel -r /dev/ad0s1 # size offset fstype [fsize bsize bps/cpg] c: 8385867 0 unused 0 0 # (Cyl. 0 - 521*) e: 8385867 0 4.2BSD 0 0 0 # (Cyl. 0 - 521*) dd if=/dev/ad0s1c | od -x 0001220 2000 0000 0000 0000 0000 0000 0000 0000 0001240 0000 0000 0000 0000 0000 0000 0000 0000 0001260 0000 0000 f54b 007f 0000 0000 0000 0000 0001300 0000 0000 0000 0000 0000 0000 0000 0000 0001320 0000 0000 f54b 007f 0000 0000 0000 0000 0001340 0007 0000 0000 0000 0000 0000 0000 0000
そんでこっちは家のマシン.
disklabel -r /dev/ad0s1 # size offset fstype [fsize bsize bps/cpg] a: 2097152 0 4.2BSD 0 0 0 # (Cyl. 0 - 130*) b: 2097152 2097152 swap # (Cyl. 130*- 261*) c: 156296322 0 unused 0 0 # (Cyl. 0 - 9728*) e: 8388608 4194304 4.2BSD 0 0 0 # (Cyl. 261*- 783*) f: 20971520 12582912 4.2BSD 0 0 0 # (Cyl. 783*- 2088*) g: 122741890 33554432 4.2BSD 0 0 0 # (Cyl. 2088*- 9728*) dd if=/dev/ad0s1c | od -x 0001220 2000 0000 0000 0020 0000 0000 0000 0000 0001240 0007 0000 0000 0020 0000 0020 0000 0000 0001260 0001 0000 e482 0950 0000 0000 0000 0000 0001300 0000 0000 0000 0000 0000 0000 0000 0000 0001320 0000 0000 0000 0080 0000 0040 0000 0000 0001340 0007 0000 0000 0140 0000 00c0 0000 0000 0001360 0007 0000 e482 0750 0000 0200 0000 0000 0001400 0007 0000 0000 0000 0000 0000 0000 0000
8385867 は 0x7ff54b だし,2097152 は 0x200000,156296322 は 0x950e482 だ. つまりアレですかえーっと... 16bytes を 1レコードとして,テーブルの先頭から a b c d... と割り振られる,と. offset もレコード中に保持されてるようだから, 例えば「offset が昇順に並んでいねーとダメ」とかってルールがあったりしなければ, ここんとこを並べ替えればおっけーなのであろう. で,これをやるのが disklabel コマンド,なのかな.