この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
どうも。CX事業本部Delivery部のえーたん(@eetann092)です。
最近LVM(Logical Volume Manager)の存在を知って試したくなったため、EBSとEC2を使って素振りしました。
本記事は、以下の記事を参考に適度に寄り道した素振りの記録です。
本記事で作成したボリュームグループ(Volume Group)の構成は以下です。
EC2インスタンスの起動
今回使うEC2インスタンスの起動の設定ではEBSボリュームを2つ追加しました。
インスタンスが起動できたら、インスタンスの詳細画面の「接続」ボタンから、お好みの方法でインスタンスに接続します。
情報の確認
以降はインスタンスに接続後の操作です。
まず、最初の時点でのボリュームグループ(volume group)、物理ボリューム(physical volume)、論理ボリューム(logical volume)の確認をします。何も操作していないため、3つとも何も表示されません。
sudo su -
vgs
pvs
lvs
マニュアルを開くとvgs produces formatted output about VGs
と書かれているため、vgs
,pvs
,lvs
のs
は複数形を表しているのかな、と筆者は予想しています。
続いて、ブロックデバイスの一覧を表示します。今回扱うのは/dev/xvdb
、/dev/xvdc
の2つです。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 8G 0 disk
xvdc 202:32 0 8G 0 disk
追加したボリュームのデバイス名は、「ストレージ」のタブから確認できます。
上記で確認したデバイス名は/dev/sdb
と/dev/sdc
でしたが、本記事ではそのシンボリックリンク先の/dev/xvdb
、/dev/xvdc
を使いました。
以下、/dev/xvdb
と/dev/xvdc
の両方で操作が同じ場合は片方だけ書きます。
せっかくなので、parted
で確認します(gdisk -l /dev/xvdc
でもできます)。まだ何も操作していないため、パーティションテーブルはunknownです。
parted /dev/xvdc print
Error: /dev/xvdc: unrecognised disk label
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
パーティションの作成
パーティションを作成します。
gdisk /dev/xvdc
まず、何も無いねと言われます。
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
パーティションの新規作成では、Hex codeは8e00
(Linux LVM)を指定します。
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-16777182, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-16777182, default = 16777182) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'
確認後、書き込みます。
Command (? for help): p
Disk /dev/xvdc: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): B7D400C3-D601-485B-BF71-24A87EEB2F38
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 16777182 8.0 GiB 8E00 Linux LVM
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/xvdc.
The operation has completed successfully.
もう一度lsblk
を実行すると、パーティションxvdb1
、xvdc1
が作成されていることが確認できます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 8G 0 disk
└─xvdb1 202:17 0 8G 0 part
xvdc 202:32 0 8G 0 disk
└─xvdc1 202:33 0 8G 0 part
parted
を実行すると、Name列がLinux LVM
、Flags列がlvm
になっています。
parted /dev/xvdc print
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 8590MB 8589MB Linux LVM lvm
物理ボリュームの作成
物理ボリューム(physical volume)を作成します。
pvcreate /dev/xvdc1
Physical volume "/dev/xvdc1" successfully created.
物理ボリューム一覧を見ると、/dev/sdb1
と/dev/sdc1
として登録されています。
pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- <8.00g <8.00g
/dev/sdc1 lvm2 --- <8.00g <8.00g
詳細も見てみます。
pvdisplay
"/dev/sdb1" is a new physical volume of "<8.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <8.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID yhS7uN-bebl-wKG1-rRkE-FMs5-XVT4-uZZSPb
"/dev/sdc1" is a new physical volume of "<8.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size <8.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID zf6pPJ-nHme-Odbh-VwMW-ZkqS-hvXu-6VH5aS
まだボリュームグループに割り当てていないため、Allocatable
はNO
、PE
(physical extent)は0
です。
ボリュームグループの作成
ボリュームグループexample-group
を作成します。最初に割り当てる物理ボリュームは/dev/xvdb1
にします。
vgcreate example-group /dev/xvdb1
Volume group "example-group" successfully created
中身を確認します。
vgdisplay
--- Volume group ---
VG Name example-group
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <8.00 GiB
PE Size 4.00 MiB
Total PE 2047
Alloc PE / Size 0 / 0
Free PE / Size 2047 / <8.00 GiB
VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
物理ボリュームの数が1、サイズは8.00 GiB未満(2047 x 4.00 / 1024 ≒ 7.99 GiB)であることが分かります。
/dev/xvdc1
もボリュームグループへ追加します。
vgextend example-group /dev/xvdc1
Volume group "example-group" successfully extended
もう一度ボリュームグループを確認すると、物理ボリュームの数やサイズ(VG Size)や使用できるPE(Free PE / Size)が増えていることが分かります。
vgdisplay
--- Volume group ---
VG Name example-group
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 15.99 GiB
PE Size 4.00 MiB
Total PE 4094
Alloc PE / Size 0 / 0
Free PE / Size 4094 / 15.99 GiB
VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
ただし、まだ論理ボリューム(logical volume)の数は0のままです。
論理ボリュームの作成
「12GiBの論理ボリュームlv-12g
」をボリュームグループexample-group
の中に作成します。
lvcreate --size 12G --name lv-12g example-group
Logical volume "lv-12g" created.
「2GiBの論理ボリュームlv-2g
」も作成します。
lvcreate --size 2G --name lv-2g example-group
Logical volume "lv-2g" created.
詳細を確認すると、パスが/dev/example-group/lv-12g
と/dev/example-group/lv-2g
に割り当てられたことが分かります。
lvdisplay
--- Logical volume ---
LV Path /dev/example-group/lv-12g
LV Name lv-12g
VG Name example-group
LV UUID QcpDK6-syZA-7htj-fzvN-7nHN-u4AZ-DPjwjy
LV Write Access read/write
LV Creation host, time ip-172-31-37-52.ap-northeast-1.compute.internal, 2022-12-11 07:25:02 +0000
LV Status available
# open 0
LV Size 12.00 GiB
Current LE 3072
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/example-group/lv-2g
LV Name lv-2g
VG Name example-group
LV UUID SjEDG8-3t8s-dy6R-IrXw-l3He-3fHN-FIoAey
LV Write Access read/write
LV Creation host, time ip-172-31-37-52.ap-northeast-1.compute.internal, 2022-12-11 07:25:12 +0000
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
ボリュームグループを確認すると、割り当てられたPE(Alloc PE / Size)が増え、余ったPE(Free PE / Size)が減っていることが分かります。
vgdisplay
--- Volume group ---
VG Name example-group
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 15.99 GiB
PE Size 4.00 MiB
Total PE 4094
Alloc PE / Size 3584 / 14.00 GiB
Free PE / Size 510 / 1.99 GiB
VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
これで、冒頭に載せた構成は完成です。
ファイルシステムの作成
先程確認したパスを指定して、ファイルシステムを作成、適当にマウントします。
mkfs -t ext4 /dev/example-group/lv-12g
mkfs -t ext4 /dev/example-group/lv-2g
mkdir /example
mkdir /example/12g /example/2g
mount /dev/example-group/lv-12g /example/12g
mount /dev/example-group/lv-2g /example/2g
論理ボリュームの削除
素振りがしたいだけだったので、残念ですが論理ボリュームlv-2g
とはここでお別れです。アンマウントしてから論理ボリュームを削除します。
umount /example/2g/
lvremove example-group/lv-2g
Do you really want to remove active logical volume example-group/lv-2g? [y/n]: y
Logical volume "lv-2g" successfully removed
ボリュームグループを確認すると、論理ボリュームと割り当てられたPE(Alloc PE / Size)が減っています。その代わり、余っているPE(Free PE / Size)が増えました。
vgdisplay
--- Volume group ---
VG Name example-group
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 15.99 GiB
PE Size 4.00 MiB
Total PE 4094
Alloc PE / Size 3072 / 12.00 GiB
Free PE / Size 1022 / 3.99 GiB
VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
論理ボリュームの拡張
せっかくなので余ったPEを論理ボリュームlv-12g
に割り当てます。resizefs
オプションを使って、ファイルシステムのサイズも合わせて拡張しておきます。
lvresize --extents +1022 --resizefs --verbose example-group/lv-12g
趣味でverbose
オプションをつけて出力が長くなったため、折りたたみの中に書いておきました。
クリックで展開できます
Executing: /usr/sbin/fsadm --verbose check /dev/example-group/lv-12g
fsadm: "ext4" filesystem found on "/dev/mapper/example--group-lv--12g".
fsadm: Skipping filesystem check for device "/dev/mapper/example--group-lv--12g" as the filesystem is mounted on /example/12g
/usr/sbin/fsadm failed: 3
Archiving volume group "example-group" metadata (seqno 11).
Extending logical volume example-group/lv-12g to 15.99 GiB
Size of logical volume example-group/lv-12g changed from 12.00 GiB (3072 extents) to 15.99 GiB (4094 extents).
Loading table for example--group-lv--12g (253:0).
Suspending example--group-lv--12g (253:0) with device flush
Resuming example--group-lv--12g (253:0).
Creating volume group backup "/etc/lvm/backup/example-group" (seqno 12).
Logical volume example-group/lv-12g successfully resized.
Executing: /usr/sbin/fsadm --verbose resize /dev/example-group/lv-12g 16769024K
fsadm: "ext4" filesystem found on "/dev/mapper/example--group-lv--12g".
fsadm: Device "/dev/mapper/example--group-lv--12g" size is 17171480576 bytes
fsadm: Parsing tune2fs -l "/dev/mapper/example--group-lv--12g"
fsadm: Resizing filesystem on device "/dev/mapper/example--group-lv--12g" to 17171480576 bytes (3145728 -> 4192256 blocks of 4096 bytes)
fsadm: Executing resize2fs /dev/mapper/example--group-lv--12g 4192256
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/example--group-lv--12g is mounted on /example/12g; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/mapper/example--group-lv--12g is now 4192256 blocks long.
余っているPE(Free PE / Size)が0になりました。
vgdisplay
--- Volume group ---
VG Name example-group
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 8
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 15.99 GiB
PE Size 4.00 MiB
Total PE 4094
Alloc PE / Size 4094 / 15.99 GiB
Free PE / Size 0 / 0
VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
最後にもう一度ブロックデバイスの一覧を表示すると、論理ボリュームのデバイスも表示されます。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 8G 0 disk
└─xvdb1 202:17 0 8G 0 part
└─example--group-lv--12g 253:0 0 16G 0 lvm /example/12g
xvdc 202:32 0 8G 0 disk
└─xvdc1 202:33 0 8G 0 part
└─example--group-lv--12g 253:0 0 16G 0 lvm /example/12g
最後に
本記事では載せませんでしたが、manコマンドでマニュアルを見るとLVM関連のコマンドのオプションは豊富であることが分かります。また、EXAMPLES
セクションにはたくさんの例が、SEE ALSO
セクションにはたくさんの関連コマンドが載っているので、ぜひ読んでみてください。
試し終わったら、使用したリソースの停止や削除を忘れないようにしましょう。