FDISK(8)

名称
fdisk - DOS パーティションのメンテナンスプログラム

書式
fdisk [-i] [-u] [-a] [-1234] [disk]
fdisk [-f configfile] [-i] [-v] [-t] [disk]

前置き
BIOS がカーネルをブートするために、 一定の約束をちゃんと守らねばなりません。 ディスクのセクタ 0 はブートコード、パーティションテーブル、 マジックナンバを含んでいなければならないのです。 BIOS パーティションはディスクをいくつかの部分に分けるのにも使われます。 BIOS はセクタ 0 を読み込んできて、(本当にそのコードを使うか?) マジックナンバを確かめます。 それから、 セクタ 0 に書き込まれた 4 つの BIOS パーティションを探して、 それらのどれが アクティブ かを決定します。 それから、二次ブートブロックを アクティブ パーティションから読み込み、それを実行します。 DOS では一つの以上のパーティションと一つの アクティブ を持てます。 DOS の fdisk プログラムは、 ディスク空間を一つ以上のパーティションに分割して、一つの アクティブ を設定することができます。

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

オプション: ディスクのセクタ 0 を更新 (編集) するのに使われます。 -f があるときには無視されます。 ディスクのセクタ 0 を初期化します。 もし -f がなければ、 -u の意味も含みます。 アクティブパーティションの変更のみを行ないます。 -f があるときには無視されます。 一つの fdisk エントリの操作だけを行ないます。 -f があるときには無視されます。 パーティションの値をファイル configfile を使って設定します。 -i もあるときには、 configfile が読み込まれるに先立って、 存在するパーティションは全部消され(つまり「未使用」の印をつけられる) ますが、この場合を除いて、 configfile はいつも存在するパーティションの変更を行ないます。 configfile は "-" であってもよく、この場合 標準入力 が読まれます。 ファイルの構文は、以降の 設定ファイル の節をご覧下さい。

警告: -f が使われたときには、 (対話モードで尋ねられるように) 本当にパーティションテーブルを書き込むのかどうかを尋ねられません。 用心して使うこと! テストモード; パーティションテーブル値を書き込みません。一般に -f オプションを付けて、パーティションテーブルに書き込まれるはずのものを 見るのに使われます。 -v の意味を含みます。 冗長になります。 -f が使われたときには、 fdisk はディスクに書き込まれるパーティションテーブルを表示します。

最後のディスク名 disk は、 ‘裸の’ ディスク名だけ、 つまり ‘sd0’ か、あるいは /dev の下に完全に限定されたデバイスノードで与えることができます。 もし省略された場合、ディスク ‘wd0’, ‘sd0’, と ‘od0’ が、一つが応答して見付かるまで この順序で検索されます。

引数なしで呼び出されたときには、 セクタ 0 パーティションテーブルを表示します。 例えば:

    	******* Working on device /dev/rwd0 *******
    	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 つのパーティションに分割されています。 二つ目のパーティションは最初のパーティションの最後に重なっています。 (デバッグ目的に使われます)

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

start と size
    パーティションのセクタ単位での 開始アドレスとサイズです。

flag 80
    これがアクティブパーティションであることを指定します。

cyl, sector と head
    パーティションの 開始アドレスと終了アドレスを指定するのに使われます。

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

フラグ -i または -u は、 もし -f オプションが使われていない限り、 パーティションデータを更新すべきであることを指示します。 もし -f がなければ、 fdisk プログラムは対話モードに入ります。 このモードでは明示的に指示しない限り、どんなデータも変更しないように 設計されています。 fdisk はこのような振舞いを保証するよう、質問のデフォルトを選択しています。

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

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

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

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

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

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

すでにあるパーティションを編集すると、 たぶんそのパーティションのデータを失うことになるでしょう。

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

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

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

    g spec1 spec2 spec3 パーティション計算で使う BIOS ジオメトリを設定します。 前に文字を伴った数字で、三つの値を指定しなければいけません。

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

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

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

    これらの指定はどんな順序でもよく、先頭の文字がどの値かを決定します; しかし、三つ全てを指定しなければなりません。

    この行はパーティション情報を指定するどんな行よりも前に現れなくてはなりません。

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

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

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

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

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

    p partition type start length partition (1-4) で与えられたパーティションに、タイプ type 、開始セクタ start 、長さ (セクタ数) length を設定します。

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

    これらのパーティション行は、もしあればジオメトリ指定行の後に現れなければ なりません。

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

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

    例: パーティション 4 を取り除いて、未使用の印をつける:

            p       4       0       0       0

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

            p       1       165     1       2503871

    a partition partition パーティションをアクティブにします。 設定ファイルのどこに現われても構いませんが、 一つだけしか現われてはいけません。

    例: パーティション 1 をアクティブパーティションにします:

            a       1

関連項目
disklabel(8)

バグ
プログラム全体をよりユーザフレンドリにするべきです。

このマニュアルを通して使われている術語 ‘パーティション’ は、他で使われる術語に一致させるため、 本当は ‘スライス’ であるべきです。

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