[FreeBSD-users-jp 95789] Re: パーティションが 2 つ作れません

Tomoaki AOKI junchoon @ dec.sakura.ne.jp
2016年 4月 19日 (火) 12:58:08 UTC


青木@名古屋です。

ざっとpmbrとgptbootのソースを斜め読みした程度ですが、pmbrは
freebsd-boot、gptbootはfreebsd-ufsのGUIDが設定されたパーティ
ションを探し、それ以外は中身を見もしません。
従って、freebsdのGUIDが付いた(BSD labelを内包する)パーティ
ションは完全にスルーされてしまいます。


On Mon, 18 Apr 2016 23:51:09 +0900
maruyama at ism.ac.jp (丸山直昌) wrote:

> 野中 様
> 
> 丸山です。有難う。
> 
> 私は重大な前提を書き忘れていたようです。すべては Legacy Bios ブートでの
> 話です。小金丸さんは、詳細なハードウェアの条件を述べていませんが、彼も
> Legacy BIOSブートを使っていると思いますので、このスレッドではそれで十分
> だと考えていました。
> 
> 以下そのつもりで読んでください。
> 
> まず私自身の実験結果を書きます。
> 
> >> # gpart create -s GPT ada0
> >> # gpart add -t freebsd-boot -s 40 ada0
> >> # gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
> >> # gpart add -t freebsd -s 260G ada0
> >> # gpart create -s BSD -n 10 ada0s2
> >> # gpart add -s 5g -t freebsd-ufs ada0s2
> >> # gpart add -s 2g -t freebsd-swap ada0s2
> >> # gpart add -s 50g -t freebsd-ufs ada0s2
> >> # gpart add -s 2g -t freebsd-ufs ada0s2
> >> # gpart add -s 50g -t freebsd-ufs ada0s2
> >> # gpart add -s 41g -t freebsd-ufs ada0s2
> >> # gpart add -t freebsd -s 260G ada0
> >> # gpart create -s BSD -n 10 ada0s3
> >> # gpart add -s 5g -t freebsd-ufs ada0s3
> >> # gpart add -s 2g -t freebsd-swap ada0s3
> >> # gpart add -s 50g -t freebsd-ufs ada0s3
> >> # gpart add -s 2g -t freebsd-ufs ada0s3
> >> # gpart add -s 50g -t freebsd-ufs ada0s3
> >> # gpart add -s 41g -t freebsd-ufs ada0s3
> >> 
> >> で ada0s2a に freebsd を入れておけば起動しませんかね?
> 
> これ、駄目でした。-t freebsd で作ったスライスからは起動できないという結
> 論です。UFSパーティションから起動するためには、UFSを -t freebsd-ufs で作っ
> たパーティションに入れておく必要があるということです。
> 
> 以下ちょっと長くなりますが、実験経過を細かく書きます。実験用空きディスク
> は確保できなかったので、8GバイトUSBメモリを使いました。つまり da0 です。
> 買った時の状態で、
> 
> # gpart show da0
> =>      63  15124929  da0  MBR  (7.2G)
>         63      8001       - free -  (3.9M)
>       8064  15116928    1  !12  (7.2G)
> 
> つまりはMBRスキーム、MSDOSにフォーマットされているので、
> 
> gpart delete -i 1 da0
> gpart destroy da0
> gpart create -s GPT da0
> gpart add -t freebsd-boot -s 40 da0
> gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0
> gpart add -t freebsd -s 4G da0
> gpart create -s BSD da0s2
> gpart add -t freebsd-ufs da0s2
> gpart add -t freebsd da0
> gpart create -s BSD da0s3
> gpart add -t freebsd-ufs da0s3
> 
> とすると
> 
> # gpart show da0
> =>      34  15124925  da0  GPT  (7.2G)
>         34      8190       - free -  (4.0M)
>       8224        40    1  freebsd-boot  (20K)
>       8264     16344       - free -  (8.0M)
>      24608   8388608    2  freebsd  (4.0G)
>    8413216   6701056    3  freebsd  (3.2G)
>   15114272     10687       - free -  (5.2M)
> 
> # gpart show da0s2
> =>      0  8388608  da0s2  BSD  (4.0G)
>         0  8372224      1  freebsd-ufs  (4.0G)
>   8372224    16384         - free -  (8.0M)
> 
> # gpart show da0s3
> =>      0  6701056  da0s3  BSD  (3.2G)
>         0  6684672      1  freebsd-ufs  (3.2G)
>   6684672    16384         - free -  (8.0M)
> 
> # ls -alg /dev/da0*
> crw-rw-rw-  1 root  operator  0xce  4月 18 16:30 /dev/da0
> crw-rw-rw-  1 root  operator  0xcf  4月 18 16:50 /dev/da0p1
> crw-rw-rw-  1 root  operator  0xd0  4月 18 16:50 /dev/da0s2
> crw-rw-rw-  1 root  operator  0xd1  4月 18 16:50 /dev/da0s2a
> crw-rw-rw-  1 root  operator  0xd2  4月 18 16:50 /dev/da0s3
> crw-rw-rw-  1 root  operator  0xd3  4月 18 16:50 /dev/da0s3a
> 
> となり、
> 
> # newfs /dev/da0s2a
> /dev/da0s2a: 4088.0MB (8372224 sectors) block size 32768, fragment size
> 4096
>         using 7 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
> super-block backups (for fsck_ffs -b #) at:
>  192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632
> 
> で、ここに他で動いているPC-BSD10.2 のルート以下を restore して試しました
> が、USBからの起動は失敗して、内臓ディスクからの起動になってしまいました。
> ここで、da0s2a を  da0p2 にすり替える、つまり
> 
>   gpart delete -i 2 da0
>   gpart add -t freebsd-ufs -b 24608 -s 8388608 da0
>   gpart show da0
> 
> とやって type freebsd だったものを type freebsd-ufs に直してしまって
> 
> # gpart show da0
> =>      34  15124925  da0  GPT  (7.2G)
>         34      8190       - free -  (4.0M)
>       8224        40    1  freebsd-boot  (20K)
>       8264     16344       - free -  (8.0M)
>      24608   8388608    2  freebsd-ufs  (4.0G)
>    8413216   6701056    3  freebsd  (3.2G)
>   15114272     10687       - free -  (5.2M)
> 
> # gpart show da0p2
> =>      0  8388608  da0p2  BSD  (4.0G)
>         0  8372224      1  freebsd-ufs  (4.0G)
>   8372224    16384         - free -  (8.0M)
> 
> とすると、今度は boot は成功します。
> 
> つまり、青木さんが書いておられた
> 
> >ただ、現状ではgptbootはドライブ内の起動可能なUFSのうち最も先頭側のパー
> >ティション、gptzfsbootでは同じく最も先頭側のZFSプールからしか起動でき
> >ない制約があります。
> 
> が厳格に守られていて、それはパーティション(スライス)内のデータの構造によっ
> ているのではなく、 gpart add コマンドで使った -t オプションの引数が
> freebsd-ufs か freebsd か、という違いによるものです。
> 
> >gptbootは最初に見つかった(一番番号の小さい)freebsd-ufsパーティション
> >から起動しますが、他のパーティションから起動したい場合は、
> >    gpart set a bootme -i 3 ada0
> >のようにgpartコマンドのsetオプションを使ってブートしたいパーティションに
> >bootme属性を付ける事で、そのパーティションから起動されます。
> 
> gpart set -a bootme -i 2 da0
> 
> とやって
> 
> [root at indra{189}] ~# gpart show da0
> =>      34  15124925  da0  GPT  (7.2G)
>         34      8190       - free -  (4.0M)
>       8224        40    1  freebsd-boot  (20K)
>       8264     16344       - free -  (8.0M)
>      24608   8388608    2  freebsd  [bootme]  (4.0G)
>    8413216   6701056    3  freebsd  (3.2G)
>   15114272     10687       - free -  (5.2M)
> 
> としてみましたが、やはり type freebsd では boot できませんでした。
> 
> 引用が前後して恐縮ですが、
> 
> >ただ、gptbootはUFS Label構造を見ていなかったと記憶しています(要確認)。
> 
> 私の実験結果から推測すると、見ていないでしょうね。type freebsd はboot
> processでは無視する、ということですし、 type freebsd-ufs ならLabel見なく
> てもmountできますから。
> 
> 結局 GPT スキームで ada0s2 adas2a などを作ってもそこに入れたUFSから起動
> する方法がない、ということになります。
> 
> 実験は以上です。
> 
> --------
> 丸山直昌@統計数理研究所
> _______________________________________________
> freebsd-users-jp at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
> To unsubscribe, send any mail to "freebsd-users-jp-unsubscribe at freebsd.org"
> 


-- 
青木 知明  [Tomoaki AOKI]
    junchoon at dec.sakura.ne.jp


freebsd-users-jp メーリングリストの案内