EC2に複数EBSを束ねたLVMボリュームを作成し,後からEBS追加して容量拡張する方法
サマリ
以下の手順でLVMボリュームの作成,追加ができる.
$ sudo apt-get install lvm2 # PV作成 $ sudo pvcreate /dev/xvdf $ sudo pvcreate /dev/xvdg # VG作成 $ sudo vgcreate vg1 /dev/xvdf /dev/xvdg # LV作成 $ sudo lvcreate -L 1.99G -n lv1 vg1 # ファイルシステム構築 & mount $ sudo mkfs -t ext4 /dev/vg1/lv1 $ sudo mount /dev/vg1/lv1 /data # 追加ディスクのPV作成 $ sudo pvcreate /dev/xvdh # VGに追加PVを追加 $ sudo vgextend vg1 /dev/xvdh # LVを拡張 $ sudo lvextend -l +100%FREE /dev/vg1/lv1 # ファイルシステムを拡張 $ sudo resize2fs /dev/vg1/lv1
事前準備
EC2セットアップ
EC2にDebian (Wheezy 7.5)のインスタンスを立てる. 今回はami-b53570b4を利用. 1GBのEBSを3つ用意. 最初に2つで組んだ後,もう一つを追加する.
- /dev/sdf
- /dev/sdg
- /dev/sdh
必要なパッケージをインストール
$ sudo apt-get update $ sudo apt-get install lvm2
LVMボリュームの作成手順
物理ボリューム(PV)作成
$ sudo pvcreate /dev/xvdf Writing physical volume data to disk "/dev/xvdf" Physical volume "/dev/xvdf" successfully created $ sudo pvcreate /dev/xvdg Writing physical volume data to disk "/dev/xvdg" Physical volume "/dev/xvdg" successfully created $ sudo pvscan PV /dev/xvdf lvm2 [1.00 GiB] PV /dev/xvdg lvm2 [1.00 GiB] Total: 2 [2.00 GiB] / in use: 0 [0 ] / in no VG: 2 [2.00 GiB]
ボリュームグループ(VG)作成
$ sudo vgcreate vg1 /dev/xvdf /dev/xvdg Volume group "vg1" successfully created $ sudo vgs VG #PV #LV #SN Attr VSize VFree vg1 2 0 0 wz--n- 1.99g 1.99g
論理ボリューム(LV)作成
$ sudo lvcreate -L 1.99G -n lv1 vg1 Rounding up size to full physical extent 1.99 GiB Logical volume "lv1" created $ sudo lvscan ACTIVE '/dev/vg1/lv1' [1.99 GiB] inherit
$ sudo mkfs -t ext4 /dev/vg1/lv1 mke2fs 1.42.5 (29-Jul-2012) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 130560 inodes, 522240 blocks 26112 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8160 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done
マウント
$ sudo mount /dev/vg1/lv1 /data $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg1-lv1 2.0G 35M 1.9G 2% /data
/etc/fstabに追記
/dev/vg1/lv1 /data ext4 defaults 1 2
新しいEBSの追加
追加ディスクにPV作成
$ sudo pvcreate /dev/xvdh Writing physical volume data to disk "/dev/xvdh" Physical volume "/dev/xvdh" successfully created $ sudo pvscan PV /dev/xvdf VG vg1 lvm2 [1020.00 MiB / 0 free] PV /dev/xvdg VG vg1 lvm2 [1020.00 MiB / 0 free] PV /dev/xvdh lvm2 [1.00 GiB] Total: 3 [2.99 GiB] / in use: 2 [1.99 GiB] / in no VG: 1 [1.00 GiB]
VGに新しいPVを追加
$ sudo vgextend vg1 /dev/xvdh Volume group "vg1" successfully extended $ sudo vgs VG #PV #LV #SN Attr VSize VFree vg1 3 1 0 wz--n- 2.99g 1020.00m
LVを拡張.この時点ではまだ実容量は増えていない.
$ sudo lvextend -l +100%FREE /dev/vg1/lv1 Extending logical volume lv1 to 2.99 GiB Logical volume lv1 successfully resized $ sudo lvscan ACTIVE '/dev/vg1/lv1' [2.99 GiB] inherit $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg1-lv1 2.0G 36M 1.9G 2% /data
ファイルシステムを拡張
$ sudo resize2fs /dev/vg1/lv1 resize2fs 1.42.5 (29-Jul-2012) Filesystem at /dev/vg1/lv1 is mounted on /data; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/vg1/lv1 to 783360 (4k) blocks. The filesystem on /dev/vg1/lv1 is now 783360 blocks long. $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg1-lv1 3.0G 36M 2.8G 2% /data
EBSを別のインスタンスにアタッチするとき
まず大きいファイルを書き込んでおく
$ fallocate -l 2G /data/dummy.img $ md5sum /data/dummy.img a981130cf2b7e09f4686dc273cf7187e /data/dummy.img $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg1-lv1 3.0G 2.1G 777M 73% /data $ sudo umount /data
AWSコンソールから3つのEBSをすべてデタッチして別のインスタンスにアタッチする. 以降新インスタンスで作業.
起動してlvm2インストール直後の状態
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda1 202:1 0 4G 0 disk / xvdb 202:16 0 149.1G 0 disk xvda3 202:3 0 896M 0 disk [SWAP] xvdf 202:80 0 1G 0 disk └─vg1-lv1 (dm-0) 254:0 0 3G 0 lvm xvdg 202:96 0 1G 0 disk └─vg1-lv1 (dm-0) 254:0 0 3G 0 lvm xvdh 202:112 0 1G 0 disk └─vg1-lv1 (dm-0) 254:0 0 3G 0 lvm $ sudo lvscan ACTIVE '/dev/vg1/lv1' [2.99 GiB] inherit
普通にマウントすれば使えた.
$ sudo mount /dev/vg1/lv1 /data $ md5sum /data/dummy.img a981130cf2b7e09f4686dc273cf7187e /data/dummy.img $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg1-lv1 3.0G 2.1G 777M 73% /data
lvm2がインストール済みだった場合は参考URLの手続きが必要になるかも.