AWS re:Postを使用することにより、以下に同意したことになります 利用規約

EBS ボリューム上の MBR パーティションの 2 TiB の制限を回避するために、EC2 Ubuntu インスタンスのデフォルトの MBR パーティションスキームを GPT に変換するにはどうすればよいですか?

所要時間4分
0

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで Ubuntu 16.04、18.04、または 20.04 が実行されています。MBR パーティションには 2 TiB の制限があります。Amazon Elastic Block Store (Amazon EBS) ボリュームのデフォルトの MBR パーティションスキームを GPT パーティションスキームに変換して、制限をバイパスしたいと考えています。

解決方法

警告: インスタンスを停止して起動する前に、次の点を考慮してください。

  • インスタンスがインスタンスストアを利用している場合、またはデータを含むインスタンスストアボリュームがインスタンスにある場合、インスタンスを停止するとデータが失われます。詳細については、「インスタンスのルートデバイスタイプの判別」を参照してください。
  • インスタンスが Amazon EC2 Auto Scaling グループの一部である場合、インスタンスを停止するとインスタンスが終了することがあります。Amazon EMR、AWS CloudFormation、または AWS Elastic Beanstalk を使用してインスタンスを起動した場合、インスタンスは AWS Auto Scaling グループの一部である可能性があります。この場合、インスタンスの終了は Auto Scaling グループのインスタンススケールイン保護設定によって異なります。インスタンスが Auto Scaling グループの一部である場合は、解決のためのステップを開始する前に、Auto Scaling グループからインスタンスを一時的に削除します。
  • インスタンスを停止および再開すると、インスタンスのパブリック IP アドレスが変更されます。インスタンスに外部トラフィックをルーティングするときは、パブリック IP アドレスではなく Elastic IP アドレスを使用することがベストプラクティスです。Amazon Route 53 を使用している場合は、パブリック IP が変更されたときに Route 53 DNS レコードを更新する必要がある場合があります。
  • インスタンスのシャットダウン動作が [Terminate] (終了) に設定されている場合、インスタンスは停止時に終了します。この問題を回避するには、インスタンスのシャットダウン動作を変更します。

注: 解決のためのステップを開始する前に、EBS ボリュームのバックアップを作成するのがベストプラクティスです。

1.    Amazon EC2 コンソールを開きます。

2.    Ubuntu を実行している Amazon マシンイメージ (AMI) からインスタンスを起動します。

3.    最初のインスタンスと同じアベイラビリティーゾーンで、3 TiB のルートボリュームを持つ同じ Ubuntu AMI から 2 番目のインスタンスを起動します。

4.    3 TiB のルートボリュームを持つインスタンスを停止します。

5.    停止したインスタンスから ルートボリューム (/dev/xvda または /dev/sda1) をデタッチします。その後、ステップ 2 で作成したインスタンスに /dev/sdf としてアタッチします。

6.    SSH を使用して、(ステップ 2 で作成した) 実行中のインスタンスに接続します。

7.    lsblk コマンドを使用して、/dev/sdf のルートパーティションを表示します。次の例に示すように、/dev/sdf のルートパーティションのサイズは 2 TiB のみです。

# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
(snip)
xvdf    202:80    0   3T  0 disk 
└─xvdf1 202:81    0   2T  0 part 
(snip)

: Nitro インスタンスタイプでは、ブロックデバイス名は次の例のようになります: /dev/nvme1n1

8.    gdisk ツールを使用して、パーティションテーブルを MBR から GPT に変換します。

: gdisk に間違ったコマンドを入力した場合は、q を使用して変更を保存せずに gdisk を終了するか、または Ctrl+C を押してください。

# sudo gdisk /dev/xvdf
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
  MBR: MBR only
 
    BSD: not present
  APM: not present
  GPT: not present

***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY
    DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!

9.    プロンプトで次のコマンドを入力して、エキスパートモードを開始し、セクターアラインメント値を設定します。

注: セクターアラインメント値はデフォルトの 8 から 1 に変更してください。8 バイトのアラインメントを使用する場合、GPT パーティションの作成時に問題が発生することがあります。

Command (? for help): x                                            
Expert command (? for help): l                                     
Enter the sector alignment value (1-65536, default = 2048): 1      
Expert command (? for help): m

10.    プロンプトで次のコマンドを入力して GPT パーティションを作成します。最後のセクターのプロンプトで「enter」と入力して、デフォルトのセクター番号 2047 を使用します。

Command (? for help): n                                                                                                        
Partition number (2-128, default 2): 128                                                                                
First sector (34-6291455966, default = 4294967296) or {+-}size{KMGTP}: 34                     
Last sector (34-2047, default = 2047) or {+-}size{KMGTP}:                                                  
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef02                                                     
Changed type of partition to 'BIOS boot partition'

注意: 前の例では、ef02 は BIOS ブートパーティション番号です。

11.    プロンプトで次のコマンドを入力して、ルートパーティションを削除します。

Command (? for help): d                                                                                                         
Partition number (1-128): 1

12.    プロンプトで次のコマンドを入力して、ルートパーティションが 3 TiB になるように再作成します。[First sector] (最初のセクター)、[Last sector] (最後のセクター)、および [Hex code or GUID] (16 進コードまたは GUID) プロンプトで、enter と入力してデフォルト設定を使用します。

Command (? for help): n                                                                                                         
Partition number (1-128, default 1): 1                                                                                     
First sector (2048-6291455966, default = 2048) or {+-}size{KMGTP}:                                  
Last sector (2048-6291455966, default = 6291455966) or {+-}size{KMGTP}:                       
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):                                                             
Changed type of partition to 'Linux filesystem'

13.    プロンプトで次のコマンドを入力して、GPT パーティションテーブルを保存します。

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.

lsblk コマンドを実行して、新しいボリューム情報を表示します。

# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvdf    202:80   0   3T  0 disk 
└─xvdf1 202:81   0   3T  0 part

14.    fsck ツールを使用して、デバイス /dev/xvdf1 のファイルシステムが正しいことを確認します。fsck ツールの詳細については、Ubuntu ウェブサイトの「fsck」を参照してください。

: e2fsck コマンドに -y スイッチを追加すると、すべての質問に対する回答が [yes] (はい) であると仮定されます。

# sudo e2fsck -f /dev/xvdf1
e2fsck 1.42.13 (17-May-2015)
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
cloudimg-rootfs: 57524/262144000 files (0.0% non-contiguous), 16648272/536870655 blocks

15.    resize コマンドを実行して、ファイルシステムのサイズを 3 TiB に拡張します。

注: ファイルシステムのサイズ変更には 10~20 秒かかる場合があります。

# sudo resize2fs /dev/xvdf1
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/xvdf1 to 786431739 (4k) blocks.
The filesystem on /dev/xvdf1 is now 786431739 (4k) blocks long.

16.    デバイス /dev/xvdf1 に Grub をインストールし、次のコマンドを使用して設定します。

Ubuntu 16.04 または 18.04:

sudo mount /dev/xvdf1 /mnt 
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /dev /mnt/dev
sudo chroot /mnt /bin/bash
grub-install /dev/xvdf
grub-mkdevicemap
update-grub
exit
sudo umount -l /mnt/dev
sudo umount -l /mnt/sys
sudo umount -l /mnt/proc
sudo umount -l /mnt

Ubuntu 20.04:

sudo mount /dev/xvdf1 /mnt 
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /dev /mnt/dev
sudo chroot /mnt /bin/bash
grub-install /dev/xvdf
grub-mkdevicemap
echo "GRUB_DISABLE_OS_PROBER=true" > /etc/default/grub
echo "GRUB_FORCE_PARTUUID=" > /etc/default/grub.d/40-force-partuuid.cfg
update-grub
exit
sudo umount -l /mnt/dev
sudo umount -l /mnt/sys
sudo umount -l /mnt/proc
sudo umount -l /mnt

17.    実行中のインスタンスからボリューム /dev/xvdf を接続解除します。

18.    ボリューム /dev/xvdf/dev/xvda または /dev/sda1 として元のインスタンスにアタッチします。

19.    SSH を使用して元のインスタンスを起動します。

20.    lsblk コマンドを実行して、元のインスタンスのルートボリュームに 3 TiB のスペースがあることを確認します。


関連情報

EBS ボリュームのサイズと設定における制約

AWS公式
AWS公式更新しました 3年前