名前
sfdisk - ディスクパーティションテーブルの表示や操作を行う書式
sfdisk [options] device [-N partition-number]説明
sfdisk は、ブロックデバイスのパーティション操作を行うスクリプト指向のツールである。 端末上で実行されたときは (標準入力が端末を指しているときは)、対話モードになる。- [訳注]
- util-linux の fdisk グループのマニュアルでは、「パーティションテーブル」と「ディスクラベル」の両方を、 ほぼ同じ意味で、混ぜて使っている。強いて言えば、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 制約」と訳せるかもしれない。 なお、上のパラグラフでは、「パーティションの開始点に相対的なサイズを指定する」ということが、 わかりにくいかもしれない。 たとえば、開始点を +100M といった形で指定することで、現在の開始点より 100MiB 後方という指示が可能なのである。 --move-data オプションの用例の最初のコマンドがその一例である。
flock /dev/sdc sfdisk /dev/sdc
コマンド
以下のコマンドはどれか一つしか使えない (訳注: ただし、 -l と -V の組み合わせは例外である)。- [-N partition-number] device
- sfdisk のデフォルトのコマンドは (訳注: 要するに以下にあるような特定のコマンドが指定されていないときのデフォルトの動作は)、 device にどんなパーティションを作成するかの具体的な指示を標準入力から読み込んで、 その指示に従ってパーティションテーブルを作成することである。 入力の書式がどんなものになるかについては、後述の説明をお読みになっていただきたい。 標準入力が端末の場合は、 sfdisk は対話セッションを開始する。 オプションの -N が指定されている場合は、 partition-number で指示されたパーティションに変更が適用される。 そのパーティションのフィールドでも、具体的な指定のないフィールドは、変更されない。 なお、 -N を用いて、未使用のパーティションを指定することもできる。 たとえば、MBR には、いつでも 4 個のパーティションを登録できるが、 現在使用しているパーティションは、それより少ないかもしれない。 その場合、 sfdisk は、-N で指定された未使用のパーティションについては、 パーティションテーブルから取得されるデフォルトの値に従い、 プログラムに埋め込まれたデフォルトは使用しない。 --append も参照していただきたい。
- [訳注]
- 対話セッションを行わず、いわゆる
sfdisk
互換スクリプトの読み込みも行わない場合の、sfdisk
の典型的、かつ単純な使用法は、次のように指示を標準入力から読み込ませることである。
# sfdisk /dev/sda <<END > 2048,300GiB,L > ,20GiB,S > , > END
上記の指示は、/dev/sda に 3 個のパーティションを作っている。まず、2048 セクタを開始オフセットとして 300 GiB の Linux filesystem (L)、/dev/sda1 を作り、続いて開始オフセットの決定を sfdisk にまかせて、20 GiB の Linux swap (S)、/dev/sda2 を作る。 そして最後に残りのすべてを /dev/sda3 にしている (タイプは、自動的にデフォルトの Linux filesystem になる)。 指示の書式についての詳しいことは、「 入力の書式」セクションをご覧いただきたい。
- -A, --activate device [partition-number...]
- 指定されたパーティション (複数指定可) のブート可能フラグを ON に切り替え、指定されなかったすべてのパーティションのブート可能フラグを OFF にする。すべてのパーティションのブート可能フラグを OFF にしてしまうには、パーティションナンバーの代わりに、特別な引き数の '-' を使えばよい。 このアクティベーションコマンドは、MBR と PMBR (Protective MBR) に対してのみサポートされている。GPT のディスクラベルが検出された場合、sfdisk は警告メッセージを表示し、自動的に PMBR にブートフラグを記入する。 partition-number が指定されていない場合は、 ブート可能フラグの付いたパーティションをリストする。
- --delete device [partition-number...]
- すべての、または指定されたパーティションを削除する。
- -d, --dump device
- sfdisk の入力に使用できるフォーマットでデバイスのパーティションをダンプする。 「 パーティションテーブルのバックアップ」セクションを参照。
- -g, --show-geometry [device...]
- すべての、または指定されたデバイスのジオメトリをリストする。 後方互換のために、非推奨のオプション --show-pt-geometry も、このコマンドと同じ意味を持っている。
- -J, --json device
- JSON フォーマットでデバイスのパーティションをダンプする。 sfdisk は、JSON フォーマットを入力には使えないことに注意していただきたい。
- -l, --list [device...]
- すべての、または指定されたデバイスのパーティションをリストする。 このコマンドは、 --verify と一緒に使うことができる。
- -F, --list-free [device...]
- すべての、または指定されたデバイスの、パーティションが切られていない未使用領域をリストする。
- --part-attrs device partition-number [attributes]
- GPT パーティションの属性ビット (attribute bits) を変更する。 attributes の指定がない場合は、現在のパーティション設定を表示する。引き数 attributes は、コンマまたはスペースで区切ったビットのリストだ。 現在サポートされている属性ビットは、 RequiredPartition, NoBlockIOProtocol, LegacyBIOSBootable、それに 48 から 63 までの範囲の GUID-specific bits である。たとえば、"RequiredPartition,50,51" という文字列は、3 個のビットを設定する。
- --part-label device partition-number [label]
- GPT パーティションの名前 (ラベル) を変更する。 label の指定がない場合は、現在のパーティションラベルを表示する。 (訳注: この label は、下記「 フィールド名のある書式」で name に対して指定している値と同じものであり、パーティションの簡単な説明である。)
- --part-type device partition-number [type]
- パーティションのタイプを変更する。type の指定がない場合は、現在のパーティションタイプを表示する。引き数 type は、MBR では 16 進数であり、GPT では GUID である。後方互換のために、オプション -c と --id も、このコマンドと同じ意味を持っている。
- --part-uuid device partition-number [uuid]
- GPT パーティションの UUID を変更する。 uuid の指定がない場合は、現在のパーティション UUID を表示する。
- -r, --reorder device
- パーティションの番号を付け直す。すなわち、パーティションの番号を開始オフセットの順番にする。
- -s, --show-size [device...]
- すべての、または指定されたデバイスのサイズを、1024 バイト単位で一覧表示する。このコマンドは「非推奨」である。 blockdev(8) の使用をお勧めする。
- -T, --list-types
- 現在のディスクラベル、または --label オプションで指定されたディスクラベル (訳注: dos とか gpt とか) でサポートされているパーティションのタイプ (type) のすべてを表示する。 (訳注: 訳者の手元では、 --label gpt と指定しないかぎり、gpt のディスクでも、dos のパーティションタイプ一覧が表示される。)
- -V, --verify [device...]
- パーティションテーブルとパーティションが、正しく見えるかどうかを検査する。
オプション
- -a, --append
- 新しいパーティションテーブルを作成しない。 既存のパーティションテーブルに対する指定されたパーティションの追加のみを行う。
- -b, --backup
- パーティショニングを始める前に、 現在のパーティションテーブルが格納されているセクタをバックアップする。 デフォルトのバックアップファイル名は、~/sfdisk-<device>-<offset>.bak である。別の名前を使いたいなら、オプション -O, --backup-file の説明をご覧になるとよい。
- --color[=when]
- 出力をカラー表示にする。指定が任意の引き数 when には、auto, never, always が使える。引き数 when を省略すると、デフォルトの auto になる。カラー表示は無効にすることもできる。 プログラムに埋め込まれた現在のデフォルトが有効か無効かを知りたければ、 --help の出力を見ればよい。「 カラー表示」セクションも参照していただきたい。
- -f, --force
- 整合性チェックを一切行わないようにする。
- --Linux
- 非推奨なオプションであり、無視される。Linux (などの現代のオペレーティングシステム) で問題なく使えるパーティションの作成は、デフォルトである。
- -n, --no-act
- デバイスに書き込むこと以外のすべてを行う。
- --no-reread
- デバイスが使用中かどうかを、パーティションテーブルの再読み込みを行う ioctl によってチェックしない。
- --no-tell-kernel
- パーティションの変更についてカーネルに通知しない。 使用中のディスクのパーティションを変更する場合、このオプションを --no-reread と併せて使用することをお勧めする。もちろん、変更したパーティションは、使用 (たとえば、マウントなどを) するべきではない。
- -O, --backup-file path
- バックアップファイルの名前をデフォルトから変更する。 ファイル名の末尾に、デバイス名とオフセットが必ず追加されることに注意していただきたい。
- --move-data[=path]
- たとえば、パーティションの先頭をディスクの別の位置に移動するといった場合に、
パーティションの再配置をした後で、データを移動する。
パーティションのサイズは、操作の前後で同じでなければならない。
新旧の位置は、オーバーラップしていても構わない。このオプションは、
-N
オプションを必須とする。特定の
1
パーティションに対してのみ、処理を行うためである。
指定が任意の引き数
path
はログファイルの名前である。
このログファイルには、パーティションのデータに関するすべての
read/wite
操作の情報が入っている。
path に "@default"
という単語を指定すると、
sfdisk
はログファイルとして
~/sfdisk-<devname>.move
を使うことになる。このログは、v2.35
以来、作成がユーザの任意になった。
この操作は危険であり、アトミックでもないことに注意していただきたい。
だから、
データのバックアップを取ることを忘れてはいけない!
--move-use-fsync もご覧いただきたい。 次の例では、最初のコマンドは、第 1 パーティションの前に 100MiB の空き領域を作成し、第 1 パーティションのデータ (ファイルシステムなど) を後方に移動している。2 番目のコマンドは、今作った空き領域に (オフセット 2048 から) 新パーティションを作っている。 最後のコマンドは、ディスク上の順番と一致するように、 パーティションの番号を付け直している (元の sdc1 が sdc2 になる)。
- --move-use-fsync
- --move-data でデータを新しい場所に移動する際、書き込みをするたびにシステムコール fsync を使用する。
- -o, --output list
- 出力にどの項目 (columns) を表示するかを指定する。 使用できる全項目のリストを知るには、 --help を使用すればよい。 デフォルトの項目リストを拡張することもできる。 list を +list の形で指定すればよいのだ (たとえば、 -o +UUID のように)。
- -q, --quiet
- 追加情報のメッセージを出さないようにする。
- -u, --unit S
- 非推奨オプションである。使用できる単位がセクタのみになる。 このオプションは、 --show-size コマンドを使用しているときは、サポートされない。
- -X, --label type
- ディスクラベルの型を指定する (たとえば、 dos, gpt, ...)。 このオプションが指定されていない場合、 sfdisk は、デバイスにすでに存在しているディスクラベルをデフォルトとして使用するが、 デバイスにまだディスクラベルが存在しないときは、デフォルトのラベル型を dos にする。こうしたデフォルトや現在のラベルは、スクリプトのヘッダ行 "label: <name>" で上書きすることができる。この --label オプションは、空のディスクラベルを (訳注: 別の言い方をすると、パーティションテーブルの型だけが指定されて、パーティションは 1 個も存在しないパーティションテーブルを) sfdisk に無理矢理作らせるようなことはしない (以下の「 空のディスクラベル」セクションを参照)。
- -Y, --label-nested type
- ネストしたディスクラベルを強引に編集する。 プライマリーなディスクラベルはすでに存在していなければならない。 このオプションを使えば、たとえば、GPT のデバイス上で hybrid/protective MBR を編集することができるようになる。
- -w, --wipe when
- デバイスからファイルシステムや RAID やパーティションテーブルのシグナチャーを消去する (訳注: 前から存在する古いシグナチャーを消去するということだろう)。衝突 (collision) が起きないようにするためである。引き数の when には、auto, never, always が使える。このオプションが指定されない場合のデフォルトは、 auto であり、その場合シグナチャーが消去されるのは、原則として対話モードのときだけだが、 古いパーティションテーブル・シグナチャーだけは例外で、引き数の when が never でないかぎり、新しいパーティションテーブルが作成される前に、必ず消去される。 いずれの場合でも、新しいパーティションテーブルが作成される前に、検出されたシグナチャーが、 警告メッセージとして通知される。 wipefs(8) コマンドの説明もご覧いただきたい。
- -W, --wipe-partitions when
- 新たに作成するパーティションからファイルシステムや RAID やパーティションテーブルのシグナチャーを消去する (訳注: 前から存在する古いシグナチャーを消去するということだろう)。衝突 (collision) が起きないようにするためである。引き数の when には、auto, never, always が使える。このオプションが指定されない場合のデフォルトは、 auto であり、その場合シグナチャーが消去されるのは、対話モードのときだけで、 それもユーザが承認した後である。 いずれの場合でも、新しいパーティションが作成された後で、検出されたシグナチャーが、 警告メッセージとして通知される。 wipefs(8) コマンドの説明もご覧いただきたい。
- -v, --version
- バージョン情報を表示して終了する。
- -h, --help
- ヘルプテキストを表示して終了する。
入力の書式
sfdisk は、2 種類の入力書式と、両方に共通するヘッダ行をサポートしている。指定が任意のヘッダ行では、パーティションテーブル全体に適用される情報を指定する。
ヘッダ行の書式は、次のようになる。
<name>: <value>
現在のところ、認識されるヘッダは以下のものである。
気を付けてほしいが、ヘッダ行が使用できるのは、入力中で最初のパーティションを指定する前だけである。
- unit
- パーティション分割で使う単位を指定する。サポートされている単位は、 sectors (セクタ数) だけである。
- label
- パーティションテーブルの型 (partition table type) を指定する。たとえば、 dos とか gpt とかである。(訳注: このマニュアルの中で partition table type は、disk label type とも呼ばれている。)
- label-id
- パーティションテーブルの識別名を指定する。識別名は、MBR では (前に 0x の付いた) 16 進数であり、GPT では UUID である。(訳注: sfdisk -l の出力では、Disk identifier と表示される。)
- first-lba
- GPT パーティションで使用できる最初のセクタを指定する。
- last-lba
- GPT パーティションで使用できる最後のセクタを指定する。
- table-length
- GPT パーティションの最大数を指定する。
- grain
- パーティションの開始・終了位置を整えるとき、計算に使用する最小のサイズをバイト単位で指定する。 デフォルトは 1MiB であり、このデフォルトの使用を強くお勧めする。 よくわかっていないなら、この変数を変更してはいけない。
- sector-size
- セクタのサイズを指定する。このヘッダはもっぱら参考用であり、sfdisk が新しいパーティションテーブルを作成するときに、使われるわけではない。そのときは、 実際のデバイスに固有な値が常に使用され、ダンプによって取得したセクタサイズは無視される (訳注: sector-size が --dump によって取得されるのは、v2.35 以降である)。
- L
- Linux; MBR では 83 を意味し、GPT では 0FC63DAF-8483-4772-8E79-3D69D8477DE4 を意味する。
- S
- swap 領域; MBR では 82 を意味し、GPT では 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F を意味する。
- E
- 拡張パーティション; MBR では 5 を意味する。
- H
- ホームパーティション; GPT では 933AC7E1-2EB4-4F13-B844-0E14E2AEF915 を意味する。
- X
- linux 拡張パーティション; MBR では 85 を意味する。
- U
- EFI システムパーティション; MBR では EF を意味し、GPT では C12A7328-F81F-11D2-BA4B-00A0C93EC93B を意味する。
- R
- Linux RAID; MBR では FD を意味し、GPT では A19D880F-05FC-4D3B-A006-743F0F84911E を意味する。
- V
- LVM; MBR では 8E を意味し、GPT では E6D6D379-F507-44C2-A23C-238F2A3DF928 を意味する。
この書式は、フィールド名なしの書式とくらべて、より読みやすく、堅牢であり、
拡張性もあって、追加の情報
(たとえば、UUID)
を指定することも可能になる。
こちらの書式を使用して、作成するスクリプトをより読みやすくしておくことをお勧めする。
[ device :] name[=value], ...
device
フィールドの指定は任意である。
sfdisk
は、パーティション番号をこのデバイス名から取り出す。
そこで、これを使用すれば、パーティションを任意の順番で指定することが可能になる。この機能は、
主に --dump
で使用されている。パーティション番号に確信がない場合は、
device
フィールドを使用してはいけない。
value
は、引用符で囲むことができる
(たとえば、name="This is partition
name"
のように)。現在のところ、次のフィールドがサポートされている。
- start=number
- デフォルトは、位置やサイズをデバイスの I/O リミットに合わせて整えたセクタの、まだ割り当てられていない最初のもの。 ただし、最初のパーティションのデフォルトの開始オフセットは 1 MiB である。指定するオフセットには、乗数を表す接尾辞を続けることができ (KiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB)、その場合、数値はバイト単位のオフセットと解釈される。
- size=number
- パーティションのサイズをセクタ数で指定する。数値には乗数を表す接尾辞を続けることができる (KiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB)。 その場合、数値はバイト単位のサイズと解釈され、サイズがデバイスの I/O リミットに合わせて整えられる。
- bootable
- パーティションにブート可能の印を付ける。
- attrs=string
- パーティションの属性。普通は、GPT パーティションの属性ビットである。 GPT-bits ストリングのフォーマットについては、 --part-attrs の説明が詳しい。
- uuid=string
- GPT パーティションの UUID。
- name=string
- GPT パーティションの名前 (訳注: "EFI system partition", "Basic data partition" のようなパーティションの簡単な説明)。
- type=code
- MBR パーティションでは (0x を前に付けない) 16 進数。GPT パーティションでは GUID。 フィールド名なしの書式と同様、短縮表記も使える (訳注: フィールド名のある書式で短縮表記が使えるのは、v2.35 以降のようだ)。後方互換のために、 Id= フィールドも同じ意味を持っている。
空のディスクラベル
sfdisk は、デフォルトではパーティションの存在しないパーティションテーブルを作成しない。 デフォルトでは、パーティションを記述する行が、スクリプト中に存在しなければならないのだ。 そこで、空のパーティションテーブルを作りたかったら、それを明示的に要求しなければならない。 すなわち、スクリプトヘッダ行の "label: <name>" を使用し、パーティションを記述する行を一切指定しないようにするのである。例を挙げよう。パーティションテーブルのバックアップ
使用しているデバイスのレイアウトを保存しておくのは、よいことである。 sfdisk は、2 種類の方法をサポートしている。dd if=~/sfdisk-sda-0x00000200.bak of=/dev/sda \ seek=$((0x00000200)) bs=1 conv=notrunc
カラー表示
自動的なカラー表示は、 /etc/terminal-colors.d/sfdisk.disable という空ファイルを作ることで無効にできる。- header
- 出力するテーブルのヘッダ
- warn
- 警告メッセージ
- welcome
- ウェルカムメッセージ
注意
バージョン 2.26 以来、 sfdisk は、カーネルにパーティションテーブルを再読込させる -R や --re-read オプションを提供していない。代わりに blockdev --rereadpt を使用していただきたい。 バージョン 2.26 以来、 sfdisk は、以下のオプションも提供していない。 --DOS, --IBM, --DOS-extended, --unhide, --show-extended, --cylinders, --heads, --sectors, --inside-outer, --not-inside-outer。環境変数
- SFDISK_DEBUG=all
- sfdisk デバッグ出力を有効にする。
- LIBFDISK_DEBUG=all
- libfdisk デバッグ出力を有効にする。
- LIBBLKID_DEBUG=all
- libblkid デバッグ出力を有効にする。
- LIBSMARTCOLS_DEBUG=all
- libsmartcols デバッグ出力を有効にする。
関連項目
fdisk(8), cfdisk(8), parted(8), partprobe(8), partx(8)作者
Karel Zak <[email protected]> 現在の sfdisk の実装は、Andries E. Brouwer による最初の sfdisk を元にしている。入手方法
この sfdisk コマンドは、util-linux パッケージの一部であり、以下の URL から入手できる。https://www.kernel.org/pub/linux/utils/util-linux/June 2015 | util-linux |