1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
|
.\" Copyright 1992, 1993 Rickard E. Faith (faith@cs.unc.edu)
.\" Copyright 1998 Andries E. Brouwer (aeb@cwi.nl)
.\" May be distributed under the GNU General Public License
.\"
.\" Japanese Version Copyright (c) 1997-1998 NAKANO Takeo all rights reserved.
.\" Translated Thu Sep 11 1997 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
.\" Updated & Modified Fri 3 Jul 1998 by NAKANO Takeo
.\" Updated & Modified Thu 7 Oct 1999 by NAKANO Takeo
.\" Updated & Modified Sat 18 Mar 2000 by NAKANO Takeo
.\" Updated & Modified Jun 14 May 2000 by NAKANO Takeo
.\" Updated & Modified Tue May 4 23:47:43 JST 2004
.\" by Yuichi SATO <ysato444@yahoo.co.jp>
.\"
.TH FDISK 8 "11 June 1998" "Linux 2.0" "Linux Programmer's Manual"
.SH 名前
fdisk \- Linux 用のパーティションテーブル操作ツール
.SH 書式
.BI "fdisk [\-u] [\-b " sectorsize ]
.BI "[\-C " cyls "] [\-H " heads "] [\-S " sects "] " device
.sp
.BI "fdisk \-l [\-u] [" "device ..." ]
.sp
.BI "fdisk \-s " "partition ..."
.sp
.BI "fdisk \-v
.SH 説明
ハードディスクは、一つ以上の論理的なディスクに分割することができる。
これは
.I
パーティション (partition)
と呼ばれる。この分割に関する情報は、ディスクのセクタ 0 に置かれる
.I
パーティションテーブル
に保存される。
BSD の世界では、それぞれ「ディスクスライス (disk slice)」、
「ディスクラベル (disklabel)」といった用語が用いられる。
Linux は少なくとも一つのパーティションを必要とする。
すなわちルートファイルシステムとするパーティションである。
また Linux ではスワップファルやスワップパーティションを
利用することができるが、後者の方が効率が良い。
したがって、通常は二つめのパーティションを
スワップ用に利用したくなる場合が多いだろう。
Intel 互換のハードウェアでは、システムをブートさせる BIOS はディスクの
先頭 1024 シリンダにしかアクセスできない場合が多い。
したがって大きなディスクを使っているユーザーは、
数メガバイト程度の第三のパーティションを追加することになる。
これは典型的には
.IR /boot
にマウントされ、カーネルイメージと、
ブートに必要ないくつかの外部ファイルを保存する。
このようにして、ブートに必要なファイルが BIOS によって
アクセス可能であることを保証するのである。
またセキュリティ、保守の都合、バックアップ、テストなど、
より多くのパーティションを使う理由は他にも存在する。
(最初の形式で起動された場合には)
.B fdisk
はメニュー駆動型のプログラムであり、
パーティションテーブルの作成と操作を行う。
DOS 形式のパーティションや、BSD,
SUN 形式のディスクラベルを扱うこともできる。
.I device
に指定するのは通常以下のうちのどれかである。
.br
.nf
.RS
/dev/hda
/dev/hdb
/dev/sda
/dev/sdb
.RE
.fi
(/dev/hd[a\-h] は IDE ディスク、/dev/sd[a\-p] は SCSI ディスク、
/dev/ed[a\-d] は ESDI ディスク、/dev/xd[ab] は XT ディスクである)
デバイス名はディスク全体を参照する。
.I partition
は
.I device
名にパーティション番号を付加したものである。例えば
.B /dev/hda1
はシステムの第一 IDE ハードディスクの第一パーティションを指す。
IDE ディスクは 63 個までのパーティションを保持することができる。
SCSI ディスクは 15 までである。
.I /usr/src/linux/Documentation/devices.txt
も参考にすると良い。
BSD/SUN 形式のディスクラベルは 8 パーティションを扱うことができる。
そのうち 3 番目は「ディスク全体」を表すパーティションとなる。
先頭セクタを実際に利用するパーティション (スワップなど) を
シリンダ 0 から割り当ててはならない。ディスクラベルを破壊してしまう。
IRIX/SGI 形式のディスクラベルは、16 パーティションを記述できる。
そのうちの第 11 番目は `volume' 全体に対応するパーティションであり、
第 9 番目は `volume header' とラベル付けされる。
volume header はパーティションテーブルの領域もカバーする。
つまり volume header はブロック 0 から始まり、デフォルトでは
シリンダ 5 までの部分を占める。volume header の残りの部分は
ヘッダディレクトリエントリに用いられる。
volume header は他のパーティションと重なってはならない。
またパーティションテーブルが含まれているので、形式を変更したり、
ファイルシステムを作ったりもできない。
このラベル形式は、IRIX/SGI マシンで動作している Linux か、
IRIX/SGI ディスクを Linux で使う場合に限って用いること。
DOS 形式のパーティションテーブルは、パーティションの数に制限がない。
セクタ 0 には、4 つのパーティション
(「基本 (primary) パーティション」と呼ばれる) に関する情報が記述されている。
これら基本パーティションは、拡張 (extended) パーティションにすることもできる。
これは論理 (logical) パーティションの入れ物となる。
拡張パーティションにはディスクリプターが
セクタのリンクリストの形式で置かれ、
それぞれ対応する論理パーティションの情報を保持する。
四つの基本パーティションには (存在していなくても)
番号 1\-4 が割り当てられる。論理パーティションの番号は 5 から始まる。
DOS 形式のパーティションテーブルでは、それぞれのパーティションの
スタートオフセットとサイズは、二種類の方法で保存される。
一つはセクタの絶対数 (32 ビット) であり、
もう一つは「シリンダ数/ヘッド数/セクタ数
(C/H/S)」の三つの組み合わせである (それぞれ 10, 8, 6 ビット)。
前者には問題は特になく、512 バイトのセクタで 2 TB を扱うことができる。
後者には二種類の問題がある。まず第一に、この C/H/S を与えるためには、
ヘッド数とトラックあたりのセクタ数を知っていなければならない。
第二に、これらの数値がわかったとしても、24 ビットでは足りないかもしれない。
DOS は C/H/S だけを用いる。Windows は両方を用いる。
Linux では C/H/S は使わない。
.B fdisk
は、
可能な場合にはディスクのジオメトリを自動的に取得する。
これはディスクの物理的なジオメトリであるとは限らない
(実際、最近のディスクでは、本当に物理的な \- 単純な
C/H/S 形式で記述できるような \- ジオメトリを持っていないものもある)。
しかしいずれにせよ、
MS-DOS はこのジオメトリをパーティションテーブルで利用する。
Linux しか置かないディスクなら、通常はデフォルトで問題なくすべてうまくいく。
しかし他の OS とディスクを共有しなければならない場合には、
まず他の OS 上で、その OS 付属の fdisk を先に実行し、
少なくとも一つのパーティションを作っておくと良い場合が多い。
Linux は、他の OS とうまく付き合うために、
ブート時にパーティションテーブルを参照し、
どんなジオメトリが要求されているのかを判断・決定しようとする
(要求されているジオメトリは、
物理的なものとは異なっているかもしれないから)。
パーティションテーブルが表示されるときには、パーティションテーブルの
エントリに対して整合性チェックが行われる。このチェックは、パーティション
の開始と終了に関する、物理的な情報と論理的なそれとが同一であるか、また
パーティションの開始/終了点がシリンダ境界にあるかを調べる (ただし後者
のチェックでは、最初のパーティションは例外である)。
MS-DOS のバージョンによっては、最初のパーティションの開始点をシリンダ
境界ではなく先頭シリンダの第 2 セクタにするものがある。
シリンダ 1 から始まるパーティションの開始点はシリンダ境界にならないが、
これは問題になることはあまりないだろう。
ただし OS/2 を同じマシンで使っていなければ、であるが。
パーティションテーブルが更新されると、終了する前に sync() と BLKRRPART
ioctl() (ディスクからパーティションテーブルを読み込みなおす) が
実行される。とても昔には、fdisk を利用した後にはリブートが
必須だったこともあった。
多分これは現在では直っていると思う \- むしろ、あまりに急いで
リブートすると、まだ書き込まれていないデータを失うかもしれない。
カーネルとディスクハードウェアの両方にバッファーデータが存在することに
注意すること。
.SH "DOS 6.x 向けの警告"
DOS 6.x の FORMAT コマンドはパーティションのデータエリアの
第一セクタからある種の情報を検索し、
これをパーティションテーブルにある情報より信頼できるものとして扱う。
DOS の FORMAT は、容量が変更されたときには最初の 512 バイト分の
データ領域が DOS 版 FDISK によってクリアされていることを仮定している。
DOS の FORMAT はこの拡張情報を /U フラグを指定した場合でも見ようとする
\- これは DOS FORMAT と DOS FDISK のバグであると我々は考える。
結局のところ、cfdisk や fdisk を用いて DOS パーティションの容量を
変更したときは、DOS FORMAT を使ってパーティションをフォーマットする前に
.B dd
を使って先頭の 512 バイトを 0 で埋めなければならない、というわけである。
例えば cfdisk を用いて /dev/hda1 の DOS パーティションの
テーブルエントリを作成した場合には、(fdisk または cfdisk を終了し、
Linux をリブートしてパーティションテーブルの情報を有効にしたあとで)
先頭の 512 バイトをゼロにするために
"dd if=/dev/zero of=/dev/hda1 bs=512 count=1"
などと実行する必要がある。
.B dd
コマンドを使う場合には\fB特に注意すること\fP。ちょっとしたタイプミスで、
ディスク上のすべてのデータがパーになる可能性もある。
できるだけ問題を起こしたくなければ、常に OS 固有のパーティション
テーブル用プログラムを用いることである。
例えば DOS パーティションは DOS FDISK プログラムで作り、
Linux のパーティションは Linux の fdisk または cfdisk で作るべきなのである。
.SH オプション
.TP
.BI "\-b " sectorsize
ディスクのセクタサイズを指定する。
指定できる値は 512, 1024, 2048 のいずれかである。
(最近のカーネルはセクタサイズをうまく扱える。
このオプションを用いるのは、カーネルが古い場合や、
カーネルの考えを上書きする場合だけにすること。)
.TP
.BI "\-C " cyls
ディスクのシリンダ数を指定する。
なぜこれを指定したいと思うのかは分からない。
.TP
.BI "\-H " heads
ディスクのヘッダ数を指定する
(もちろん物理的なヘッダ数ではなく、
パーティションテーブルに使われるヘッダ数である)。
適切な値は 255 または 16 である。
.TP
.BI "\-S " sects
ディスクの 1 トラック当りのセクタ数を指定する
(もちろん物理的なセクタ数ではなく、
パーティションテーブルに使われるセクタ数である)。
適切な値は 63 である。
.TP
.B \-l
指定したデバイスのパーティションテーブルをリストして終了する。
デバイスを何も指定しないと、
.I /proc/partitions
があれば、そこにあるデバイスを対象にする。
.TP
.B \-u
パーティションテーブルをリストするときに、サイズをシリンダ単位ではなく
セクタ単位で表示する。
.TP
.BI "\-s " partition
パーティションのサイズを (ブロック単位で) 標準出力に表示する。
.TP
.B \-v
.B fdisk
プログラムのバージョン番号を表示して終了する。
.SH バグ
この種の *fdisk プログラムには、同じ機能を持ったものが複数存在する。
それぞれ長所短所がある。
.BR cfdisk ,
.BR fdisk ,
.B sfdisk
の順に試してみると良いだろう。
(実際のところ、
.B cfdisk
は美しいプログラムであり、受付けるパーティションテーブルに
厳しい条件を課し、品質の高いパーティションテーブルを生成する。
可能な場合はこれを用いること。
.B fdisk
はバグっぽいプログラムで、やることもややあやふやである -
通常は真っ当な結果を出力するけれど。一つ利点があるとすると、
.B fdisk
は BSD のディスクラベルや、その他の非 DOS パーティションテーブルを
多少サポートしている点である。
.B sfdisk
はハッカー専用である。ユーザーインターフェースはひどいが、
fdisk よりも正しく、また fdisk, cfdisk のどちらよりもパワフルだ。
それに、インタラクティブでない使い方もできる)
.PP
最近は
.B parted
というツールもある。
cfdisk のインタフェースは優れているが、parted はより優れている。
parted はパーティションのサイズを変更するだけではなく、
パーティションにあるファイルシステムのサイズも変更する。
.PP
IRIX/SGI 形式のディスクラベルは、現時点ではカーネルでサポートされていない。
また IRIX/SGI ヘッダディレクトリはまだ完全にはサポートできていない。
.PP
「パーティションテーブルをファイルにダンプする」
オプションは存在しない。
.\" .SH AUTHORS
.\" A. V. Le Blanc (LeBlanc@mcc.ac.uk)
.\" Bernhard Fastenrath (fasten@informatik.uni-bonn.de)
.\" Jakub Jelinek (jj@sunsite.mff.cuni.cz)
.\" Andreas Neuper (ANeuper@GUUG.de)
.\" and many others.
.SH 関連項目
.BR cfdisk (8),
.BR mkfs (8),
.BR parted (8),
.BR sfdisk (8)
|