Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all
名前
fdisk - ディスクのパーティションテーブルを操作する
書式
fdisk [options] device fdisk -l [device...]
説明
fdisk は、パーティションテーブルの作成と操作を行う対話方式のプログラムである。 この fdisk は、GPT, MBR, Sun, SGI, BSD のパーティションテーブルを理解することができる。 ブロックデバイスは、パーティションと呼ばれる 1 個以上の論理ディスクに分割することができ る。この分割に関する情報は、通常ディスクのセクタ 0 に存在するパーティションテーブルに記録 される。(BSD の世界では、 「ディスクスライス」とか「ディスクラベル」という言い方をする。) [訳注] このマニュアルでは、「パーティションテーブル」と「ディスクラベル」の両方を、 ほぼ 同じ意味で、混ぜて使っている。強いて言えば、Linux や DOS (GPT や MBR) については「 パーティションテーブル」を使い、他の OS の場合も含めて、より一般的に言うときは「 ディスクラベル」を使うようにしているらしいが、 必ずしもそうとは言えないところもあ る。 すべてのパーティション分割は、デフォルトではデバイスの I/O リミット (I/O トポロジーとも言 う) に基づいて行われる。そのため fdisk は、4K-sector のサイズにふさわしくディスクレイアウ トを最適化したり、MBR や GPT のために最近のデバイスで開始点や終了点のオフセットを適切な値 に揃えたりできるのである。 だから、デフォルトの値に (たとえば、パーティションの最初や最後 のセクタの値に) fdisk の提示するデフォルトを使うのは、いつだって賢明なことである。 ま た、パーティションのサイズを +/-<size>{M,G,...} の表記で指定すれば、必ずデバイスのプロパ ティに合わせて大きさが調整されることになる。 [訳注] util-linux 所収の blkid(8) の man によれば、blkid -i device で「I/O Limits (aka I/O topology) の情報を表示する」ことになっている。そこで、それを実行する と、MINIMUM_IO_SIZE, PHYSICAL_SECTOR_SIZE, LOGICAL_SECTOR_SIZE が表示された。I/O リミットとは、そうしたもののことなのだろう。特に、PHYSICAL_SECTOR_SIZE が重要なよ うだ。「I/O 境界」「I/O 制約」と訳せるかもしれない。 CHS (Cylinder-Head-Sector) アドレシングは非推奨であり、デフォルトでは使用されない。だか ら、SSD や 4K-sector のデバイスを使うときは、"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 なしで使うこともできる。その場合 は、デフォルトが使用される。 気を付けてほしいのは、オプションの -c と、指定が任意の 引き数 mode との間を空白で区切ってはいけないことだ。正しい書式は、たとえば '-c=dos' である。 -h, --help ヘルプテキストを表示して終了する。 -L, --color[=when] 出力をカラー表示にする。指定が任意の引き数 when には、auto, never, always が使え る。引き数 when を省略すると、デフォルトの auto になる。カラー表示は無効にすること もできる。 プログラムに埋め込まれた現在のデフォルトが有効か無効かを知りたけれ ば、--help の出力を見ればよい。「カラー表示」セクションも参照していただきたい。 -l, --list 指定されたデバイスのパーティションテーブルを一覧表示して、終了する。 デバイスをひと つも指定しなかった場合は、 /proc/partitions というファイルが存在するなら、そこに記 載されているデバイスを対象にする。 -o, --output list どの出力項目 (columns) を表示するかを指定する。サポートされている全項目のリストを知 るには、--help オプションを使用すればよい。 list を +list という書式で指定すれば、デフォルトのリストに項目を追加することができ る (たとえば -o +UUID のように)。 -s, --getsz 指定した各ブロックデバイスについて 512-byte セクタでサイズを表示する。このオプショ ンは非推奨であり、blockdev(8) を使った方がよい。(訳注: 実のところ、手元の v2.35.2 の fdisk -s では、1 セクタ 1024 バイト計算のセクタ数を表示する。blockdev --getsz の 方は 1 セクタ 512 バイトのセクタ数。) -t, --type type 指定したタイプ (type) のディスクラベルに対してのみサポートを有効にし、 ほかのすべて のタイプに対するサポートは無効にする。 -u, --units[=unit] パーティションテーブルの一覧表示をするとき、 「セクタ数」または「シリンダ数」でサイ ズを表示する。 デフォルトは、セクタ数でのサイズ表示である。後方互換を考慮して、この オプションは、 unit 引き数なしでも使えるようになっている。その場合は、デフォルトが 使用される。 気を付けてほしいのは、オプションの -u と、指定が任意の引き数 unit との 間を空白で区切ってはいけないことだ。すなわち、正しい書式は、たとえば '-u=cylinders' である。 -C, --cylinders number ディスクのシリンダ数を指定する。 どうしてそんなことをしたがるのか、筆者にはさっぱり わからないが。 -H, --heads number ディスクのヘッド数を指定する (もちろん、物理的なヘッド数ではなく、 パーティション テーブルで使うヘッド数である)。 妥当な値は、255 または 16 である。 -S, --sectors number ディスクの 1 トラックあたりのセクタ数を指定する (もちろん、物理的なセクタ数ではな く、パーティションテーブルで使うセクタ数である)。 妥当な値は、63 である。 -w, --wipe when デバイスからファイルシステムや RAID やパーティションテーブルのシグナチャーを消去す る (訳注: 前から存在する古いシグナチャーを消去するということだろう)。衝突 (collision) が起きないようにするためである。引き数の when には、auto, never, always が使える。このオプションが指定されない場合のデフォルトは、auto であり、その場合シグ ナチャーが消去されるのは、対話モードのときだけである。 いずれの場合でも、新しいパー ティションテーブルが作成される前に、検出されたシグナチャーが、 警告メッセージとして 通知される。wipefs(8) コマンドの説明もご覧いただきたい。 -W, --wipe-partition when 新たに作成するパーティションからファイルシステムや RAID やパーティションテーブルの シグナチャーを消去する (訳注: 前から存在する古いシグナチャーを消去するということだ ろう)。衝突 (collision) が起きないようにするためである。引き数の when には、auto, never, alwaysが使える。このオプションが指定されない場合のデフォルトは、 auto であ り、その場合シグナチャーが消去されるのは、対話モードのときだけで、 それもユーザが承 認した後である。 いずれの場合でも、新しいパーティションが作成される前に、検出された シグナチャーが、 警告メッセージとして通知される。wipefs(8) コマンドの説明もご覧いた だきたい。 -V, --version バージョン情報を表示して終了する。
デバイス
「デバイス」は普通、/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 は、パーティションテーブルのレイアウトについての最近の規格である。 GPT は、各 パーティションに対して、64 ビットの論理ブロックアドレス、チェックサム、 UUID、それ に、どんなパーティションかを示す名前を使用する。 また、パーティションの数に制限がな い (とは言え、パーティショニングツールの多くでは、パーティション数の上限をたいてい 128 にしている)。 [訳注] ここで言う「どんなパーティションかを示す名前」は、fdisk -l -o +Name を実行 すると (存在すれば) 表示される、簡単なパーティションの説明のことだろ う。"EFI system partition" とか "Basic data partition" のようなものである。 sfdisk の --part-label オプションの説明や、 「入力の書式」セクションの フィールド名の説明もご覧になっていただきたい。 なお、GPT の仕様では、今でも最初のセクタが protective MBR のために留保されてい る。MBR 専用のパーティショニングツールが、誤認識して GPT ディスクを上書きしてしまう のを防ぐためである。 GPT は、MBR より常によい選択である。UEFI のブートローダーを持つ最近のハードウェアで は、なおさらのことだ。 DOS-type (MBR) DOS 形式のパーティションテーブルは、記述できるパーシションの数に上限がない。 セクタ 0 には、4 パーティションを記述する余地がある (これらは基本パーティションと呼ばれ る)。 そのうちのひとつは拡張パーティションにすることができる。 これは、言わば、論理 パーティションを入れる容器であり、セクタの連鎖リストの形になっている記述子 (descriptors) が、それぞれの対応する論理パーティションの前に付いている。 4 個の基本 パーティションは、存在する、しないにかかわらず、1-4 の番号を取る。論理パーティショ ンの番号は、5 から始まる。 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 BSD/Sun 形式のディスクラベルは、8 個のパーティションを記述できる。そのうちの 3 番目 は、ディスク全体を表すパーティションになるはずだ。 パーティションが (スワップパー ティションのように) その最初のセクタを実際に使用する場合には、そのパーティションを シリンダ 0 から始めてはいけない。ディスクラベルを破壊することになるからである。 な お、BSD ラベル は、通常 DOS パーティションの中にネストされる。 IRIX/SGI-type IRIX/SGI 形式のディスクラベルは、16 個のパーティションを記述できる。そのうちの 11 番目は、ボリューム全体を表すパーティションであり、 9 番目は、ボリュームヘッダと名付 けられるはずだ。 このボリュームヘッダには、パーティションテーブルも含まれることにな る。 すなわち、ブロック 0 から始まって、デフォルトでは 5 シリンダ分を占めるのであ る。ボリュームヘッダの残りのスペースは、 ヘッダのディレクトリエントリ用に使用するこ とができる。 どのパーティションも、ボリュームヘッダと重なってはいけない。 また、ボ リュームヘッダのパーティションタイプを変更してはならないし、 そこにファイルシステム を作ってもいけない。 パーティションテーブルがなくなってしまうからである。このタイプ のラベルを使うのは、 IRIX/SGI マシンで Linux を動かすときか、Linux の元で IRIX/SGI のディスクを扱うときだけにするべきである。 パーティションテーブルが更新されたときは、プログラムを終了する前に、 sync() と ioctl(BLKRRPART) (ディスクからパーティションテーブルを再読み込みする) が実行される。
DOS モードと DOS 6.x に関する警告
ご注意いただきたいが、このセクションで述べることの全てが非推奨である。 最近のオペレーティ ングシステムでは、ジオメトリやシリンダ数といったことに気を使う必要はない。 それでも、本当 に 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 は、以下の論理カラー名をサポートしている。 header 出力するパーティションテーブルのヘッダ。 help-title ヘルプセクションのタイトル。 warn 警告メッセージ。 welcome ウェルカムメッセージ。
作者
Karel Zak <kzak@redhat.com> Davidlohr Bueso <dave@gnu.org> 最初のバージョンを書いたのは、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 目に見える埋め文字 (padding characters) を使用する。LIBSMARTCOLS_DEBUG を有効にして おく必要がある。
関連項目
cfdisk(8), mkfs(8), partx(8), sfdisk(8)
入手方法
この fdisk コマンドは、util-linux パッケージの一部であり、以下の URL から入手でき る。https://www.kernel.org/pub/linux/utils/util-linux/