CentOS7で仮想Disk拡張後のLVM論理ボリューム拡張設定

AWS仮想マシンアップロード後にEBS拡張に合わせてLVMの論理ボリューム(LV)の拡張をしたので作業メモ。

拡張前の状態

80GBのディスクがあるのに、全てのディスク領域が認識されず、14GBしか認識されていない。

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda            202:0    0   80G  0 disk 
├─xvda1         202:1    0  500M  0 part /boot
└─xvda2         202:2    0 79.5G  0 part 
  ├─centos-root 253:0    0 13.9G  0 lvm  /
  └─centos-swap 253:1    0  1.6G  0 lvm  [SWAP]

# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    14G  5.0G  9.0G   36% /
devtmpfs                  3.6G     0  3.6G    0% /dev
tmpfs                     3.5G     0  3.5G    0% /dev/shm
tmpfs                     3.5G  8.3M  3.5G    1% /run
tmpfs                     3.5G     0  3.5G    0% /sys/fs/cgroup
/dev/xvda1                497M  182M  316M   37% /boot
tmpfs                     707M     0  707M    0% /run/user/0

fdiskでパーティションを確認。一部しか割当たっていない状態。残りはフリー。

# fdisk -l /dev/xvda
Disk /dev/xvda: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0008e7d2

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/xvda1   *        2048     1026047      512000   83  Linux
/dev/xvda2         1026048   167772159    83373056   83  Linux

partedでパーティション切り直し

partedでパーティション切り直し。 (追記) 以下の手順ではセクタの単位がバラバラになっているますが、以下のコマンドでByte単位に固定した方が安全です。

(parted) unit B
# parted /dev/xvda
GNU Parted 3.1
/dev/xvda を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) p                                                                
モデル: Xen Virtual Block Device (xvd)
ディスク /dev/xvda: 85.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  525MB   524MB   primary  xfs               boot
 2    525MB   85.9GB  85.4GB  primary

一旦2のパーティションを削除

(parted) rm 2
エラー: パーティション 2 (/dev/xvda 上)

れましたが、カーネルに変更を伝えることができませんでした。おそらく、使用中だったのが原因だと思われます。そのため、古いパーティション情報がそのまま使われます。さらなる変更をする前に再起動してください。
(parted) p
モデル: Xen Virtual Block Device (xvd)
ディスク /dev/xvda: 85.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了   サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  525MB  524MB   primary  xfs               boot

全容量を使えるようにパーティションを再作成。

(parted) mkpart primary 525M 85.9G
(parted) p                                                                
モデル: Xen Virtual Block Device (xvd)
ディスク /dev/xvda: 85.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  525MB   524MB   primary  xfs               boot
 2    525MB   85.9GB  85.4GB  primary

作成したパーティションにLVMフラグをセット。

(parted) set 2 lvm on                                                     
(parted) p                                                                
モデル: Xen Virtual Block Device (xvd)
ディスク /dev/xvda: 85.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  525MB   524MB   primary  xfs               boot
 2    525MB   85.9GB  85.4GB  primary                    lvm

partedを抜ける。

(parted) q
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。

LVM拡張設定

pvresizeを実行。この時点ではリサイズされないがそのままreboot

# pvresize /dev/xvda2
  Physical volume "/dev/xvda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
# reboot 

再起動後PVとVGは自動で拡張されている。もし拡張されていなければ、pvscanとpvresizeコマンドを実行。

# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/xvda2 centos lvm2 a--  79.51g 64.04g
# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  centos   1   2   0 wz--n- 79.51g 64.04g

この時点でLVはまだ拡張されていない。

# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 13.87g                                                    
  swap centos -wi-ao----  1.60g  

LVを拡張する。

# lvextend -l +100%FREE /dev/centos/root
  Size of logical volume centos/root changed from 13.87 GiB (3550 extents) to 77.91 GiB (19944 extents).
  Logical volume root successfully resized.
# lvdisplay -C
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 77.91g                                                    
  swap centos -wi-ao----  1.60g     

最後にファイルシステムを拡張。この際にCentOS7から標準ファイルシステムがxfsになってコマンドがresize2fsからxfx_growfsに変わったので注意します。ファイルシステム確認したければ「df -T」コマンドで確認できます。

# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=908800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=3635200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=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 3635200 to 20422656

ファイルシステムが拡張されたことを確認。

# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    78G  5.0G   73G    7% /
devtmpfs                  3.6G     0  3.6G    0% /dev
tmpfs                     3.5G     0  3.5G    0% /dev/shm
tmpfs                     3.5G  8.3M  3.5G    1% /run
tmpfs                     3.5G     0  3.5G    0% /sys/fs/cgroup
/dev/xvda1                497M  182M  316M   37% /boot
tmpfs                     707M     0  707M    0% /run/user/0