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

Linux で EBS ボリュームのストレージ領域を拡張する

ボリュームのデータを失うことなく、既存の EBS ボリュームのストレージスペースを拡大できます。これを行うには、データを大きいボリュームに移行し、ボリュームのファイルシステムを拡張して新たに使用可能になったスペースが認識されるようにします。新しいボリュームが正常に動作していることを確認したら、古いボリュームを削除できます。

Windows インスタンスのボリュームのストレージ領域を拡大する必要がある場合は、Windows インスタンスの Amazon EC2 ユーザーガイド の「ボリュームのストレージ領域を拡張する」を参照してください。

大きなボリュームを作成する場合、追加ストレージの料金が課金されます。詳細については、「Amazon EC2 料金表」ページの「Amazon Elastic Block Store」セクションを参照してください。

Note

ストレージのニーズにより、AWS で提供されるより大きな EBS ボリュームが必要になる場合は、RAID 0 を使用し、単一の論理ボリュームを複数の物理ボリュームにストライプ化します。詳細については、「Linux での RAID 設定」を参照してください。

拡大したボリュームにデータを移行する

ストレージ領域を拡張するには、インスタンスを停止する必要があります。インスタンスを停止して再度起動するときは、以下に注意してください:

  • インスタンスにインスタンスストア (一時) ボリュームをアタッチしている場合、それらのボリューム上のすべてのデータが消去されます。したがって、インスタンスストアボリューム上に保持したいデータがある場合は、永続的ストレージにバックアップしてください。詳細については、「Amazon EC2 インスタンスストア」および「Amazon EBS ボリューム」を参照してください。

  • インスタンスが VPC で実行されていてパブリック IPv4 アドレスがある場合には、このアドレスは解放されて、新しいパブリック IPv4 アドレスになります。インスタンスのプライベート IPv4 アドレスと Elastic IP アドレスは保持されます。

  • インスタンスを EC2-Classic で実行している場合、新しいパブリック IP アドレスとプライベート IPv4 アドレスが与えられ、インスタンスに関連付けられている Elastic IP アドレスの関連付けが解除されます。インスタンスを再起動したら、Elastic IP アドレスを再度関連付ける必要があります。

  • インスタンスが Auto Scaling グループにある場合、Auto Scaling サービスはインスタンスを異常と判断して停止し、代わりのインスタンスを起動することがあります。 これを防止するには、一時的にグループの Auto Scaling プロセスを停止できます。詳細については、Auto Scaling ユーザーガイド の「Auto Scaling プロセスの停止と再開」を参照してください。

拡大したボリュームにデータを移行するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで [Instances] を選択し、拡大するボリュームを持つインスタンスを特定します。

  3. インスタンス ID とアベイラビリティーゾーンをメモしておきます。この情報は、この手順で後述する、新しいボリュームのインスタンスへのアタッチ時に使用します。

  4. インスタンスの [Shutdown Behavior] 値が [Terminate] ではなく、[Stop] に設定されていることを確認します。

    1. インスタンスを選択します。

    2. コンテキストメニュー (右クリック) から [Instance Settings] を選択し、[Change Shutdown Behavior] を選択します。

    3. [Shutdown behavior] を [Terminate] に設定した場合、[Stop] を選択し、[Apply] を選択します。

      [Shutdown Behavior] が既に [Stop] に設定されている場合は、[Cancel] を選択します。

  5. インスタンスを停止します。インスタンスの停止方法の詳細については、「インスタンスの停止と起動」を参照してください。

    Warning

    インスタンスを停止すると、インスタンスストアボリューム上のデータは消去されます。したがって、インスタンスストアボリューム上に維持したいデータがある場合は、必ず永続的ストレージにバックアップしてください。

  6. 拡張するボリュームのスナップショットを作成します。

    1. ナビゲーションペインで [Volumes] を選択し、拡大するボリュームを特定します。

    2. コンテキストメニュー (右クリック) で拡大するボリュームを選択し、[Create Snapshot] を選択します。

    3. [Name] および [Description] フィールドに情報を入力し、[Yes, Create] を選択します。

  7. スナップショットから新しいボリュームを作成します。

    1. ナビゲーションペインで、[Snapshots] を選択します。

    2. 先ほど作成したスナップショットのステータスが [completed] に設定されたら、スナップショットを選択し、コンテキストメニュー (右クリック) で [Create Volume] を選択します。

    3. [Create Volume] ダイアログボックスで、目的のボリュームタイプを選択し、新しいボリュームサイズを入力します。また、インスタンスのアベイラビリティーゾーンに合わせて [Availability Zone] も設定する必要があります。[Yes, Create] を選択します。

      Important

      インスタンスと一致した [Availability Zone] を設定しなかった場合、新しいボリュームをインスタンスにアタッチできません。

  8. 古いボリュームをデタッチします。

    1. ナビゲーションペインで [Volumes] を選択し、リストから古いボリュームを選択します。[Attachment Information] フィールドのデバイス名を書き留めます。この情報は、この手順で後述する、新しいボリュームのインスタンスへのアタッチ時に使用します。情報は次の形式で表示されます。

      i-xxxxxxxxxxxxxxxxx (instance_name):device_name
    2. コンテキストメニュー (右クリック) から古いボリュームを選択し、[Detach Volume] を選択します。

    3. [Detach Volume] ダイアログボックスで、[Yes, Force] を選択します。ボリュームのデタッチには数分かかることがあります。

  9. 新たに拡張したボリュームをアタッチします。

    1. ナビゲーションペインの [Volumes] を選択します。

    2. コンテキストメニュー (右クリック) から新しいボリュームを選択し、[Attach Volume] を選択します。

    3. [Instance] フィールドにインスタンスの名前または ID を入力し、インスタンスを選択します。

    4. Step 8.a から取得した同じデバイス名を入力して [Yes, Attach] を選択します。新しいボリュームは、上で書き留めた正確な場所にアタッチすることが重要です (/dev/sda1 など)。

  10. インスタンスを再起動します。

    1. ナビゲーションペインで [Instances] を選択し、再起動するインスタンスを選択します。

    2. コンテキストメニュー (右クリック) のインスタンスの [Instance State] を選択し、[Start] を選択します。

    3. [Start Instances] ダイアログボックスで、[はい、開始します] を選択します。インスタンスが起動に失敗し、拡張したボリュームがルートボリュームの場合、元のボリュームと同じデバイス名 (/dev/sda1 など) を使用して、拡張したボリュームをアタッチしていることを確認してください。

インスタンスが起動したら、ファイルシステムのサイズを確認して、拡大したボリュームスペースをインスタンスが認識しているかどうか表示できます。Linux では、df -h コマンドを使用してファイルシステムのサイズを確認します。

[ec2-user ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            7.9G  943M  6.9G  12% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm

新しく拡張したボリュームがサイズに反映されていない場合、デバイスのファイルシステムを拡張して、インスタンスで新しいスペースを使用できるようにする必要があります。詳細については、「Linux ファイルシステムを拡張する」を参照してください。

Note

ボリュームのサイズを変更した後は、ストレージコストが発生しないようにするため、上記の手順で作成したスナップショットを削除する必要があります。

Linux ファイルシステムを拡張する

Linux では、ファイルシステム固有のコマンドを使用して、ファイルシステムのサイズを、新しいボリュームの拡大したサイズに変更します。このコマンドは、拡張するボリュームがルートボリュームである場合にも機能します。ext2ext3、および ext4 ファイルシステムの場合、このコマンドは resize2fs です。XFS ファイルシステムの場合、このコマンドは xfs_growfs です。その他のファイルシステムの場合、ファイルシステムの拡張については、これらのファイルシステムに関する特定のドキュメントを参照してください。

使用しているファイルシステムが不明の場合は、file -s コマンドを使用して、デバイスのファイルシステムデータをリストできます。次の例は、Linux ext4 ファイルシステムと SGI XFS ファイルシステムを示しています。

[ec2-user ~]$ sudo file -s /dev/xvd*
/dev/xvda1: Linux rev 1.0 ext4 filesystem data ...
/dev/xvdf:  SGI XFS filesystem data ...

Note

拡張するボリュームがパーティション分割されている場合は、ファイルシステムのサイズを変更する前に、パーティションのサイズを拡大する必要があります。詳細については、「Linux パーティションを拡張する」を参照してください。

ボリュームのパーティションのサイズ変更が必要かどうかを確認するには

  • インスタンスにアタッチされたブロックデバイスを一覧表示するには、lsblk コマンドを使用します。以下の例は、/dev/xvda/dev/xvdb/dev/xvdf という 3 つのボリュームを示しています。

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

    ルートボリュームである /dev/xvda1 は、/dev/xvda のパーティションです。どちらもサイズが 30 GiB であることに注意してください。この場合、パーティションはデバイスの領域をすべて占有するので、サイズを変更する必要はありません。

    ボリューム /dev/xvdb は、パーティション分割されていないので、サイズを変更する必要はありません。

    ただし、/dev/xvdf1 は、35 GiB のデバイスに含まれる 8 GiB のパーティションであり、このボリュームには他にパーティションがありません。この場合、ボリュームの残りの領域を使用するには、パーティションをサイズ変更する必要があります。詳細については、「Linux パーティションを拡張する」を参照してください。パーティションのサイズを変更した後、次の手順に従って、パーティションのすべての領域を占有するようにファイルシステムを拡張できます。

Linux ファイルシステムを拡張するには

  1. SSH クライアントを使用して Linux インスタンスにログインします。Linux インスタンスへの接続の詳細については、「SSH を使用した Linux インスタンスへの接続」を参照してください。

  2. df -h コマンドを使用して、既存のファイルシステムディスク領域の使用状況をレポートします。この例では、/dev/xvda1 デバイスは 70 GiB に既に拡張されていますが、ext4 ファイルシステムは単に元の 8 GiB のサイズとして表示されています。また、/dev/xvdf デバイスは 100 GiB に拡張されていますが、XFS ファイルシステムは単に元の 1 GiB のサイズとして表示されています。

    [ec2-user ~]$ df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/xvda1            7.9G  943M  6.9G  12% /
    tmpfs                 1.9G     0  1.9G   0% /dev/shm
    /dev/xvdf            1014M   33M  982M   4% /mnt
  3. ファイルシステム固有のコマンドを使用して、ファイルシステムのサイズをボリュームの新しいサイズに変更します。Linux ext2ext3、または ext4 ファイルシステムの場合は、次のコマンドを使用して、拡張するデバイスの名前に置き換えます。

    [ec2-user ~]$ sudo resize2fs /dev/xvda1
    resize2fs 1.42.3 (14-May-2012)
    Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 5
    Performing an on-line resize of /dev/xvda1 to 18350080 (4k) blocks.
    The filesystem on /dev/xvda1 is now 18350080 blocks long.

    XFS ファイルシステムの場合、まず XFS ユーザースペースツールをインストールします。

    [ec2-user ~]$ sudo yum install xfsprogs

    その後、次のコマンドを使用して、ファイルシステムのマウントポイントに置き換える必要があります (XFS ファイルシステムのサイズを変更するには、マウントする必要があります)。

    [ec2-user ~]$ sudo xfs_growfs -d /mnt
    meta-data=/dev/xvdf              isize=256    agcount=4, agsize=65536 blks
             =                       sectsz=512   attr=2
    data     =                       bsize=4096   blocks=262144, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0
    log      =internal               bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 262144 to 26214400

    Note

    xfsctl failed: Cannot allocate memory エラーを受け取った場合、インスタンスの Linux カーネルの更新が必要になることがあります。詳細については、特定のオペレーティングシステムのドキュメントを参照してください。

    "The filesystem is already nnnnnnn blocks long. Nothing to do!" というエラーが発生した場合は、「Linux パーティションを拡張する」を参照してください。

  4. df -h コマンドを使用して、既存のファイルシステムディスク領域の使用状況をレポートします。この時点で、ext4 ファイルシステムについては 70 GiB、XFS ファイルシステムについては 100 GiB の完全な容量が示されます。

    # df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/xvda1             69G  951M   68G   2% /
    tmpfs                 1.9G     0  1.9G   0% /dev/shm
    /dev/xvdf             100G   45M  100G   1% /mnt

古いボリュームを削除する

インスタンスで新しいボリュームをアタッチし、拡張したら、必要なくなった古いボリュームを削除できます。

古いボリュームを削除するには

  1. Amazon EC2 コンソールのナビゲーションペインで [Volumes] を選択し、削除するボリュームを選択します。

  2. コンテキストメニュー (右クリック) から [Delete Volume] を選択します。

  3. [Delete Volume] ダイアログボックスで、[Yes, Delete] を選択します。