.\" %FreeBSD: src/sbin/fdisk/fdisk.8,v 1.34 2002/08/21 18:10:07 trhodes Exp %
.\"
.\" $FreeBSD$
.Dd April 18, 2002
.Dt FDISK 8
.Os
.Sh 名称
.Nm fdisk
.Nd PC スライステーブルのメンテナンスユーティリティ
.Sh 書式
.Nm
.Op Fl BIaistu
.Op Fl b Ar bootcode
.Op Fl 1234
.Op Ar disk
.Nm
.Fl f Ar configfile
.Op Fl itv
.Op Ar disk
.Sh 前置き
BIOS がカーネルをブートするために、
一定の約束をちゃんと守らねばなりません。
ディスクのセクタ 0 はブートコード、スライステーブル、
マジックナンバを含んでいなければならないのです。
BIOS スライスはディスクをいくつかの部分に分けるのにも使われます。
BIOS はセクタ 0 を読み込み、マジックナンバを確認します。
そして、セクタ 0 のブートコードはスライステーブルを探し、
どのスライスが
.Dq アクティブ
と印されているか判定します。
そして、このブートコードはブートストラップを
.Dq アクティブ
スライスから読み込み、ブート可能の印が付いていればこれを実行します。
.Tn DOS
では、1 個以上のスライスと 1 個の
.Dq アクティブ
を持てます。
.Tn DOS
の
.Nm
ユーティリティは、
ディスク空間を 1 個以上のスライスに分割して、1 個の
.Dq アクティブ
を設定することができます。
.Sh 解説
.Fx
のプログラム
.Nm
は、DOS のそれと似た目的に役立ちます。
第 1 の形は、スライス情報の表示や、
スライステーブルの対話的な編集に使われます。
第 2 の形は、
.Ar configfile
を使ってスライステーブルを書き込むという使い方であり、
他のスクリプト/プログラムから利用するよう設計されています。
.Pp
オプション:
.Bl -tag -width indent
.It Fl a
アクティブスライスの変更のみを行ないます。
.Fl f
があるときには無視されます。
.It Fl b Ar bootcode
ブートコードをファイル
.Ar bootcode
から取得します。
デフォルトは
.Pa /boot/mbr
です。
.It Fl B
ディスクのセクタ 0 に含まれるブートコードを再初期化します。
もし
.Fl f
があると、無視されます。
.It Fl f Ar configfile
スライスの値をファイル
.Ar configfile
を使って設定します。
.Fl i
もあるときには、
.Ar configfile
が読み込まれるに先立って、
存在するスライスは全部消され(つまり
.Dq 未使用
の印をつけられる)
ますが、この場合を除いて、
.Ar configfile
はいつも存在するスライスの変更を行ないます。
.Ar configfile
は
.Sq -
であってもよく、この場合
標準入力
が読まれます。
ファイルの構文は、以降の
.Sx 設定ファイル
の節をご覧下さい。
.Pp
.Em 警告 :
.Fl f
が使われたときには、
(対話モードで尋ねられるように)
本当にスライステーブルを書き込むのかどうかを尋ねられません。
用心して使うこと!
.It Fl i
ディスクのセクタ 0 を初期化します。
もし
.Fl f
がなければ、
.Fl u
の意味も含みます。
.It Fl I
単一の FreeBSD スライスがディスク全体となるように、
セクタ 0 の内容を初期化します。
.It Fl s
サマリ情報を表示し、終了します。
.It Fl t
テストモード; スライステーブル値を書き込みません。一般に
.Fl f
オプションを付けて、スライステーブルに書き込まれるはずのものを
見るのに使われます。
.Fl v
の意味を含みます。
.It Fl u
ディスクのセクタ 0 を更新 (編集) するのに使われます。
.Fl f
があるときには無視されます。
.It Fl v
冗長になります。
.Fl f
が使われたときには、
.Nm
はディスクに書き込まれるスライステーブルを表示します。
.It Fl 1234
1 個のスライスの操作だけを行ないます。
.Fl f
があるときには無視されます。
.El
.Pp
最後のディスク名
.Ar disk
は、
.Dq 裸の
ディスク名だけ、
つまり
.Ql da0
か、あるいは完全なパス名です。
もし省略された場合、
.Nm
は、マウントされたルートディスクからデフォルトディスクデバイスを
算出しようとします。
.Pp
オプションなしで呼び出されたときには、
セクタ 0 スライステーブルを表示します。
例えば:
.Bd -literal
******* 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
.Ed
.Pp
このディスクは、たまたまディスク全体を満す
3 つのスライスに分割されています。
2 つ目のスライスは最初のスライスの最後に重なっています。
(デバッグ目的に使われます)
.Bl -tag -width ".Em cyl , sector No and Em head"
.It Em sysid
スライスのラベル付に使われます。
.Fx
ではマジックナンバ 165 (10進) A5 (16進)を予約しています。
.It Xo
.Em start
と
.Em size
.Xc
スライスのセクタ単位での
開始アドレスとサイズです。
.It Em "flag 80"
これがアクティブスライスであることを指定します。
.It Xo
.Em cyl , sector
と
.Em head
.Xc
スライスの
開始アドレスと終了アドレスを指定するのに使われます。
.El
.Pp
.Em 注 :
これらの数字は、
BIOS の理解するディスクジオメトリを使って計算され、
ブートブロックに保存されます。
.Pp
.Fl i
と
.Fl u
のオプションは、
スライスデータを更新すべきであることを指示します。
もし
.Fl f
がなければ、
.Nm
は対話モードに入ります。
このモードでは、
.Nm
に明示的に指示しない限り、どんな変更もディスクに書き込みません。
.Nm
はこのような振舞いを保証するよう、質問のデフォルトを選択しています。
.Pp
.Nm
ユーティリティは各々のスライスを表示し、
それを編集したいかどうかを尋ねます。
yes と答えたら、
.Nm
は古い値を表示し、新しい値を尋ねて
各々のフィールドを進みます。
1 個のスライスが終了したら、
.Nm
はそれを表示して、それで正しいかどうかを尋ねます。
そして
次のエントリに進みます。
.Pp
.Em cyl , sector ,
.Em head
のフィールドを正しく得るにはちょっとした芸当が要ります。
そのためデフォルトでは、
.Nm
が代わって計算しますが、選択してそれらの値を指定することもできます。
.Pp
全てのスライスが進行した後、
.Dq アクティブ
スライス変更をすることができます。
最後に、
セクタ 0 の新規データが全部集められたときに、
本当に書換えても良いか尋ねられます。
yes と答えた場合だけ、データはディスクに書き込まれます。
.Pp
.Fl u
フラグと
.Fl i
フラグの間の違いは、
.Fl u
フラグはディスク上にあるフィールドの値を編集 (更新) するだけですが、
一方
.Fl i
フラグはセクタ 0 を
.Dq 初期化
するのに使われます;
ディスク全体を
.Fx
用に使えるように、
最後の BIOS スライスをセットアップして、それをアクティブにします。
.Sh 注
開始シリンダ等の自動計算は、
BIOS がそのドライブのジオメトリであると思っている数字をもとに行なわれます。
これらの数字はデフォルトでは、メモリ上のディスクラベルから取りますが、
.Nm
の起動時にそれらを変更する機会が与えられます。
このおかげでユーザは、
BIOS がジオメトリ変換を行なうドライブでも動作できるブートブロックを
作ることができます。
.Pp
もしディスクのレイアウトを手作業で変更するのなら、
どうか
.Fx
スライスがシリンダ境界から開始することを確認してください。
その後のたくさんの決定がこのことを仮定しています。
(これは必要ではなかったのかもしれませんが)
.Pp
すでにあるスライスを編集すると、
たぶんそのスライスのデータを失うことになるでしょう。
.Pp
.Nm
がどう働くかを調べるために、
1 度か 2 度は対話的に実行するべきです。
これは、最後の質問に否定で答える限り完全に安全です。
このマニュアルでは完全に説明されていませんが、
.Nm
が検出する微妙な点があります。
.Sh 設定ファイル
.Fl f
オプションが与えられたとき、
.Ar configfile
の値を使ってディスクのスライステーブルを書換えることができます。
このファイルの構文はたいへん単純です。
各行はコメントか仕様のどちらかです。
.Bl -tag -width indent
.It Ic # Ar comment ...
.Ic #
で開始している行はコメントで無視されます。
.It Ic g Ar spec1 spec2 spec3
スライス計算で使う BIOS ジオメトリを設定します。
前に文字を伴った数字で、3 つの値を指定することが必要です。
.Bl -tag -width indent
.It Cm c Ns Ar num
シリンダの数を
.Ar num
に設定します。
.It Cm h Ns Ar num
ヘッドの数を
.Ar num
に指定します。
.It Cm s Ns Ar num
トラックあたりのセクタの数を
.Ar num
に設定します。
.El
.Pp
これらの指定はどんな順序でもよく、先頭の文字がどの値かを決定します;
しかし、3 つ全てを指定することが必要です。
.Pp
この行はスライス情報を指定するどんな行よりも前に現れなくてはなりません。
.Pp
次の条件が真でなければ、エラーです:
.Pp
.Bd -literal -offset indent
1 <= シリンダの数
1 <= ヘッドの数 <= 256
1 <= トラックあたりのセクタの数 < 64
.Ed
.Pp
シリンダの数は 1024 以下でなければなりませんが、
しかしこれは強制されるものではなく、警告が表示されるでしょう。
ブート可能な
.Fx
スライス
.Dq ( Pa /
ファイルシステム) は
最初の 1024 シリンダ以内に収まっていなといけません;
もしそうでなければ、ブートに失敗するかもしれません。
ブートしないスライスには、この制限はありません。
.Pp
1019 シリンダ、39 ヘッド、63 セクタのディスクの例 (これらの全てはみな等価):
.Pp
.Bd -literal -offset indent
g c1019 h39 s63
g h39 c1019 s63
g s63 h39 c1019
.Ed
.It Ic p Ar slice type start length
.Ar partition
(1-4) で与えられたスライスに、タイプ
.Ar type
、開始セクタ
.Ar start
、長さ (セクタ数)
.Ar length
を設定します。
.Pp
これらの行で明示的に言及されたスライスだけが変更されます;
.Ic p
行で参照されていないスライスは変更されません。
しかし、無効なスライステーブルがあるか、
.Fl i
オプションが指定されているなら、
存在するスライスエントリは全て取り除かれ (未使用の印がつけられ)、
スライス情報を明示的に設定するのに、
.Ic p
行が使われなければなりません。
もし複数のスライスを設定する必要があるなら、
複数の
.Ic p
行が指定されなければなりません;
1 行で 1 個のスライスを設定します。
.Pp
これらのスライス行は、もしあればジオメトリ指定行の後に現れなければ
なりません。
.Pp
.Fx
スライスの
.Ar type
は 165 です。0 のスライスタイプを指定すると、
スライスを取り除き未使用の印をつけたのと同じことになります;
しかし、
.Dq ( 0
とかの) ダミーの値が
.Ar start
と
.Ar length
に指定されなければなりません。
.Pp
注: スライスの開始オフセットはヘッド境界まで必要なら繰り上げられ、
終了オフセットはシリンダ境界まで必要なら繰り下げられます。
.Pp
例: スライス 4 を取り除いて、未使用の印をつける:
.Pp
.Pp
.Dl "p 4 0 0 0"
.Pp
例: スライス 1 を
.Fx
スライスであって、
セクタ 1 から始まって 2503871 セクタの長さに設定する
(注: これらの値は、
対応するヘッドとシリンダ境界に繰り上げ/繰り下げられます):
.Pp
.Dl "p 1 165 1 2503871"
.Pp
.It Ic a Ar slice
.Ar slice
スライスをアクティブにします。
設定ファイルのどこに現われても構いませんが、
1 個だけ存在することが必要です。
.Pp
例: スライス 1 をアクティブスライスにします:
.Pp
.Dl "a 1"
.El
.Sh 関連ファイル
.Bl -tag -width ".Pa /boot/mbr" -compact
.It Pa /boot/mbr
デフォルトのブートコード
.El
.Sh 関連項目
.Xr boot0cfg 8 ,
.Xr disklabel 8 ,
.Xr newfs 8
.Sh バグ
デフォルトのブートコードは、
必ずしもすべてのスライスタイプを正しく扱いません。
特に
.Tn MS-DOS
6.x 以降に導入されたものについてはそうです。
.Pp
ユーティリティ全体をよりユーザフレンドリにするべきです。
.Pp
.Fx
の新規ユーザは、
.Dq スライス
と
.Dq パーティション
の違いが分からず、慣れるまで大変でしょう。
.Pp
ディスク全体を
.Fx
に捧げるためには、このコマンドは使えません。
これには
.Xr disklabel 8
コマンドを使わなればなりません。