FDISK(8)

名称
fdisk - PC スライステーブルのメンテナンスユーティリティ

書式
fdisk [-BIaistu] [-b bootcode] [-1234] [disk] fdisk -f configfile [-itv] [disk]

前置き
BIOS がカーネルをブートするために、 一定の約束をちゃんと守らねばなりません。 ディスクのセクタ 0 はブートコード、スライステーブル、 マジックナンバを含んでいなければならないのです。 BIOS スライスはディスクをいくつかの部分に分けるのにも使われます。 BIOS はセクタ 0 を読み込み、マジックナンバを確認します。 そして、セクタ 0 のブートコードはスライステーブルを探し、 どのスライスが “アクティブ” と印されているか判定します。 そして、このブートコードはブートストラップをアクティブスライスから読み込み、 ブート可能の印が付いていればこれを実行します。 DOS では、1 個以上のスライスと 1 個のアクティブを持てます。 DOS の fdisk ユーティリティは、 ディスク空間を 1 個以上のスライスに分割して、1 個のアクティブを 設定することができます。

解説
FreeBSD のプログラム fdisk は、 DOS のそれと似た目的に役立ちます。 第 1 の形は、スライス情報の表示や、 スライステーブルの対話的な編集に使われます。 第 2 の形は、 configfile を使ってスライステーブルを書き込むという使い方であり、 他のスクリプト/プログラムから利用するよう設計されています。

オプション:

-a  アクティブスライスの変更のみを行ないます。 -f があるときには無視されます。

-b bootcode
    ブートコードをファイル bootcode から取得します。 デフォルトは /boot/mbr です。

-B  ディスクのセクタ 0 に含まれるブートコードを再初期化します。 もし -f があると、無視されます。

-f configfile
    スライスの値をファイル configfile を使って設定します。 -i もあるときには、 configfile が読み込まれるに先立って、 存在するスライスは全部消され (つまり “未使用” の印をつけられる) ますが、この場合を除いて、 configfile はいつも存在するスライスの変更を行ないます。 configfile は ‘-’ であってもよく、この場合 標準入力 が読まれます。 ファイルの構文は、以降の 設定ファイル の節をご覧下さい。

    警告: -f が使われたときには、 (対話モードで尋ねられるように) 本当にスライステーブルを書き込むのかどうかを尋ねられません。 用心して使うこと!

-i  ディスクのセクタ 0 を初期化します。 もし -f がなければ、 -u の意味も含みます。

-I  単一の FreeBSD スライスがディスク全体となるように、 セクタ 0 の内容を初期化します。

-s  サマリ情報を表示し、終了します。

-t  テストモード; スライステーブル値を書き込みません。一般に -f オプションを付けて、スライステーブルに書き込まれるはずのものを 見るのに使われます。 -v の意味を含みます。

-u  ディスクのセクタ 0 を更新 (編集) するのに使われます。 -f があるときには無視されます。

-v  冗長になります。 -f が使われたときには、 fdisk はディスクに書き込まれるスライステーブルを表示します。

-1234
    1 個のスライスの操作だけを行ないます。 -f があるときには無視されます。

最後のディスク名 disk は、 “裸の” ディスク名だけ、 つまり da0 か、あるいは完全なパス名です。 もし省略された場合、 fdisk は、マウントされたルートディスクからデフォルトディスクデバイスを 算出しようとします。

オプションなしで呼び出されたときには、 セクタ 0 スライステーブルを表示します。 例えば:

    	******* Working on device /dev/ad0 *******
    	parameters extracted from in-core disklabel are:
    	cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
    	parameters to be used for BIOS calculations are:
    	cylinders=769 heads=15 sectors/track=33 (495 blks/cyl)
    	Warning: BIOS sector numbering starts with sector 1
    	Information from DOS bootblock is:
    	The data for partition 1 is:
    	sysid 165,(FreeBSD/NetBSD/386BSD)
        	    start 495, size 380160 (185 Meg), flag 0
    		beg: cyl 1/ sector 1/ head 0;
    		end: cyl 768/ sector 33/ head 14
    	The data for partition 2 is:
    	sysid 164,(unknown)
        	    start 378180, size 2475 (1 Meg), flag 0
    		beg: cyl 764/ sector 1/ head 0;
    		end: cyl 768/ sector 33/ head 14
    	The data for partition 3 is:
    	<UNUSED>
    	The data for partition 4 is:
    	sysid 99,(ISC UNIX, other System V/386, GNU HURD or Mach)
        	    start 380656, size 224234 (109 Meg), flag 80
    		beg: cyl 769/ sector 2/ head 0;
    		end: cyl 197/ sector 33/ head 14

このディスクは、たまたまディスク全体を満たす 3 つのスライスに分割されています。 2 つ目のスライスは最初のスライスの最後に重なっています。 (デバッグ目的に使われます)

sysid
    スライスのラベル付に使われます。 FreeBSD ではマジックナンバ 10 進数 165 (16進 では A5) を予約しています。

    start と size スライスのセクタ単位での 開始アドレスとサイズです。

flag 80
    これがアクティブスライスであることを指定します。

    cyl, sector と head スライスの 開始アドレスと終了アドレスを指定するのに使われます。

注: これらの数字は、 BIOS の理解するディスクジオメトリを使って計算され、 ブートブロックに保存されます。

-i と -u のオプションは、 スライスデータを更新すべきであることを指示します。 もし -f がなければ、 fdisk は対話モードに入ります。 このモードでは、 fdisk に明示的に指示しない限り、どんな変更もディスクに書き込みません。

fdisk ユーティリティは各々のスライスを表示し、 それを編集したいかどうかを尋ねます。 yes と答えたら、 fdisk は古い値を表示し、新しい値を尋ねて 各々のフィールドを進みます。 1 個のスライスが終了したら、 fdisk はそれを表示して、それで正しいかどうかを尋ねます。 そして 次のエントリに進みます。

cyl, sector, head のフィールドを正しく得るにはちょっとした芸当が要ります。 そのためデフォルトでは、 fdisk が代わって計算しますが、選択してそれらの値を指定することもできます。

全てのスライスが進行した後、 “アクティブ” スライス変更をすることができます。 最後に、 セクタ 0 の新規データが全部集められたときに、 本当に書換えても良いか尋ねられます。 yes と答えた場合だけ、データはディスクに書き込まれます。

-u フラグと -i フラグの間の違いは、 -u フラグはディスク上にあるフィールドの値を編集 (更新) するだけですが、 一方 -i フラグはセクタ 0 を “初期化” するのに使われます; ディスク全体を FreeBSD 用に使えるように、 最後の BIOS スライスをセットアップして、それをアクティブにします。

注
開始シリンダ等の自動計算は、 BIOS がそのドライブのジオメトリであると思っている数字をもとに行なわれます。 これらの数字はデフォルトでは、メモリ上のディスクラベルから取りますが、 fdisk の起動時にそれらを変更する機会が与えられます。 このおかげでユーザは、 BIOS がジオメトリ変換を行なうドライブでも動作できるブートブロックを 作ることができます。

もしディスクのレイアウトを手作業で変更するのなら、 どうか FreeBSD スライスがシリンダ境界から開始することを確認してください。 その後のたくさんの決定がこのことを仮定しています。 (これは必要ではなかったのかもしれませんが)

すでにあるスライスを編集すると、 たぶんそのスライスのデータを失うことになるでしょう。

fdisk がどう働くかを調べるために、 1 度か 2 度は対話的に実行するべきです。 これは、最後の質問に否定で答える限り完全に安全です。 このマニュアルでは完全に説明されていませんが、 fdisk が検出する微妙な点があります。

設定ファイル
-f オプションが与えられたとき、 configfile の値を使ってディスクのスライステーブルを書換えることができます。 このファイルの構文はたいへん単純です。 各行はコメントか仕様のどちらかです。

# comment ...
    # で開始している行はコメントで無視されます。

g spec1 spec2 spec3
    スライス計算で使う BIOS ジオメトリを設定します。 前に文字を伴った数字で、3 つの値を指定することが必要です。

    cnum
        シリンダの数を num に設定します。

    hnum
        ヘッドの数を num に指定します。

    snum
        トラックあたりのセクタの数を num に設定します。

    これらの指定はどんな順序でもよく、先頭の文字がどの値かを決定します; しかし、3 つ全てを指定することが必要です。

    この行はスライス情報を指定するどんな行よりも前に現れなくてはなりません。

    次の条件が真でなければ、エラーです:

        1 <= シリンダの数
        1 <= ヘッドの数 <= 256
        1 <= トラックあたりのセクタの数 < 64

    シリンダの数は 1024 以下でなければなりませんが、 しかしこれは強制されるものではなく、警告が表示されるでしょう。 ブート可能な FreeBSD スライス “(/” ファイルシステム) は 最初の 1024 シリンダ以内に収まっていなといけません; もしそうでなければ、ブートに失敗するかもしれません。 ブートしないスライスには、この制限はありません。

    1019 シリンダ、39 ヘッド、63 セクタのディスクの例 (これらの全てはみな等価):

        g       c1019   h39     s63
        g       h39     c1019   s63
        g       s63     h39     c1019

p slice type start length
    partition (1-4) で与えられたスライスに、タイプ type 、開始セクタ start 、長さ (セクタ数) length を設定します。

    これらの行で明示的に言及されたスライスだけが変更されます; p 行で参照されていないスライスは変更されません。 しかし、無効なスライステーブルがあるか、 -i オプションが指定されているなら、 存在するスライスエントリは全て取り除かれ (未使用の印がつけられ)、 スライス情報を明示的に設定するのに、 p 行が使われなければなりません。 もし複数のスライスを設定する必要があるなら、 複数の p 行が指定されなければなりません; 1 行で 1 個のスライスを設定します。

    これらのスライス行は、もしあればジオメトリ指定行の後に現れなければ なりません。

    FreeBSD スライスの type は 165 です。0 のスライスタイプを指定すると、 スライスを取り除き未使用の印をつけたのと同じことになります; しかし、 “(0” とかの) ダミーの値が start と length に指定されなければなりません。

    注: スライスの開始オフセットはヘッド境界まで必要なら繰り上げられ、 終了オフセットはシリンダ境界まで必要なら繰り下げられます。

    例: スライス 4 を取り除いて、未使用の印をつける:

        p       4       0       0       0

    例: スライス 1 を FreeBSD スライスであって、 セクタ 1 から始まって 2503871 セクタの長さに設定する (注: これらの値は、 対応するヘッドとシリンダ境界に繰り上げ/繰り下げられます):

        p       1       165     1       2503871

a slice
    slice スライスをアクティブにします。 設定ファイルのどこに現われても構いませんが、 1 個だけ存在することが必要です。

    例: スライス 1 をアクティブスライスにします:

        a       1

関連ファイル
/boot/mbr
    デフォルトのブートコード

関連項目
boot0cfg(8), bsdlabel(8), newfs(8)

バグ
デフォルトのブートコードは、 必ずしもすべてのスライスタイプを正しく扱いません。 特に MS-DOS 6.x 以降に導入されたものについてはそうです。

ユーティリティ全体をよりユーザフレンドリにするべきです。

FreeBSD の新規ユーザは、 “スライス” と “パーティション” の違いが分からず、慣れるまで大変でしょう。

ディスク全体を FreeBSD に捧げるためには、このコマンドは使えません。 これには bsdlabel(8) コマンドを使わなければなりません。