fdisk

提供: ArchWiki
2018年2月6日 (火) 23:42時点におけるKusakata.bot (トーク | 投稿記録)による版 (文字列「http://bugs.debian.org/」を「https://bugs.debian.org/」に置換)
ナビゲーションに移動 検索に移動

関連記事

util-linux fdisk はダイアログで操作するコマンドラインユーティリティで、ハードディスク上のパーティションテーブルやパーティションを作成・編集することができます。ハードディスクはパーティションに分割され、その分割情報はパーティションテーブルに記述されます。Arch Linux をインストールするにはパーティションが必要です。

この記事では fdisk とその派生である sfdiskcfdisk ユーティリティだけでなく、類似の機能を持った gdisk, sgdisk, cgdisk ユーティリティについても解説します。

インストール

fdisk と派生ユーティリティを使用するには、util-linux パッケージが必要です (base グループに含まれています)。gdisk と派生ユーティリティを使用したい場合、gptfdisk パッケージをインストールしてください。

パーティションの確認

デバイス上のパーティションテーブルとパーティションを確認するには、以下を実行します (デバイスの名前 /dev/sda は適当に置き換えてください):

# fdisk -l /dev/sda
ノート: デバイスを指定しなかった場合、fdisk/proc/partitions の全てのパーティションを表示します。

あるいは gdisk の場合:

# gdisk -l /dev/sda

バックアップとリストア

ハードディスクを変更する前に、ドライブのパーティションテーブルとパーティションスキームをバックアップすると良いでしょう。また、バックアップを使うことで同じパーティションレイアウトを複数のドライブにコピーすることもできます。Master Boot Record#バックアップとリストアも参照。

dd を使う

MBR はディスクの頭512バイトに保存されています。MBR は3つの構成部位から成ります:

  1. 最初の446バイトにはブートローダーが含まれます。
  2. 次の64バイトにはパーティションテーブルが含まれます (16バイトごとに4エントリ、1つのエントリに1つのプライマリパーティション)。
  3. 最後の2バイトには識別子が含まれます。

MBR を mbr.img ファイルに保存するには:

# dd if=/dev/sdX of=/path/to/mbr_file.img bs=512 count=1

リストアするには (注意: 以下の操作で既存のパーティションテーブルが破壊されディスク上の全てのデータにアクセスできなくなる可能性があります):

# dd if=/path/to/mbr_file.img of=/dev/sdX

ブートローダーだけをリストアして、プライマリパーティションテーブルのエントリはそのままにしたい場合、MBR の最初の446バイトだけをリストアしてください:

# dd if=/path/to/mbr_file.img of=/dev/sdX bs=446 count=1

パーティションテーブルだけをリストアするには、次のコマンドを使用します:

# dd if=/path/to/mbr_file.img of=/dev/sdX bs=1 skip=446 count=64

完全な dd ディスクイメージから MBR を取得することもできます:

# dd if=/path/to/disk.img of=/path/to/mbr_file.img bs=512 count=1

sfdisk を使う

GPT と MBR のどちらでも sfdisk--dump オプションを使ってデバイスのパーティションレイアウトをファイルに保存できます。/dev/sda デバイスを保存するには以下のコマンドを実行:

# sfdisk -d /dev/sda > sda.dump

1GB の ext4 パーティションが存在する場合、ファイルは以下のようになります:

sda.dump
label: gpt
label-id: AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 1048576

/dev/sda1 : start=2048, size=1048576, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=BBF1CD36-9262-463E-A4FB-81E32C12BDE7

レイアウトをリストアするには次を実行:

# sfdisk /dev/sda < sda.dump

sgdisk を使う

sgdisk を使うことで保護 MBR、メイン GPT ヘッダ、バックアップ GPT ヘッダ、そしてパーティションテーブルのコピーからなるバイナリバックアップを作成できます:

# sgdisk -b=sgdisk-sda.bak

次を実行することでバックアップをリストアできます:

# sgdisk -l=sgdisk-sda.bak

現在のデバイス (例: /dev/sda) のパーティションレイアウトを別のドライブ (例: /dev/sdc) に複製したい場合、次を実行:

# sgdisk -R=/dev/sdc /dev/sda

両方のドライブが同じコンピュータに接続されている場合、GUID をランダム化する必要があります:

# sgdisk -G /dev/sdc

パーティションテーブルとパーティションの作成

パーティショニングするときはまずパーティションテーブルを作成します。その後、望ましいパーティション形態にあわせてパーティションを作成します。MBRGPT のどちらを使用するかについてはパーティションテーブルを見てください。

最初に、パーティションテーブルとレイアウトをバックアップすることを推奨します。

以下のセクションでは gdiskfdisk を使用してパーティションテーブルとパーティションを作成する方法を説明しています。違いについては必要なときに記載しています。

パーティションの操作の開始

fdisk または gdisk を起動して、新しいテーブルの作成に進んで下さい。

fdisk

MBR を使う場合、パーティションテーブルを編集するためのユーティリティは fdisk と呼ばれています。最近のバージョンの fdisk はデフォルトの表示単位にシリンダーを使用する古いシステムのサポートや、MS-DOS との互換性をデフォルトで廃止しています。最新の fdisk は自動的に全てのパーティションを2048セクタ (1024 KiB) にアライメントをするため、SSD メーカーによって使用されている EBS サイズ全てで問題なく整列されます。つまりデフォルト設定で正しいアライメントが行われます。

昔の fdisk は、デフォルトの表示単位にシリンダーを使っていて、SSD のアライメントと干渉する MS-DOS との互換性も残っていました。そのため、2008-2009年あたりのインターネットのガイドを調べたら、大げさに書かれているのが見て取れると思います。最新の fdisk では、物事はもっとシンプルになり、そのことはこの記事にも反映されています。

root でドライブを指定して fdisk を起動してください。/dev/sda の例:

# fdisk /dev/sda

fdisk ダイアログが開いてコマンドを入力することができます。

gdisk

GPT を使う場合、パーティションテーブルを編集するためのユーティリティは gdisk です。curses ベースの cgdisk を使うこともできますが、操作は以下と異なります。cgdisk の使用方法は cgdisk(8) を参照してください。

gdisk は殆ど全ての SSD と互換性のある 2048 セクター (または 1024KiB) ブロックサイズベースの自動パーティションアライメントができます。GNU parted も GPT をサポートしていますが、パーティションのアライニングについてはあまりユーザーフレンドリーとは言えません

gdisk を使うときは、変更・編集したいデバイスの名前を指定してプログラムを起動します。/dev/sda の例:

# gdisk /dev/sda

新しいテーブルの作成

新しい MBR パーティションテーブルを作成して既存のパーティションデータを全て消去するには、プロンプトに o と入力します。既存のテーブルを使用する場合は次に進んで下さい。

警告: データが含まれているディスクに新しいパーティションテーブルを作成すると、ディスク上の全てのデータが消去されます。注意して実行してください。

パーティションの作成

n コマンドで新しいパーティションを作成します。パーティションタイプ (fdisk のみ)、パーティションの番号、開始セクタ、終末セクタを入力します。

fdisk の場合、パーティションタイプを指定するとき、p でプライマリパーティションを作成し e で拡張パーティションを作成します。プライマリパーティションは4つまでしか作成できません。

開始・終末セクタはセクタ番号、あるいはキビバイト (K), メビバイト (M), ギビバイト (G), テビバイト (T), ペビバイト (P) で絶対的に指定することができます。例えば、40M でディスクの最初から 40MiB の位置が指定できます。また、数字に +- 記号を付けることで開始位置・終了位置を相対的に指定することができます。例えば +2G ならデフォルトの開始セクタから 2GiB の位置が、-200M なら最後のセクタから 200MiB の位置が指定されます。何も入力しないで Enter キーを押すと、開始セクタの一番広いブロックから終末セクタと同じブロックの終末までが指定されます。

パーティションのタイプ id を選択します。大抵の場合はデフォルトの Linux filesystem で問題ありません。l (fdisk) や L (gdisk) を押すことでコードの一覧を表示できます。

ヒント:
  • EFI システムパーティションのコードは gdisk の場合は ef00fdisk の場合は EFI System に設定する必要があります。
  • GRUB をディスクにインストールするとき、BIOS boot partition が必要です。gdisk ではコードが ef02fdisk では BIOS boot のパーティションになります。
  • スワップパーティションを作成するときは systemd によって自動マウントされるように gdisk では 8200fdisk では Linux swap を使うことを推奨します。

上記の手順を繰り返して全てのパーティションを作成してください。

ディスクに変更を書き込む

ディスクにテーブルを書き込んで終了するには w コマンドを使います。

ヒントとテクニック

MBR と GPT の変換

MBR パーティションテーブルを GPT に変換するには、sgdisk ツールを使います:

# sgdisk -g /dev/sda

GPT を MBR に変換するときは m オプションを使います (5つ以上のパーティションを GPT から MBR に変換することはできないので注意してください):

# sgdisk -m /dev/sda

デバイスから起動するには fdisk で起動フラグを設定する必要があります。

GUID Partition Table#MBR から GPT への変換も参照。

パーティションの並び替え

パーティションの合間に新しいパーティションを作成したり、パーティションを削除した場合に、以下のコマンドでパーティションを並び替えられます。

MBR の場合:

# sfdisk -r /dev/sda

GPT の場合:

# sgdisk -s /dev/sda

永続的なブロックデバイスの命名を使っていない場合、パーティションを並び替えたら /etc/fstab/etc/crypttab ファイルを修正する必要があります。

GPT ヘッダのリカバリ

メイン GPT ヘッダあるいはバックアップ GPT ヘッダが破損した場合、gdisk を使うことでどちらか片方からもう片方を復元できます (/dev/sda は適当なディスクに置き換えてください):

# gdisk /dev/sda

リカバリの r を選択して、以下のどちらかを選択してください:

  • b: バックアップ GPT ヘッダを使う (メイン GPT ヘッダを再生成)。
  • d: メイン GPT ヘッダを使う (バックアップ GPT ヘッダを再生成)。

リカバリが完了したらディスクにテーブルを書き込んで w コマンドで終了してください。

参照