[FreeBSD-users-jp 95776] Re: パーティションが 2 つ作れません
丸山直昌
maruyama @ ism.ac.jp
2016年 4月 18日 (月) 14:51:13 UTC
野中 様
丸山です。有難う。
私は重大な前提を書き忘れていたようです。すべては 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 メーリングリストの案内