FreeBSD QandA 1549

FreeBSD QandA

Q. 既存の FreeBSD 領域の前 (HDD の中に存在するスライスの順番でいう前) に
   FreeBSD 領域を作ったら起動しなくなった。

A. FreeBSD 2.2 系のブートブロックは、HDD のスライステーブル (PC/AT 用語で
   言う fdisk(8) パーティション) から、最初に見つけた FreeBSD 領域から
   /kernel を読み込もうとするため、同一の HDD の既存の FreeBSD 領域の前に
   新たな FreeBSD 領域を作成すると、間違えて新規に作った領域から /kernel 
   を読み込もうとして FreeBSD が起動できなくなります。

   逆に言うと、後ろにスライスを作成する分には問題になりませんし、新しく作っ
   た領域に / (ルート)パーティション (BSD パーティション) を移動すれば動
   作します。または、3.1R 以降ならこの問題は修正されていますので、可能な
   ら 3.4R 以降へのアップグレードをお薦めします。

   どうしても新領域にルートパーティションを入れずに解決したい場合、ブート
   ブロックに新しい領域を FreeBSD 以外のスライスと思い込ませておくことに
   より、この領域をスキップして FreeBSD が既存領域から立ち上がるようにで
   きます。一旦システムが起動してしまえば、マウントして使用する事には影響
   しません。この発展形として [管理番号 797] があります。

   <解決法の一例>

   1) root 権限で /stand/sysinstall を起動します。

   2) メニューから「設定」->「パーティション」(Configure -> Partition) を
    選び、目的のディスクを選択して新規スライスを作成します。

    開始位置     大きさ   終了位置     名称 タイプ       種別 副タイプ   フラグ
           0         63         62        -      6     unused        0
          63    2459457    2459519    wd0s2      2        fat        6
     2459520    1024128    3483647    wd0s3      3    freebsd      165    C  <----
     3483648    2661120    6144767    wd0s4      3    freebsd      165
     6144768     201600    6346367    wd0s1      1    unknown      132
     6346368       8064    6354431        -      6     unused        0

    矢印のように領域を作成したら「Q」でこの画面を終了します。

   3) 続いて「ディスクラベル」(Label) をメニューから選択します。ディスク
    ラベルを書き込み、ファイルシステムを作ります。 

    「C」で新たな FreeBSD のパーティションを作成します。最初にパーティショ 
    ンのサイズを聞かれますが、デフォルトで使用可能な全ブロックサイズが指定
    されますから、ディスク全体を一つのパーティションで使用する場合はこのま
    まで良いでしょう。次にパーティションのタイプを聞かれますから、ファイル
    システムを選択します。さらにそのパーティションをマウントする位置を聞か
    れます。/mnt などのパスを指定します。このとき、指定したディレクトリが
    なければ、自動的に作成されます。

    ディスク: wd0   区画名: wd0s3   空き領域: 0 ブロック (0MB)
    ディスク: wd0   区画名: wd0s4   空き領域: 0 ブロック (0MB)

    区画    マウント位置     容量 Newfs   区画    マウント位置     容量 Newfs
    ----    ------------     ---- -----   ----    ------------     ---- -----
    wd0s2   <none>         1200MB DOS
    wd0s3e  /mnt            500MB UFS Y     <---------
    wd0s4a  <none>           32MB *
    wd0s4b  swap            199MB SWAP
    wd0s4e  <none>           30MB *
    wd0s4f  <none>         1037MB *

    「W」で書き込むと disklabel(8), newfs(8), mount(8) まで行なわれますの
    で、「Q」でこの画面を終了し、一旦 sysinstall を終了します。

   4) df で調べると無事 newfs が済み、/dev/wd0s3e がマウントされています
    ので、umount /mnt でディスクを切り離しておきます。 

   5) 再度 /stand/sysinstall を起動して、「設定」->「パーティション」
    (Configure -> Partition) を選んで、スライス情報を書き変えます。  

    ディスク名:     wd0                                FDISK パーティションエディタ
    ジオメトリ: 788 シリンダ/128 ヘッド/63 セクタ (計 6354432 セクタ)

      開始位置     大きさ   終了位置     名称 タイプ       種別 副タイプ   フラグ

             0         63         62        -      6     unused        0
            63    2459457    2459519    wd0s2      2        fat        6
       2459520    1024128    3483647    wd0s3      1 OpenBSD FFS      166 <------
       3483648    2661120    6144767    wd0s4      3    freebsd      165    C
       6144768     201600    6346367    wd0s1      1    unknown      132
       6346368       8064    6354431        -      6     unused        0

    上記のようにスライス種別 (Desc) を 'freebsd' 以外の ID (ここでは 166 
    を利用します) に変更して、「W」で書き込みます。この ID は 165 以外な
    らなんでも良いですが、6 (FAT) や 132 (ハイバネーション用) など特定の
    目的にリザーブされたものは避けてください。スライス種別を変更したら、
    それ以外の値をいじらないようにして「Q」でこの画面を抜けて sysinstall
    を終了します。

   6) 起動時に自動的にマウントさせるには、以下の行を /etc/fstab に追加
    します。

     /dev/wd0s3e     /mnt    ufs     rw    1 2

   動作確認に使用した version: FreeBSD 2.2.6-RELEASE

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。