FDISK(8) | System Administration | FDISK(8) |
fdisk - ディスクのパーティションテーブルを操作する
fdisk [options] device
fdisk -l [device...]
fdisk は、パーティションテーブルの作成と操作を行う対話方式のプログラムである。 この fdisk は、GPT, MBR, Sun, SGI, BSD のパーティションテーブルを理解することができる。
ブロックデバイスは、パーティションと呼ばれる 1 個以上の論理ディスクに分割することができる。この分割に関する情報は、通常ディスクのセクタ 0 に存在するパーティションテーブルに記録される。(BSD の世界では、 「ディスクスライス」とか「ディスクラベル」という言い方をする。)
すべてのパーティション分割は、デフォルトではデバイスの I/O リミット (I/O トポロジーとも言う) に基づいて行われる。そのため fdisk は、4K-sector のサイズにふさわしくディスクレイアウトを最適化したり、MBR や GPT のために最近のデバイスで開始点や終了点のオフセットを適切な値に揃えたりできるのである。 だから、デフォルトの値に (たとえば、パーティションの最初や最後のセクタの値に) fdisk の提示するデフォルトを使うのは、いつだって賢明なことである。 また、パーティションのサイズを +/-<size>{M,G,...} の表記で指定すれば、必ずデバイスのプロパティに合わせて大きさが調整されることになる。
CHS (Cylinder-Head-Sector) アドレシングは非推奨であり、デフォルトでは使用されない。だから、SSD や 4K-sector のデバイスを使うときは、"fdisk -S <n> -H <n>" といったアドバイスのある古い記事や助言には、どうか従わないでいただきたい。
なお、ディスクレイアウトを表示するスクリプトのためには、partx(8) が豊富なインターフェースを提供している。 fdisk の方は、主として人間が使うことを想定しているのである。fdisk は、出力については後方互換を保証していない。入力 (コマンド) については、どれも後方互換のはずである。
list を +list という書式で指定すれば、デフォルトのリストに項目を追加することができる (たとえば -o +UUID のように)。
「デバイス」は普通、/dev/sda, /dev/sdb などである。デバイス名は、ディスク全体を指している。libata (ATA ホストコントローラーと ATA デバイスをサポートするために Linux カーネルの内部で使われるライブラリ) の存在しない古いシステムでは、IDE と SCSI のディスクを区別している。そうした場合は、デバイス名が /dev/hd* (IDE) や /dev/sd* (SCSI) になるだろう。
「パーティション」は、デバイス名の後ろにパーティション番号が付いたものだ。 たとえば、/dev/sda1 は、そのシステムの最初のハードディスクの最初のパーティションである。 Linux kernel 文書 (この場合は、Documentation/admin-guide/devices.txt というファイル) もご覧になっていただきたい。
"Last sector (最終セクタ)" という問い合わせに対しては、パーティションサイズをセクタ数でも +/-<size>{K,B,M,G,...} という表記でも指定できる。
サイズの前に '+' を付けると、そのパーティションの最初のセクタからの相対的なサイズと解釈される。 サイズの前に '-' を付けた場合は、最大位置 (そのパーティションのために利用できる最後のセクタ) からのサイズになる。
サイズをバイト数で指定する場合は、数字の後に KiB=1024, MiB=1024*1024 のような乗数を表す接尾辞を付けることができる。GiB, TiB, PiB, EiB, ZiB, YiB も同様に使える。"iB" を続けるのは任意であり、たとえば、"K" は "KiB" と同じ意味である。
相対的なサイズは、必ずデバイスの I/O リミットに合わせて大きさが調整される。 +/-<size>{K,B,M,G,...} というこの表記法をお勧めする所以である。
後方互換のため、fdisk は KB=1000, MB=1000*1000 といった接尾辞も解する。 GB, TB, PB, EB, ZB, YB も同様に使える。ただし、こういった 10^N を表す接尾時は非推奨である。
fdisk では、sfdisk 互換のスクリプトファイルを読み込むことができる ('I' コマンドを使用する)。スクリプトはメモリ中のパーティションテーブルに適用されるので、 そのパーティションテーブルに変更を加えてから、それをデバイスに書き出すことが可能である。
また逆に、現在メモリ中にあるディスクレイアウトを、'O' コマンドを使って、スクリプトファイルに書き出すこともできる。
こうしたスクリプトファイルは、cfdisk, sfdisk, fdisk などの libfdisk アプリケーションの間で互換性がある。より詳しいことは、sfdisk をご覧いただきたい。
GPT (GUID Partition Table)
なお、GPT の仕様では、今でも最初のセクタが protective MBR のために留保されている。MBR 専用のパーティショニングツールが、誤認識して GPT ディスクを上書きしてしまうのを防ぐためである。
GPT は、MBR より常によい選択である。UEFI のブートローダーを持つ最近のハードウェアでは、なおさらのことだ。
DOS-type (MBR)
DOS 形式のパーティションテーブルでは、各パーティションの開始オフセットとサイズは、 二つの方法で記録される。すなわち、セクタの絶対数 (32 ビットで指定される) と、シリンダ数/ヘッド数/セクタ数 (C/H/S) の三つ組としてである (10+8+6 ビットで指定される)。前者には問題がない。512-byte セクタで最大 2 TB まで表現できる。後者には二つの問題がある。第一に、こうした C/H/S のフィールドを埋めることができるのは、ヘッド数や 1 トラックあたりのセクタ数が分かっているときだけだ。 第二には、そうした数値の妥当な値が分かっている場合でも、利用できる 24 ビットでは十分ではない。DOS は C/H/S のみを使い、Windows は両方を使う。Linux は C/H/S を全く使わない。C/H/S 方式のアドレス指定は非推奨である。 fdisk の将来のバージョンではサポートされないかもしれない。
DOS 互換のパーティションを作成したいなら、「DOS モード ...」セクションをお読みになるとよい。fdisk はデフォルトでは、シリンダ境界に留意しない。
BSD/Sun-type
IRIX/SGI-type
パーティションテーブルが更新されたときは、プログラムを終了する前に、 sync() と ioctl(BLKRRPART) (ディスクからパーティションテーブルを再読み込みする) が実行される。
ご注意いただきたいが、このセクションで述べることの全てが非推奨である。 最近のオペレーティングシステムでは、ジオメトリやシリンダ数といったことに気を使う必要はない。 それでも、本当に DOS 互換のパーティション分割をなさりたいのならば、fdisk のコマンドラインオプション '-c=dos -u=cylinders' を使用して DOS モードと cylinder 単位を有効にしなければならない。
DOS 6.x の FORMAT コマンドは、パーティションのデータ領域の最初のセクタに、ある種の情報を探しに行き、 それをパーティションテーブルの情報より信頼できるものとして扱う。また、DOS の FORMAT は、DOS の FDISK が、サイズの変更があったときには必ず、パーティションのデータ領域の最初の 512 バイトをクリアすることを当てにしている。DOS の FORMAT は、/U フラグが指定されたときでさえ、上記の追加情報を見に行こうとする。 我々としては、こうした振る舞いは、DOS の FORMAT や FDISK のバグだと思う。
要するにこういうことだ。fdisk や cfdisk を使って、パーティションテーブル上の DOS の領域のサイズを変更する場合には、DOS の FORMAT でそのパーティションをフォーマットする前に、dd(1) コマンドを使って、そのパーティションの最初の 512 バイトを 0 で初期化することも行わなければならないのである。 たとえば、fdisk を使って、パーティションテーブル中の /dev/sda1 に DOS の領域を作成しているのならば、(fdisk を終了し、パーティションテーブルの情報が有効になるように Linux をリブートした後で) "dd if=/dev/zero of=/dev/sda1 bs=512 count=1" というコマンドを実行して、そのパーティションの最初の 512 バイトを 0 で初期化することになるだろう。
通常 fdisk はディスクジオメトリを自動的に取得する。 それは必ずしも実際の物理的なディスクジオメトリとはかぎらない (そうなのだ。最近のディスクには、物理的なジオメトリのようなものは実のところ存在しない。 「シリンダ数/ヘッド数/セクタ数」といった単純化された形で記述できるようなものは、 確かに存在しないのだ)。それでも、MS-DOS がパーティションテーブルで使用するのは、このディスクジオメトリなのである。
たいていの場合、デフォルトで万事うまく行くし、Linux がディスク上の唯一のシステムなら、問題はまったく起きない。 それでも、ディスクを他のオペレーティングシステムと共有しなければならないのなら、他の OS の FDISK でパーティションを少なくとも 1 つ作っておくのは、多くの場合、よい考えである。Linux は、ブートするとき、パーティションテーブルを調べて、 他のシステムとうまくやって行くためには、どんな (見せかけの) ジオメトリが必要かを推測しようとと試みるからである。
パーティションテーブルが DOS モードで表示される際には、 パーティションテーブルの各領域について、整合性のチェックが必ず行われる。 このチェックは、物理開始点と論理開始点、物理終了点と論理終了点が同じかどうかと、 各パーティションの開始点や終了点が、シリンダ境界と一致しているかどうかをチェックしている (ただし後者のチェックでは、最初のパーティションは除外される)。
MS-DOS のバージョンによっては、作成する最初のパーティションを、シリンダ境界ではなく、 先頭シリンダの第 2 セクタから始めるものがある。 開始点が先頭シリンダ中にあるパーティションでは、 シリンダ境界からパーティションが始まるわけがないが (訳注: 何故なら、先頭シリンダの先頭には MBR などがあるはずだから)、それが問題になることは、お手元のマシンに OS/2 も入っていないかぎり、まずないだろう。
最善の結果を得るためには、必ずその OS に固有のパーティションテーブル作成プログラムを使うべきである。 たとえば、DOS のパーティションは、DOS の FDISK プログラムで作り、Linux のパーティションは、Linux の fdisk か cfdisk プログラムで作るべきなのだ。
自動的なカラー表示は、/etc/terminal-colors.d/fdisk.disable という空ファイルを作ることで無効にできる。
カラー表示の設定についてもっと詳しいことを知りたかったら、terminal-colors.d(5) をご覧になるとよい。fdisk は、以下の論理カラー名をサポートしている。
Karel Zak <kzak@redhat.com>
Davidlohr Bueso <dave@gnu.org>
最初のバージョンを書いたのは、Andries E. Brouwer, A. V. Le Blanc, その他の人たちだった。
この fdisk コマンドは、util-linux パッケージの一部であり、以下の URL から入手できる。https://www.kernel.org/pub/linux/utils/util-linux/
February 2016 | util-linux |