EN JA
FDISK(8)
FDISK(8) FreeBSD System Manager's Manual FDISK(8)

名称

fdiskPC スライステーブルのメンテナンスユーティリティ

書式

fdisk [ -BIaipqstu][ -b bootcode][ -1234][ disk]

fdisk -f configfile [ -itv][ disk]

前置き

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

解説

訳注: FreeBSD/pc98 版の fdisk(8) については、仮の名前 fdisk_98(8) を参照してください。
 
FreeBSD のユーティリティ fdisk は、 DOS ユーティリティと同様の目的の仕事をします。第 1 の形式は、スライス情報の表示や、スライステーブルの対話的な編集に使われます。第 2 の形式は、 configfile を使用してスライステーブルを書き込むために使用され、他のスクリプト/プログラムで使用されるように設計されています。

オプションは、次の通りです:

-a
アクティブスライスのみを変更します。 -f が与えられるなら、無視されます。
-b bootcode
ブートコードをファイル bootcode から取得します。デフォルトは、 /boot/mbr です。
-B
ディスクのセクタ 0 に含まれるブートコードを再初期化します。 -f が与えられるなら、無視されます。
-f configfile
ファイル configfile を使用してスライスの値を設定します。 configfile は、 -i も与えられないなら、明白に指定されたスライスのみを変更します、その場合、 configfile が読み込まれる前に、すべての既存のスライスは、削除されます (“未使用”として、マークされます)。 configfile は、‘ -’と指定することができ、その場合、標準入力が読み込まれます。ファイルの構文については、下記の 設定ファイル を参照してください。

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

-i
ディスクのセクタ 0 を初期化します。既存のスライスエントリは、編集の前に (未使用として、マークされ) クリアされます。 ( -u と比較)。
-I
単一の FreeBSD スライスがディスク全体となるように、セクタ 0 のスライステーブルを初期化します。
-p
fdisk 設定ファイル形式でスライステーブルを印刷 (表示) して、終了します。下記の 設定ファイル を参照してください。
-q
静かにします。 ("GEOM not found"のような) 害のない警告は、抑制されます。
-s
サマリ情報を印刷 (表示) し、終了します。
-t
テストモード。スライス値を書き込みません。一般的に、スライステーブルに書き込まれるものを見るために -f オプションとともに使用されます。 -v の意味を含みます。
-u
ディスクのセクタ 0 のスライステーブルを更新 (編集) します。 -f が与えられるなら、無視されます。
-v
冗長になります。 -f が使用されるとき、 fdisk は、ディスクに書き込まれているスライステーブルを印刷 (表示) します。
-1234
単一の fdisk エントリのみを操作します。 -f が与えられるなら、無視されます。

最後のディスク名は、“裸の”ディスク名だけとして、例えば da0 か、または完全なパス名として、提供することができます。省略されるなら、 fdisk は、マウントされたルートディスクからデフォルトのディスクデバイスを見つけ出そうと試みます。

引数なしで呼び出されると、セクタ 0 スライステーブルを印刷 (表示) します。次は、例です:

 ******* Working on device /dev/ada0 ******* 
 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 ではマジックナンバ 165 の 10 進数 (16 進では、A5) を予約しています。
startsize
フィールドは、スライスのセクタ単位の開始アドレスとサイズを与えます。
flag 80
これは、アクティブスライスであることを指定します。
cyl, sectorhead
フィールドは、スライスの開始アドレスと終了アドレスを指定するために使用されます。

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

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

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

cyl, sectorhead フィールドを正しく得るには、トリックが必要です。それで、デフォルトでは、利用者に代わって計算されます。利用者が選択するなら、それらを指定することができます。

すべてのスライスを処理した後に、利用者は、“アクティブ”なスライスを変更するためのオプションを与えます。最後に、セクタ 0 のすべての新しいデータが累積されたとき、利用者に本当に書き直したいかどうか確認のために尋ねられます。

-u-i フラグの違いは、 -u フラグが、既存のスライスパラメータを編集 (更新) し、一方 -i フラグが、それらを“初期化する”ために使用されます (古い値は、無視されます)。また、利用者が最初のスライスを編集するなら、 -i は、 FreeBSD のために全体のディスクを使用するように設定し、それをアクティブにします。

開始シリンダ等の自動計算は、BIOS がそのドライブのジオメトリであると考えるている 1 組の数字を使用して行います。これらの数字は、デフォルトで、メモリ中のディスクラベルから取られますが、 fdisk は、始めに、それらを変更する機会を利用者に与えます。これによって、利用者は、BIOS によってジオメトリ変換を使用するドライブで動作できるブートブロックを作成することができます。

利用者がディスクのレイアウトを手作業で変更するなら、 FreeBSD スライスがシリンダ境界から始まることを確認してください。

既存のスライスを編集すると、たぶん利用者は、そのスライスのすべてのデータを失うことになるでしょう。

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

設定ファイル

-f オプションが与えられたとき、 configfile からの値を使用してディスクのスライステーブルを書き込むことができます。このファイルの構文は、非常に簡単です。各行は、次のようにコメントか仕様のいずれかです。
# comment ...
# で始まる行は、コメントであり無視されます。
g spec1 spec2 spec3
スライス計算で使用される BIOS ジオメトリを設定します。各数字に先行する文字とともに指定された 3 つの値でなければなりません:
c num
シリンダ数を num に設定します。
h num
ヘッド数を num に設定します。
s num
セクタ/トラックの数を 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
slice (1-4) で与えられたスライスに、タイプを type、開始セクタを start、セクタ数を length セクタに設定します。 start または lengthK, M または G の接尾子が付けられているなら、それは、それぞれ、 Kilobyte, Megabyte または Gigabyte の単位と見なされます。 start が“*”として与えられるなら、それは、前のパーティション終わりの値に設定されます。 length が“*”として与えられるなら、パーティション終わりは、ディスクの終りに設定されます。

これらの行によって明白に言及されたスライスだけが変更されます。 p 行によって参照されない任意のスライスは、変更されません。しかしながら、無効のスライステーブルが存在しているか、 -i オプションが指定されるなら、すべての既存のスライスエントリは、クリアされ (未使用としてマークされ)、これらの p 行は、きちんとスライス情報を設定するために使用されなければなりません。複数のスライスを設定する必要があるなら、各スライス毎に 1 つで、複数の p 行を指定しなければなりません。

これらのスライス行は、存在しているなら、任意のジオメトリ指定行の後に現れなければなりません。

type は、 FreeBSD スライスを表す 165 です。 0 のスライスタイプを指定することは、スライスをクリアして、未使用としてマークするのと同じです。しかしながら、それでも (“0”のような) ダミーの値を、 startlength に指定しなければなりません。

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

例: スライス 4 をクリアし、それを未使用とマークします:

p 4 0 0 0

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

p 1 165 1 2503871

例: スライス 1、2 と 4 を FreeBSD のスライスに設定するためには、最初は、2 ギガバイト、2 番目は 10 ギガバイトで、4 番目は、ディスクの残りとなります (さらに、数値は、適切に丸められます):

p 1 165 63 2G
p 2 165 * 10G
p 3 0 0 0
p 4 165 * *
a slice
slice をアクティブスライスにします。設定ファイルのどこでも置けますが、1 つだけは、存在していなければなりません。

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

a 1

関連ファイル

/boot/mbr
デフォルトのブートコード

バグ

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

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

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

ディスク全体を FreeBSD 専用にするために、このコマンドを使用することはできません。このためには、 bsdlabel(8) コマンドを使用しなければなりません。

October 1, 2013 FreeBSD