FreeBSD QandA 797

FreeBSD QandA

Q. 2.2.x と 3.0 を、一台のディスクに共存させてインストールできますか?

A. 基本的にはできません。しかし、以下のようなテクニックを使えば不可能
   ではありません。このテクニックは、非常に危険な操作ですので、以下の
   操作が何をしているか、ちゃんと理解できる人「のみ」が行ってください。
   また、fdisk の関連する部分のマニュアルを読んでからにしてください。
   この設定を少しでも間違えれば、ディスクに入っている内容を「完全に失
   わせる」可能性があります。潜在的な危険性を理解した上で、この手法を
   使用してください。

   基本ポリシとして、3.0 の /, /var, /usr の基本部分のみを別パーティショ
   ンに起き、基本は 2.2.x を入れる例を示します (/usr/local や 
   /usr/home は共有します)。

   以下に示すのは、あるラップトップでの例であり、FDISK スライス 1 がハ
   イバネーション用のスライスになっています。そこで、スライス 1 に関し
   ては気にしないようにしてください。

   まずは、2.2.x をスライス 3 (スライス 1 がハイバネーションエリアなど
   で使われていなければスライス 2) にインストールします。この際、スラ
   イス 2 (前記の場合ならスライス 1、以下略) を、3.0 を入れる分だけ確
   保しておきます。とりあえず FAT パーティションにでもしておけばよいで
   しょう。サイズは 200MB 程度で足りるようです。

   このインストールが終わったら、次は 3.0 をインストールします。この際、
   スワップパーティションは、スライス 3 にある 2.2.x のスワップパーティ
   ションがそのまま使用できるので、スライス 2 に確保する必要はありませ
   ん。面倒なので、スライス 2 には一つだけパーティションを作れば良いで
   しょう。配布ファイルは bin だけをインストールします。

   ブートブロックは booteasy でも標準ブートブロックでも良いのですが、
   安定稼働するまでは booteasy が良いかもしれません。

   ここで、/etc/fstab を書き換えて、2.2.x のディスクが /22 に見えるよ
   うにします (3.0 のインストール時に、ついでにディスクラベルエディタ
   から行ってもかまいません)。

      # rmdir /usr/local
      # ln -s /22/usr/local /usr
      # ln -s /22/usr/home /usr
      # mkdir /22/usr/src30
      # rmdir /usr/src
      # ln -s /22/usr/src30 /usr/src

   とでもすればよいでしょう。

   この状態で fdisk を実行すると、

      # fdisk
      ******* Working on device /dev/rwd0 *******
      parameters extracted from in-core disklabel are:
      cylinders=788 heads=128 sectors/track=63 (8064 blks/cyl)

      parameters to be used for BIOS calculations are:
      cylinders=788 heads=128 sectors/track=63 (8064 blks/cyl)

      Media sector size is 512
      Warning: BIOS sector numbering starts with sector 1
      Information from DOS bootblock is:
      The data for partition 1 is:
      sysid 132,(unknown)
          start 6144768, size 201600 (98 Meg), flag 0
              beg: cyl 762/ sector 1/ head 0;
              end: cyl 786/ sector 63/ head 127
      The data for partition 2 is:
      sysid 165,(FreeBSD/NetBSD/386BSD)
          start 63, size 403137 (196 Meg), flag 0
              beg: cyl 0/ sector 1/ head 1;
              end: cyl 49/ sector 63/ head 127
      The data for partition 3 is:
      sysid 165,(FreeBSD/NetBSD/386BSD)
          start 403200, size 5741568 (2803 Meg), flag 80 (active)
              beg: cyl 50/ sector 1/ head 0;
              end: cyl 761/ sector 63/ head 127
      The data for partition 4 is:
      <UNUSED>

   となっています。ここで、スライス 2 を FreeBSD 以外の適当な ID を持
   つスライスに見せかけて、スライス 3 のブートブロックを呼び出せば、
   2.2.x が起動することになります。

   この作業を行うために、まずスライス 2 に関するデータを調べます。上の
   表示からスライス 2 は開始が 63 ブロックで、サイズが 403137 ブロック
   であることがわかります。そこで、以下のファイルを作ります。

   3.0 のルートディレクトリ (この例だと wd0s1a) に、22.fdisk というファ
   イル名で、

      p 2 65 63 403137
      a 3

   (一行目の 65 は 165 以外ならどんな適当な数字でも良いのですが、fat 
   を示す 6 や、unused に対応した 0 などにするのはあまりお勧めできませ
   ん。また、ラップトップなどでハイバネーションにパーティションを使用
   するタイプの BIOS では、そのパーティション ID にしてもいけません。
   上の例では、132 がそれにあたります) というファイルを、また 22sw と
   いうファイル名で、

      #!/bin/sh
      fdisk -f /22.fdisk wd0

   というファイルを作ります。そして、/22sw に実行ビットを立てます。

   そして、3.0 から見たディレクトリ /22 (つまり 2.2.x のルートディレク
   トリ) に、30.fdisk というファイル名で、

      p 2 165 63 403137
      a 2

   (一行目の 165 は、先ほどの例とは異なり、絶対に 165 でなければなりま
   せん) というファイルを、また 30sw というファイル名で

      #!/bin/sh
      fdisk -f /30.fdisk wd0

   というファイルをつくります。そして /22/30sw に実行ビットを立てます。
   これで、3.0 が起動しているときに

      # /22sw

   と実行して再起動すると、2.2.x が起動してきます。また、2.2.x が起動
   しているときに

      # /30sw

   と実行して再起動すると、3.0 が起動してきます。実際には、一発でうま
   くこの設定ができるとは限らず、かつ失敗すると二度と起動しないという
   可能性がありますので、とりあえず fdisk には -t オプションを同時につ
   けて、デバッグを十分に行ってから実行してください。また、重要なデー
   タがあれば、必ずバックアップを取ってからこの設定を行ってください。

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