FDISK

Section: System Administration (8)
Updated: February 2016
Index Return to Main Contents

 

名前

fdisk - ディスクパーティションテーブルを操作する

 

書式

fdisk [options] device

fdisk -l [device...]

 

説明

fdisk はパーティションテーブルの作成と操作を行う対話型のプログラムである。 このプログラムは GPT, MBR, Sun, SGI, BSD パーティションテーブルを操作できる。

ブロックデバイスは、一つ以上の論理的なディスクに分割することができる。 これは と呼ばれる。この分割に関する情報は、ディスクのセクタ 0 に置かれる パーティションテーブル に保存される。 (BSD の世界では、それぞれ「ディスクスライス (disk slice)」、 「ディスクラベル (disklabel)」といった用語が用いられる。)

すべてのパーティション分割は、デフォルトでは I/O 制限 (トポロジー) によって操作される。 fdisk はディスクレイアウトを 4K セクタサイズで最適化し、 MBR と GPT では最近のデバイスについて配置オフセットを使うことができる。 fdisk のデフォルトをデフォルト値 (例えば、開始と最終パーティションセクタ) として従うのは、常に良い考えである。 また、+/-<size>{M,G,...} 形式で指定されたパーティションサイズは、 常にデバイスのプロパティに応じて配置される。

CHS (シリンダ-ヘッダ-セクタ) アドレス指定は廃れているので、デフォルトでは使用しないこと。 SSD または 4K セクタのデバイスについて、 "fdisk -S <n> -H <n>" のアドバイスをしている古い記事や推奨事項には、従ってはいけない。

partx(8) はスクリプトからディスクレイアウトを表示するために、 リッチなインタフェースを提供している。 fdisk は大部分は人が使うためにデザインされている。 fdisk の出力の後方互換は保証されていない。 入力 (コマンド) は常に後方互換であるべきだろう。

 

オプション

-b, --sector-size sectorsize
ディスクのセクタサイズを指定する。 指定できる値は 512, 1024, 2048, 4096 のいずれかである。 (最近のカーネルはセクタサイズをうまく扱える。 このオプションを用いるのは、カーネルが古い場合や、 カーネルの考えを上書きする場合だけにすること。) util-linux-2.17 以降で、fdisk は論理セクタサイズと 物理セクタサイズを異なる値にする。 このオプションは両方のセクタサイズを sectorsize にする。
-B, --protect-boot
新しいディスクラベルを作成するときに、 最初のディスクセクタを消去しない。 この機能は GPT と MBR でサポートされる。
-c, --compatibility[=mode]
互換モード 'dos' または 'nondos' を指定する。 デフォルトは non-DOS モードである。 後方互換のため、このオプションは mode 引き数を指定せずに使うことができる。-- その場合に、このデフォルトが使われる。 オプションの mode 引き数は、-c オプションと スペースを開けて使うことができない点に注意すること。 正しい形式は、例えば '-c=dos' である。
-h, --help
ヘルプを表示して、終了する。
-L, --color[=when]
出力をカラー表示する。 オプションの引き数 when は、 auto, never, always である。 when 引き数が省略された場合、デフォルトは auto である。 カラー表示は無効化できる。 現在の組み込みのデフォルトは、 --help 出力を参照すること。 COLORS セクションも参照すること。
-l, --list
指定したデバイスのパーティションテーブルをリストして終了する。 デバイスを何も指定しないと、 /proc/partitions があれば、そこにあるデバイスを対象にする。
-o, --output list
出力する列を指定する。 サポートされる列のリストを取得するには、 --help を使うこと。

デフォルトの列のリストは、list+list の形式で指定することで拡張できる (例えば -o +UUID)。

-s, --getsz
指定されたブロックデバイスを 512 バイトセクタ単位でサイズを表示する。 このオプションは廃れておりblockdev(1) を使うべきである。
-t, --type type
指定された type のディスクラベルのみを有効にして、 他のすべてのタイプを無効にする。
-u, --units[=unit]
パーティションテーブルをリストする際に、サイズを「セクタ数」または 「シリンダ数」で表示する。 デフォルトではサイズをセクタ数で表示する。 後方互換のため、このオプションは unit 引き数を指定せずに使うことができる。-- その場合に、このデフォルトが使われる。 オプションの unit 引き数は、-u オプションと スペースを開けて使うことができない点に注意すること。 正しい形式は、例えば '-u=cylinders' である。

-C, --cylinders number
ディスクのシリンダ数を指定する。 なぜこれを指定したいと思うのかは分からない。
-H, --heads number
ディスクのヘッダ数を指定する (もちろん物理的なヘッダ数ではなく、 パーティションテーブルに使われるヘッダ数である)。 適切な値は 255 または 16 である。
-S, --sectors number
ディスクの 1 トラック当りのセクタ数を指定する (もちろん物理的なセクタ数ではなく、 パーティションテーブルに使われるセクタ数である)。 適切な値は 63 である。

-w, --wipe when
衝突の可能性を避けるため、デバイスからファイルシステム、RAID、 パーティションテーブルの署名 (signature) を消去する。 引き数 whenauto, never, always のいずれかである。 デフォルトは auto であり、対話モードの場合にのみ、署名が消去される。 新しいパーティションテーブルが作成される前に、 すべての場合において、検知された署名は警告メッセージで報告される。 wipefs(8) コマンドを参照すること。

-W, --wipe-partition when
衝突の可能性を避けるため、新しく作成されたパーティションから ファイルシステム、RAID、パーティションテーブルの署名を消去する。 引き数 whenauto, never, always のいずれかである。 デフォルトは auto であり、対話モードの場合にユーザが承諾した後に、署名が消去される。 新しいパーティションが作成される前に、 すべての場合において、検知された署名は警告メッセージで報告される。 wipefs(8) コマンドを参照すること。

-V, --version
バージョン情報を表示して、終了する。

 

デバイス

device は、通常は /dev/sda, /dev/sdb などである。 デバイス名はディスク全体を示す。 libata (Linux カーネル内部で ATA ホストコントローラとデバイスをサポートするライブラリ) を 使っていない古いシステムでは、IDE と SCSI ディスクで違いがある。 この場合、デバイス名が /dev/hd* (IDE) と /dev/sd* (SCSI) になる。

パーティション (partition) はデバイス名の後にパーティション番号が続く。 例えば、/dev/sda1 は、システムの最初のハードディスクの最初のパーティションである。 Linux カーネルのドキュメント (Documentation/devices.txt ファイル) も参照すること。

 

サイズ

「最終セクタ」ダイアログで、パーティションサイズを、 セクタ数または +/-<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(8) を参照すること。

 

ディスクラベル

GPT (GUID Partition Table)
GPT は、パーティションテーブルのレイアウトの、現在の標準である。 GPT は 64-bit 論理ブロックアドレス、チェックサム、UUID と パーティション名を使い、無限のパーティション数が使える (ただし、パーティション数は、多くのパーティション分割ツールで たいてい 128 に制限されている)。

最初のセクタは GPT 仕様でも protective MBR として予約されている。 これは、MBR のみのパーティション分割ツールが、 GPT ディスクを誤認識して上書きするのを防止する。

GPT は、特に現在のハードウェアで UEFI ブートローダを使う場合に、 MBR より常に優れた選択肢である。

DOS 形式 (MBR)

DOS 形式のパーティションテーブルは、パーティションの数に制限がない。 セクタ 0 には、4 つのパーティション (「基本 (primary) パーティション」と呼ばれる) に関する情報が記述されている。 これら基本パーティションは、拡張 (extended) パーティションにすることもできる。 これは論理 (logical) パーティションの入れ物となる。 拡張パーティションにはディスクリプターが セクタのリンクリストの形式で置かれ、 それぞれ対応する論理パーティションの情報を保持する。 4 つの基本パーティションには (存在していなくても) 番号 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 は使わない。 C/H/S アドレス指定は廃れているので、 今後の fdisk のバージョンではサポートされないかもしれない。

DOS 互換パーティションを使いたい場合、DOS モードのセクションを読んでほしい。 fdisk はデフォルトではシリンダ境界を考慮しない。

BSD/Sun 形式

BSD/SUN 形式のディスクラベルは 8 パーティションを扱うことができる。 そのうち 3 番目は「ディスク全体」を表すパーティションとなる。 先頭セクタを実際に利用するパーティション (スワップなど) を シリンダ 0 から割り当ててはならない。ディスクラベルを破壊してしまう。 BSD ラベル は通常は DOS パーティション内でネストされる。

IRIX/SGI 形式

IRIX/SGI 形式のディスクラベルは、16 パーティションを記述できる。 そのうちの第 11 番目は `volume' 全体に対応するパーティションであり、 第 9 番目は `volume header' とラベル付けされる。 volume header はパーティションテーブルの領域もカバーする。 つまり volume header はブロック 0 から始まり、デフォルトでは シリンダ 5 までの部分を占める。volume header の残りの部分は ヘッダディレクトリエントリに用いられる。 volume header は他のパーティションと重なってはならない。 またパーティションテーブルが含まれているので、形式を変更したり、 ファイルシステムを作ったりもできない。 このラベル形式は、IRIX/SGI マシンで動作している Linux か、 IRIX/SGI ディスクを Linux で使う場合に限って用いること。

パーティションテーブルが更新された場合、 sync() と ioctl(BLKRRPART) (ディスクからパーティションテーブルの再読み込み) が、  終了前に実行される。

 

DOS 6.x 向けの警告

ここに書かれていることは古い点に注意すること。 現在のオペレーティングシステムではジオメトリとシリンダに注意する必要がない。 DOS 互換のパーティションを本当に使いたいなら、 '-c=dos -u=cylinders' fdisk コマンドラインオプションで、 DOS モードとシリンダを有効にする必要がある。

DOS 6.x の FORMAT コマンドはパーティションのデータエリアの 第一セクタからある種の情報を検索し、 これをパーティションテーブルにある情報より信頼できるものとして扱う。 DOS の FORMAT は、容量が変更されたときには最初の 512 バイト分の データ領域が DOS 版 FDISK によってクリアされていることを仮定している。 DOS の FORMAT はこの拡張情報を /U フラグを指定した場合でも見ようとする -- これは DOS FORMAT と DOS FDISK のバグであると我々は考える。

結局のところ、cfdisk や fdisk を用いて DOS パーティションの容量を 変更したときは、DOS FORMAT を使ってパーティションをフォーマットする前に dd を使って先頭の 512 バイトを 0 で埋めなければならない、というわけである。 例えば cfdisk を用いて /dev/hda1 の DOS パーティションの テーブルエントリを作成した場合には、(fdisk または cfdisk を終了し、 Linux をリブートしてパーティションテーブルの情報を有効にしたあとで) 先頭の 512 バイトをゼロにするために "dd if=/dev/zero of=/dev/hda1 bs=512 count=1" などと実行する必要がある。

fdisk は通常はディスクジオメトリを自動的に取得する。 これは物理ディスクジオメトリである必要はないが、 MS-DOS はパーティションテーブルに、このディスクジオメトリを使う (実際、最近のディスクは物理ジオメトリのようなものを持っておらず、 シンプルなシリンダ数/ヘッダ数/セクタ数の形式で記述できるものではない)。

通常は、デフォルトですべてうまくいき、ディスク上のシステムが Linux のみであれば、何も問題ない。 しかし、ディスクを他のオペレーティングシステムと共有しなければならない 場合、少なくとも 1 つのパーティションを別のオペレーティングシステムから fdisk を実行するのは良い考えである。 Linux がブートする時、パーティションテーブルを見て、 他のシステムと協調するために、 どのような (仮想の) ジオメトリが必要かを推定しようとする。

DOS モードでパーティションテーブルを表示する場合、 パーティションテーブルのエントリの整合性チェックが実行される。 このチェックでは、物理と論理の開始と終了ポイントが等しいかを検証し、 (最初のパーティションを除いて) 各パーティションが シリンダ境界で開始と終了しているかを検証する。

MS-DOS のいくつかのバージョンでは、シリンダ境界で始まらず、 最初のシリンダのセクタ 2 で始まるように、最初のパーティションを作成する。 シリンダ 1 で始まるパーティションは、シリンダ境界で始まることができず、 マシンに OS/2 がない限り、面倒事を起こす可能性がある。

できるだけ問題を起こしたくなければ、常に OS 固有のパーティション テーブル用プログラムを用いることである。 例えば DOS パーティションは DOS FDISK プログラムで作り、 Linux のパーティションは Linux の fdisk または cfdisk で作るべきなのである。  

カラー表示

暗黙のカラー表示は、空ファイル /etc/terminal-colors.d/fdisk.disable を 使うことで無効化できる。

カラー表示の設定のより詳細は、 terminal-colors.d(5) を参照すること。 fdisk でサポートされる論理的なカラー名は以下の通りである:

header
出力テーブルのヘッダ。
help-title
ヘルプセクションのタイトル。
warn
警告メッセージ。
welcome
「ようこそ」のメッセージ。

 

作者

Karel Zak
Davidlohr Bueso

元々のバージョンは、Andries E. Brouwer, A. V. Le Blanc などによって書かれた。

 

環境変数

FDISK_DEBUG=all
fdisk のデバッグ出力を有効にする。
LIBFDISK_DEBUG=all
libfdisk のデバッグ出力を有効にする。
LIBBLKID_DEBUG=all
libblkid のデバッグ出力を有効にする。
LIBSMARTCOLS_DEBUG=all
libsmartcols のデバッグ出力を有効にする。
LIBSMARTCOLS_DEBUG_PADDING=on
視認可能な埋め文字を使う。 LIBSMARTCOLS_DEBUG を有効にする必要がある。

 

関連項目

cfdisk(8), mkfs(8), partx(8), sfdisk(8)

 

入手方法

fdisk コマンドは util-linux パッケージの一部であり、 https://www.kernel.org/pub/linux/utils/util-linux/ から入手できる。


 

Index

名前
書式
説明
オプション
デバイス
サイズ
スクリプトファイル
ディスクラベル
DOS 6.x 向けの警告
カラー表示
作者
環境変数
関連項目
入手方法

This document was created by man2html, using the manual pages.
Time: 14:52:27 GMT, April 18, 2020