AWSでLinuxインスタンス(Amazon Linux除く)を構築した際にルートパーティションをデフォルトサイズから変更しても反映されない仕様は相変わらずだけどパーティションテーブルが「GPT」だとさらにやっかいなことに。
仕事でRHEL6.9 64bit(HVM)のインスタンスを構築したら
df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 5.8G 2.2G 3.4G 39% / tmpfs 498M 0 498M 0% /dev/shm lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 32G 0 disk └─xvda1 202:1 0 6G 0 part /
インスタンス作成時に32GBを指定したにのにdfコマンドで確認すると5.8GBしか確保されてない…
lsblkコマンドで確認するとストレージとしては32GB認識されている。いつものパターン。
fdiskコマンドでパーティションをリサイズしようとすると
fdisk /dev/xvda WARNING: GPT (GUID Partition Table) detected on '/dev/xvda'! The util fdisk doesn't support GPT. Use GNU Parted. WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/xvda: 34.4 GB, 34359738368 bytes 255 heads, 63 sectors/track, 4177 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/xvda1 1 1306 10485759+ ee GPT <--GPTテーブルになってる Command (m for help):
パーティションがGPTで切られてるし…
GPTテーブルパーティションはfdiskコマンドで編集できないのでparted(gparted)を使うことになる。fdiskと違ってマウント中のパーティションのリサイズができないので手順は
1. 目的のEC2をシャットダウンしてリサイズするボリュームをデタッチ
2. ボリュームリサイズ用にEC2を1台起動。(Amazon LinuxでOK)
3. リサイズ用EC2を起動してリサイズするボリュームをアタッチ
4. アタッチしたボリュームをpartedコマンドで編集(リサイズ)してデタッチ
5. 元のEC2にリサイズしたボリュームをアタッチして起動
となる。かなーり、めんどくさい作業。で、実際にやってみるとこんな感じ。
1. ボリュームのデタッチ
(注)デタッチする前に元々アタッチされていたデバイス名を控えておくこと。同じデバイス名に戻さないとOSが起動できなくなる。
ルートデバイス: /dev/sda1
ブロックデバイス: /dev/sda1
2. ボリュームリサイズ用のEC2を起動(とりあえずAmazon Linux起動)
ボリュームのアタッチ前
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part /
自身のボリューム(8GB)のみを認識
3. ボリュームのアタッチ
ボリュームのアタッチ後
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 32G 0 disk └─xvdf1 202:81 0 6G 0 part
xvdfのボリューム(32GB)が認識されているのでこれを編集する。
4. アタッチしたボリュームをリサイズ
parted /dev/xvdf GNU Parted 2.1 Using /dev/xvdf Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit s (parted) print 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? Fix 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? Fix Model: Xen Virtual Block Device (xvd) Disk /dev/xvdf: 67108864s Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 2048s 12584959s 12582912s ext4 (parted) rm 1 (parted) mkpart Linux 2048s 100% (parted) print Model: Xen Virtual Block Device (xvd) Disk /dev/xvdf: 67108864s Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 2048s 67106815s 67104768s ext4 Linux (parted) set 1 boot on (parted) print Model: Xen Virtual Block Device (xvd) Disk /dev/xvdf: 67108864s Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 2048s 67106815s 67104768s ext4 Linux boot (parted) quit 確認 lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 32G 0 disk └─xvdf1 202:81 0 32G 0 part xvdf1のパーティションサイズが32GBに拡張されていることを確認 デタッチして確認 lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part /
デタッチされたのでxvdfのボリュームは認識されていない
5. 元のEC2にリサイズしたボリュームをアタッチして起動
*アタッチする際デフォルトのデバイス名と異なるので注意
EC2起動後はパーティションが拡張されていることを確認
df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 32G 2.2G 28G 8% / tmpfs 498M 0 498M 0% /dev/shm lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 32G 0 disk └─xvda1 202:1 0 32G 0 part /
ボリューム編集用に起動したEC2を削除して作業終了。