名前
fdisk - ディスクのパーティションテーブルを操作する書式
fdisk [options] device説明
fdisk は、パーティションテーブルの作成と操作を行う対話方式のプログラムである。 この fdisk は、GPT, MBR, Sun, SGI, BSD のパーティションテーブルを理解することができる。- [訳注]
- このマニュアルでは、「パーティションテーブル」と「ディスクラベル」の両方を、 ほぼ同じ意味で、混ぜて使っている。強いて言えば、Linux や DOS (GPT や MBR) については「パーティションテーブル」を使い、他の OS の場合も含めて、より一般的に言うときは「ディスクラベル」を使うようにしているらしいが、 必ずしもそうとは言えないところもある。
- [訳注]
- 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 制約」と訳せるかもしれない。
オプション
- -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) になるだろう。サイズ
"Last sector (最終セクタ)" という問い合わせに対しては、パーティションサイズをセクタ数でも +/-<size>{K,B,M,G,...} という表記でも指定できる。- [訳注]
- デフォルトでは、最終セクタ番号を指定するようになっている。 サイズを、バイト数ではなく、セクタの数で指定する +/-<セクタ数> という指定法もある。
スクリプトファイル
fdisk では、sfdisk 互換のスクリプトファイルを読み込むことができる ('I' コマンドを使用する)。スクリプトはメモリ中のパーティションテーブルに適用されるので、 そのパーティションテーブルに変更を加えてから、それをデバイスに書き出すことが可能である。 また逆に、現在メモリ中にあるディスクレイアウトを、'O' コマンドを使って、スクリプトファイルに書き出すこともできる。 こうしたスクリプトファイルは、cfdisk, sfdisk, fdisk などの libfdisk アプリケーションの間で互換性がある。より詳しいことは、 sfdisk をご覧いただきたい。ディスクラベル
GPT (GUID Partition Table)GPT
は、パーティションテーブルのレイアウトについての最近の規格である。
GPT
は、各パーティションに対して、64
ビットの論理ブロックアドレス、チェックサム、
UUID、それに、どんなパーティションかを示す名前を使用する。
また、パーティションの数に制限がない
(とは言え、パーティショニングツールの多くでは、パーティション数の上限をたいてい
128 にしている)。
GPT は、MBR
より常によい選択である。UEFI
のブートローダーを持つ最近のハードウェアでは、なおさらのことだ。
- [訳注]
- ここで言う「どんなパーティションかを示す名前」は、fdisk -l -o +Name を実行すると (存在すれば) 表示される、簡単なパーティションの説明のことだろう。"EFI system partition" とか "Basic data partition" のようなものである。 sfdisk の --part-label オプションの説明や、 「 入力の書式」セクションのフィールド名の説明もご覧になっていただきたい。
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
形式のディスクラベルは、8
個のパーティションを記述できる。そのうちの
3
番目は、ディスク全体を表すパーティションになるはずだ。
パーティションが
(スワップパーティションのように)
その最初のセクタを実際に使用する場合には、そのパーティションをシリンダ
0
から始めてはいけない。ディスクラベルを破壊することになるからである。
なお、 BSD ラベル
は、通常 DOS
パーティションの中にネストされる。
IRIX/SGI
形式のディスクラベルは、16
個のパーティションを記述できる。そのうちの
11
番目は、ボリューム全体を表すパーティションであり、
9
番目は、ボリュームヘッダと名付けられるはずだ。
このボリュームヘッダには、パーティションテーブルも含まれることになる。
すなわち、ブロック 0
から始まって、デフォルトでは
5
シリンダ分を占めるのである。ボリュームヘッダの残りのスペースは、
ヘッダのディレクトリエントリ用に使用することができる。
どのパーティションも、ボリュームヘッダと重なってはいけない。
また、ボリュームヘッダのパーティションタイプを変更してはならないし、
そこにファイルシステムを作ってもいけない。
パーティションテーブルがなくなってしまうからである。このタイプのラベルを使うのは、
IRIX/SGI マシンで Linux
を動かすときか、Linux
の元で IRIX/SGI
のディスクを扱うときだけにするべきである。
DOS モードと DOS 6.x に関する警告
ご注意いただきたいが、このセクションで述べることの全てが非推奨である。 最近のオペレーティングシステムでは、ジオメトリやシリンダ数といったことに気を使う必要はない。 それでも、本当に DOS 互換のパーティション分割をなさりたいのならば、fdisk のコマンドラインオプション '-c=dos -u=cylinders' を使用して DOS モードと cylinder 単位を有効にしなければならない。カラー表示
自動的なカラー表示は、 /etc/terminal-colors.d/fdisk.disable という空ファイルを作ることで無効にできる。- header
- 出力するパーティションテーブルのヘッダ。
- help-title
- ヘルプセクションのタイトル。
- warn
- 警告メッセージ。
- welcome
- ウェルカムメッセージ。
作者
Karel Zak <[email protected]>環境変数
- 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/February 2016 | util-linux |