google-code-prettify

ラベル disklabel の投稿を表示しています。 すべての投稿を表示
ラベル disklabel の投稿を表示しています。 すべての投稿を表示

2008-07-10

disklabelとエンディアン

disklabelを調べて、ちょっとわかった事をまとめる。
disklabelを読み書きするにはdisklabel(8)を使うのだが、2通りの方法がある。
  • disklabel(8)は、ioctlでdisklabelの内容をkernel経由で読み(書き)する。

  • disklabel(8)に-rを渡すと、ディスクから直接disklabelを読み(書き)する。


disklabelのパーサーは、kernel内とdisklabel内の2つが存在し、disklabel(8)に-rを渡すと後者が使われる。

で、このパーサーに違いがある。
  • kernel内でのdisklabelのパーサーはSH3ではarch/sh3/sh3/disksubr.c。これは、デフォルトではEndian Independentではない。つまり、i386で作ったdisklabelをBig EndianのCPUでは読めない。

  • disklabel(8)内のdisklabelのパーサーは、Endian Independent。


これによって、どんな現象が起こるかと言うと、i386でdisklabelを付けたCFをsh3-ebで読もうとした場合に、
  • # disklabel wd0のようにすると、disklabelが無いかのように扱われる。(kernelが自動作成したfictitiousなdisklabelが見える)
  • # disklabel -r wd0とすると、i386で作ったdisklabelが読める


SH3でdisksubr.cをEndian Independentにするには、confにoptions BSDDISKLABEL_EIと書くと良い。

2008-06-17

MBRラベルから、BSDのdisklabelを作る

BSDでは、ディスクのパーティーション情報はdisklabelに書いてあり、MBRに書いてある情報は使わない。

mbrlabel(8)を使うと、MBR(Master Boot Record)ラベルから、BSDのdisklabelを作成してくれる。

via netbsd-users