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と書くと良い。
0 件のコメント:
コメントを投稿