メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Linux パーティションを拡張する

一部の Amazon EC2 ルートボリュームやスナップショットから復元されたボリュームには、ファイルシステムおよびデータを実際に保持するパーティションが含まれています。ボリュームをコンテナと考えれば、パーティションはボリューム内のもう 1 つのコンテナであり、データはパーティション上に存在します。ボリュームのサイズを拡大しても、パーティションは拡大されません。拡大したボリュームを活用するには、パーティションを新しいサイズに拡張する必要があります。

注記

スナップショットから復元したすべてのボリュームがパーティション分割されるわけではないので、この手順は、お使いのボリュームに適用されないことがあります。ボリュームのファイルシステムのサイズを使用できる最大の容量に変更する必要があります。サイズを変更する必要があるパーティションがボリューム内にあるかどうか不明な場合は、「ボリュームのパーティションのサイズ変更が必要かどうかを確認するには」で詳細を参照してください。

拡張するパーティションがルートパーティションではない場合、単にこのパーティションをアンマウントし、インスタンス自体からパーティションのサイズを変更することができます。サイズを変更する必要のあるパーティションがインスタンスのルートパーティションである場合、実行中のインスタンスのルートパーティションをアンマウントすることはできないため、プロセスはより複雑になります。セカンダリインスタンスと呼ばれる別のインスタンスに対して、以下の手順を実行する必要があります。

重要

以下の手順は Amazon Linux に関する説明であり、Amazon Linux でテスト済みです。その他のツールセットやツールバージョンによるディストリビューションは、異なる動作をする場合があります。

拡張するために Linux ルートパーティションを準備する

インスタンスのルートパーティションを拡張するために、次のいくつかのステップを実行する必要があります。拡張する必要があるパーティションがルートパーティションではない場合、この手順を行う必要はありません。

拡張するために Linux ルートパーティションを準備するには

  1. プライマリインスタンスを実行している場合は停止します。実行中のインスタンスでは、これ以降の手順を実行できません。詳細については、「インスタンスの停止と起動」を参照してください。

  2. ボリュームの整合性を確認します。 スナップショットによって選択されたファイルシステムの破損により、復元されたルートボリュームがブート不能になる可能性があります。

  3. ボリュームのスナップショットを取得します。以下の手順では、データが容易に破損または消失する可能性があります。新しいスナップショットがある場合、失敗してもいつでもやり直すことができ、データは安全に保たれます。詳細については、「Amazon EBS スナップショットの作成」を参照してください。

  4. ボリュームがアタッチされたデバイス名を記録します。この値は、インスタンスの詳細ペインの [Root device] フィールドで確認できます。通常、この値は /dev/sda1 または /dev/xvda です。

  5. ボリュームをプライマリインスタンスからデタッチします。詳細については、「インスタンスからの Amazon EBS ボリュームのデタッチ」を参照してください。

  6. ボリュームを、同じアベイラビリティーゾーン内の別の (セカンダリ) インスタンスにアタッチします。詳細については、「インスタンスへの Amazon EBS ボリュームのアタッチ」を参照してください。EBS ボリュームが暗号化されている場合、Amazon EBS 暗号化 をサポートするセカンダリインスタンスを使用する必要があります。それ以外の場合、この手順では t2.micro インスタンスを使用します。詳細については、「サポートされるインスタンスタイプ」を参照してください。セカンダリ インスタンスを既に持っている場合、それを起動する必要があります。詳細については、「インスタンスの作成」を参照してください。

    重要

    セカンダリインスタンスは、ボリュームのアタッチ時に実行されている必要があります。複数のルートボリュームがアタッチされている間は、セカンダリインスタンスを再起動しないでください。複数のルートボリュームがアタッチされたインスタンスを起動すると、インスタンスが間違ったボリュームで起動する可能性があります。

  7. SSH を使用してセカンダリインスタンスにログインします。詳細については、「Linux インスタンスへの接続」を参照してください。次の手順に進みます。

parted を使用して Linux パーティションを拡張する

parted ユーティリティは、ほとんどの Linux ディストリビューションで使用できるパーティション編集ツールです。MBR パーティションテーブルと GPT パーティションテーブルの両方を作成し編集することができます。parted の一部のバージョン (バージョン 2.1 より前) は GPT パーティションテーブルのサポートが限定的で、parted のそのバージョンを使用してブートボリュームを変更した場合、ブート時に問題が発生することがあります。parted のバージョンは、parted --version コマンドを使用して確認できます。

GPT パーティション形式のデバイスにあるパーティションを拡張する場合は、代わりに gdisk ユーティリティを使用してください。ボリュームで使用されているディスクラベルタイプが不明な場合は、sudo fdisk -l コマンドを使用して確認できます。詳細については、「gdisk を使用して Linux パーティションを拡張するには」を参照してください。

parted を使用して Linux パーティションを拡張するには

拡張する必要のあるパーティションがルートパーティションである場合は、まず「拡張するために Linux ルートパーティションを準備するには」の手順を実行してください。

  1. 拡張するパーティションを含むデバイスを特定します。lsblk コマンドを使用して、インスタンスにアタッチされたすべてのデバイスおよびパーティションをリストします。

    Copy
    [ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvdf 202:80 0 100G 0 disk └─xvdf1 202:81 0 8G 0 part /mnt xvda1 202:1 0 30G 0 disk /

    この例では、xvdf デバイスに 100 GiB の使用可能なストレージがあり、8 GiB のパーティションが含まれています。

  2. パーティションがマウントされている場合はアンマウントします。lsblk コマンドから MOUNTPOINT の値を指定して、umount コマンドを実行します。この例で、パーティションの MOUNTPOINT 値は、/mnt.

    Copy
    [ec2-user ~]$ sudo umount /mnt

    です。

  3. ボリュームのスナップショットを取得します (前の手順で取得しなかった場合)。以下の手順では、データが容易に破損または消失する可能性があります。新しいスナップショットがある場合、失敗してもいつでもやり直すことができ、データは安全に保たれます。詳細については、「Amazon EBS スナップショットの作成」を参照してください。

  4. デバイス (デバイス上のパーティションではなく) に対して parted コマンドを実行します。/dev/ プレフィックスを、lsblk が出力する名前に必ず追加してください。

    Copy
    [ec2-user ~]$ sudo parted /dev/xvdf GNU Parted 2.1 Using /dev/xvdf Welcome to GNU Parted! Type 'help' to view a list of commands.
  5. parted 測定単位をセクターに変更します。

    Copy
    (parted) unit s
  6. print コマンドを実行して、デバイス上のパーティションをリストします。特定のパーティションテーブルタイプでは、拡大したボリュームのサイズに合わせてパーティションテーブルを修正するように要求される場合があります。既存のパーティションテーブルの修正に関する質問にはすべて「Ignore」で答えます。新しいテーブルは後で作成します。

    Copy
    (parted) print
    1. 次のメッセージが表示された場合は、バックアップ GPT の場所が変更されないように、「Ignore」と入力します。

      Error: The backup GPT table is not at the end of the disk, as it should be.  This might mean that another operating
      system believes the disk is smaller.  Fix, by moving the backup to the end (and removing the old backup)?
      Fix/Ignore/Cancel? Ignore
    2. 次のメッセージが表示された場合は、ドライブ上の容量を維持するために、ここでも「Ignore」と入力します。

      Warning: Not all of the space available to /dev/xvdf appears to be used, you can fix the GPT to use all of the
      space (an extra 46137344 blocks) or continue with the current setting?
      Fix/Ignore? Ignore
  7. ディスクの合計サイズ、パーティションテーブルタイプ、パーティションの番号、パーティションの開始点、フラグ (boot など) について、出力を調べます。gpt パーティションテーブルの場合は、パーティションの名前に留意します。msdos パーティションテーブルの場合は、Type フィールド (primary または extended) に留意します。これらの値は、この後のステップで使用します。

    以下に、gpt パーティションテーブルの例を示します。

    Model: Xen Virtual Block Device (xvd)
    Disk /dev/xvdf: 209715200s
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    
    Number  Start  End        Size       File system  Name                 Flags
    128     2048s  4095s      2048s                   BIOS Boot Partition  bios_grub
     1      4096s  16777182s  16773087s  ext4         Linux

    以下に、msdos パーティションテーブルの例を示します。

    Model: Xen Virtual Block Device (xvd)
    Disk /dev/xvdg: 104857600s
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start  End        Size       Type     File system  Flags
     1      2048s  35649535s  35647488s  primary  ext3
  8. 前のステップでの番号 (1) を使用して、パーティションのパーティションエントリを削除します。

    Copy
    (parted) rm 1
  9. ボリュームの最後まで拡張された新しいパーティションを作成します。

    (gpt パーティションテーブルの例では) 上記のパーティション 1 の開始点と名前に留意します。gpt の例では、開始点は 4096s、名前は Linux です。パーティション 1 の開始点、名前、および (使用可能なすべてのスペースを使用するために) 100% を指定して、mkpart コマンドを実行します。

    Copy
    (parted) mkpart Linux 4096s 100%

    (msdos パーティションテーブルの例では) 上記のパーティション 1 の開始点とパーティションタイプに留意します。msdos の例では、開始点は 2048s、パーティションタイプは primary です。プライマリパーティションタイプ、パーティション 1 の開始点、および (使用可能なすべてのスペースを使用するために) 100% を指定して、mkpart コマンドを実行します。

    Copy
    (parted) mkpart primary 2048s 100%
  10. print コマンドを再度実行して、パーティションを確認します。

    (gpt パーティションテーブルの例では)

    Copy
    (parted) print Model: Xen Virtual Block Device (xvd) Disk /dev/xvdf: 209715200s Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 128 2048s 4095s 2048s BIOS Boot Partition bios_grub 1 4096s 209713151s 209709056s ext4 Linux

    (msdos パーティションテーブルの例では)

    Copy
    (parted) print Model: Xen Virtual Block Device (xvd) Disk /dev/xvdg: 104857600s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 2048s 104857599s 104855552s primary ext3
  11. 以前のパーティションにあったフラグが、拡張したパーティションにも存在していることを確認します。場合によっては、起動時に boot フラグが失われることがあります。拡張時にパーティションからフラグが失われた場合は、以下のコマンドを使ってフラグを追加します。パーティション番号とフラグ名は実際の値に置き換えます。たとえば、以下のコマンドは boot フラグをパーティション 1 に追加します。

    Copy
    (parted) set 1 boot on

    再び print コマンドを実行して、変更結果を確認できます。

  12. quit コマンドを実行して、parted を終了します。

    Copy
    (parted) quit

    注記

    パーティションを移動し、パーティションを追加したため、parted は、/etc/fstab を更新する必要があることを警告する場合があります。この更新は、パーティション番号が変更された場合にのみ必要です。

  13. ファイルシステムを確認して、エラーがないことを確認します (これは、ファイルシステムを拡張する前に行う必要があります)。先の print コマンドで表示されたファイルシステムタイプを書き留めます。ファイルシステムタイプに応じて、以下のコマンドのうち 1 つを選択します。ここに挙げられていないファイルシステムを使用している場合は、そのファイルシステムのドキュメントを参照して、正しいチェックコマンドを判断してください。

    (ext3 または ext4 ファイルシステムの場合)

    Copy
    [ec2-user ~]$ sudo e2fsck -f /dev/xvdf1 e2fsck 1.42.3 (14-May-2012) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /: 31568/524288 files (0.4% non-contiguous), 266685/2096635 blocks

    (xfs ファイルシステムの場合)

    Copy
    [ec2-user ~]$ sudo xfs_repair /dev/xvdf1 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 Phase 5 - rebuild AG headers and trees... - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... done
  14. 次のステップは、拡張したパーティションが現在のインスタンスに属するかどうか、またはこのパーティションが別のインスタンスのルートパーティションであるかどうかによって異なります。

gdisk を使用して Linux パーティションを拡張する

gdisk ユーティリティ (GPT fdisk と呼ばれることもあります) は、パーティションテーブルをメニュー形式で作成し編集するテキストベースのツールです。一部のディストリビューションでは、parted コマンドよりも GPT パーティションテーブルのサポートが優れています。一般的な多くの Linux ディストリビューション (Amazon Linux や Ubuntu など) には、デフォルトで gdisk が用意されています。使用しているディストリビューションに gdisk コマンドが用意されていない場合は、Obtaining GPT fdisk で入手方法を知ることができます。多くの場合、Amazon Linux インスタンスを起動してセカンダリインスタンスとして使用する方が、gdisk コマンドが既に用意されているため簡単です。

gdisk を使用して Linux パーティションを拡張するには

拡張する必要のあるパーティションがルートパーティションである場合は、まず「拡張するために Linux ルートパーティションを準備するには」の手順を実行してください。

  1. 拡張するパーティションを含むデバイスを特定します。lsblk コマンドを使用して、インスタンスにアタッチされたすべてのデバイスおよびパーティションをリストします。

    Copy
    [ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO MOUNTPOINT xvdf 202:80 0 100G 0 xvdf1 202:81 0 9.9G 0 /mnt xvda1 202:1 0 30G 0 /

    この例では、xvdf デバイスに 100 GiB の使用可能なストレージがあり、9.9 GiB のパーティションが含まれています。

  2. パーティションがマウントされている場合はアンマウントします。lsblk コマンドから MOUNTPOINT の値を指定して、umount コマンドを実行します。この例で、パーティションの MOUNTPOINT 値は、/mnt.

    Copy
    [ec2-user ~]$ sudo umount /mnt

    です。

  3. ボリュームのスナップショットを取得します (前の手順で取得しなかった場合)。以下の手順では、データが容易に破損または消失する可能性があります。新しいスナップショットがある場合、失敗してもいつでもやり直すことができ、データは安全に保たれます。詳細については、「Amazon EBS スナップショットの作成」を参照してください。

  4. デバイス (デバイス上のパーティションではなく) に対して gdisk コマンドを実行します。/dev/ プレフィックスを、lsblk が出力する名前に必ず追加してください。

    Copy
    [ec2-user ~]$ sudo gdisk /dev/xvdf gdisk /dev/xvdf GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT.
  5. p コマンドを実行して、デバイスのパーティションテーブルを出力します。

  6. ディスク識別子、パーティション番号、開始セクタ、パーティションのコード、およびパーティション名について、出力を確認します。ボリュームに複数のパーティションがある場合は、各パーティションに注意します。

    Command (? for help): p
    Disk /dev/xvdf: 209715200 sectors, 100.0 GiB
    Logical sector size: 512 bytes
    Disk identifier (GUID): 947F4655-F3BF-4A1F-8203-000000000000
    Partition table holds up to 128 entries
    First usable sector is 34, last usable sector is 20705246
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 2108 sectors (1.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1            2048        20705152   9.9 GiB     EF00  lxroot

    上の例の場合、ディスク識別子は 947F4655-F3BF-4A1F-8203-000000000000、パーティション番号は 1、開始セクタは 2048、コードは EF00、名前は lxroot です。値は異なります。

  7. 既存のパーティションテーブルは、もともとサイズの小さいボリューム用に作成されているため、サイズの大きいボリューム用に新しいパーティションテーブルを作成する必要があります。o コマンドを実行して、新しい空のパーティションテーブルを作成します。

    Command (? for help): o
    This option deletes all partitions and creates a new protective MBR.
    Proceed? (Y/N): Y
  8. n コマンドを使用して、デバイス上の各パーティションに新しいパーティションエントリを作成します。

    • ボリュームにパーティションが 1 つしかない場合は、プロンプトごとに、以前に記録した値を入力します。最終セクタ値については、デフォルト値を使用して、ボリューム全体のサイズに拡張します。

      Command (? for help): n
      Partition number (1-128, default 1): 1
      First sector (34-209715166, default = 2048) or {+-}size{KMGTP}: 2048
      Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: 209715166
      Current type is 'Linux filesystem'
      Hex code or GUID (L to show codes, Enter = 8300): EF00
      Changed type of partition to 'EFI System'
    • ボリュームに複数のパーティションがある場合は、BIOS のブートパーティションとメインのデータパーティションがある可能性があります。以前に記録した値を使用して BIOS のブートパーティション用に新しいパーティションエントリを作成します。以前に記録した値を使用してメインのデータパーティション用にもう 1 つ新しいパーティションエントリを作成します。ただし、最終セクタ値については、デフォルト値を使用して、ボリューム全体のサイズに拡張します。

      Command (? for help): n
      Partition number (1-128, default 1): 1
      First sector (34-209715166, default = 2048) or {+-}size{KMGTP}:  2048
      Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: 4095
      Current type is 'Linux filesystem'
      Hex code or GUID (L to show codes, Enter = 8300): EF02
      Changed type of partition to 'BIOS boot partition'
      
      Command (? for help): n
      Partition number (2-128, default 2): 2
      First sector (34-209715166, default = 4096) or {+-}size{KMGTP}: 4096
      Last sector (4096-209715166, default = 209715166) or {+-}size{KMGTP}: 209715166
      Current type is 'Linux filesystem'
      Hex code or GUID (L to show codes, Enter = 8300): 0700
      Changed type of partition to 'Microsoft basic data'
  9. c コマンドを使用して、各パーティションの名前を以前のパーティションの名前に変更します。パーティションに名前が付いていない場合は、単に「Enter」と入力します。

    Command (? for help): c
    Using 1
    Enter name: lxroot
  10. x コマンドを使用して、エキスパートコマンドメニューを入力します。

  11. g コマンドを使用して、ディスク識別子を元の値に変更します。

    Expert command (? for help): g
    Enter the disk's unique GUID ('R' to randomize): 947F4655-F3BF-4A1F-8203-A7B30C2A4425
    The new disk GUID is 947F4655-F3BF-4A1F-8203-A7B30C2A4425
  12. w コマンドを使用して、変更内容をデバイスに書き込み終了します。

    Expert command (? for help): w
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/xvdf.
    The operation has completed successfully.
  13. ファイルシステムを確認して、エラーがないことを確認します (これは、ファイルシステムを拡張する前に行う必要があります)。

    1. 次のコマンドを使用して、ファイルシステムタイプを確認します。パラメータは拡張したパーティションに置き換えます (ボリュームに複数のパーティションがある場合は /dev/xvdf2 になることがあります)。

      Copy
      [ec2-user ~]$ sudo file -sL /dev/xvdf1
    2. ファイルシステムタイプに応じて、以下のコマンドのうち 1 つを選択します。ここに挙げられていないファイルシステムを使用している場合は、そのファイルシステムのドキュメントを参照して、正しいチェックコマンドを判断してください。

      (ext3 または ext4 ファイルシステムの場合)

      Copy
      [ec2-user ~]$ sudo e2fsck -f /dev/xvdf1 e2fsck 1.42.3 (14-May-2012) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /: 31568/524288 files (0.4% non-contiguous), 266685/2096635 blocks

      (xfs ファイルシステムの場合)

      注記

      XFS ファイルシステムを使用するには、xfsprogs パッケージをインストールする必要があります。Amazon Linux インスタンスに XFS のサポートを追加するには、次のコマンドを使用してください。

      Copy
      [ec2-user ~]$ sudo yum install -y xfsprogs
      Copy
      [ec2-user ~]$ sudo xfs_repair /dev/xvdf1 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 Phase 5 - rebuild AG headers and trees... - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... done
  14. 次のステップは、拡張したパーティションが現在のインスタンスに属するかどうか、またはこのパーティションが別のインスタンスのルートパーティションであるかどうかによって異なります。

拡張したパーティションを元のインスタンスに戻す

別のインスタンスのルートパーティションを拡張した場合は、この手順に従って元のインスタンスにボリュームを戻します。

拡張したルートパーティションをその元のインスタンスに戻すには

  1. 拡張したパーティションを、そのセカンダリインスタンスからデタッチします。詳細については、「インスタンスからの Amazon EBS ボリュームのデタッチ」を参照してください。

  2. preparation procedureステップ 4 で特定したデバイス名を使用して、ボリュームをプライマリインスタンスに再アタッチします。詳細については、「インスタンスへの Amazon EBS ボリュームのアタッチ」を参照してください。

  3. プライマリインスタンスを起動します。詳細については、「インスタンスの停止と起動」を参照してください。

  4. (オプション) パーティションを拡張するためだけにセカンダリインスタンスを起動した場合は、インスタンスを終了して課金を停止できます。詳細については、「インスタンスの削除」を参照してください。

  5. プライマリインスタンスに接続し、ボリュームサイズ変更後の Linux ファイルシステムの拡張 の手順を行って、新たに使用可能になったスペースを使用するようにファイルシステムを拡張します。

このファイルシステムの拡張が終了したら、インスタンスから、目的のパーティションサイズを持つ新しいインスタンスを起動するために使用できる AMI を作成できます。詳細については、「Amazon マシンイメージ (AMI) 」を参照してください。