68.4. LVM 論理ボリュームの管理
論理ボリュームは、ファイルシステム、データベース、またはアプリケーションが使用できる仮想のブロックストレージデバイスです。LVM 論理ボリュームを作成する場合は、物理ボリューム (PV) をボリュームグループ (Volume Group: VG) に統合します。これによりディスク領域のプールが作成され、そこから LVM 論理ボリューム (Logical Volume: LV) を割り当てます。
68.4.1. 論理ボリュームの概要
管理者は、標準のディスクパーティションとは異なり、データを破棄せずに論理ボリュームを拡大または縮小できます。ボリュームグループの物理ボリュームが別のドライブまたは RAID アレイにある場合は、ストレージデバイスに論理ボリュームを分散することもできます。
論理ボリュームを、ボリュームに必要なデータよりも小さい容量に縮小すると、データが失われる可能性があります。さらに、ファイルシステムの中には縮小できないものもあります。柔軟性を最大限にするために、現在のニーズに合わせて論理ボリュームを作成し、過剰なストレージ容量を未割り当ての状態にします。必要に応じて、未割り当ての領域を使用するように、論理ボリュームを安全に拡張できます。
AMD システム、Intel システム、ARM システム、および IBM Power Systems サーバーで、ブートローダーは LVM ボリュームを読み取ることができません。このため、/boot
パーティションは、LVM ではなく標準のパーティションで作成してください。IBM Z の場合は、zipl
ブートローダーによりリニアマッピングを使用した LVM 論理ボリューム上の /boot
に対応しています。デフォルトのインストールプロセスでは、/
パーティションと swap パーティションは常に LVM ボリューム内に、/boot
パーティションは別途、物理ボリューム上に作成されます。
以下は、論理ボリュームの種類になります。
- リニアボリューム
- リニアボリュームは、複数の物理ボリュームの領域を 1 つの論理ボリュームに統合します。たとえば、60GB ディスクが 2 つある場合は、120GB の論理ボリュームを作成できます。物理ストレージは連結されます。
- ストライプ化論理ボリューム
LVM 論理ボリュームにデータを書き込む際に、ファイルシステムは、基になる物理ボリューム全体にデータを分配します。このとき、ストライプ化論理ボリュームを作成すると、データを物理ボリュームに書き込む方法を制御できます。順次の読み取りおよび書き込みが大量に行われる場合には、これによりデータ I/O の効率を向上できます。
ストライピングは、ラウンドロビン式で、指定した数の物理ボリュームにデータを書き込んでいくことで、パフォーマンスを向上させます。I/O は、ストライピングでは並行して実行されます。これにより、ストライプで追加される各物理ボリュームでは、ほぼ直線的なパフォーマンスの向上が期待できます。
- RAID 論理ボリューム
- LVM は、RAID レベル 0、1、4、5、6、10 に対応します。RAID 論理ボリュームはクラスターには対応していません。RAID 論理ボリュームを作成するとき、LVM は、データまたはアレイ内のパリティーサブボリュームごとに、サイズが 1 エクステントのメタデータサブボリュームを作成します。
- シンプロビジョニングされた論理ボリューム (シンボリューム)
- シンプロビジョニングされた論理ボリュームを使用すると、利用可能な物理ストレージよりも大きな論理ボリュームを作成できます。シンプロビジョニングされたボリュームセットを作成すると、システムは要求されるストレージの全量を割り当てる代わりに、実際に使用する容量を割り当てることができます。
- スナップショットボリューム
- LVM スナップショット機能により、サービスを中断せずに任意の時点でデバイスの仮想イメージを作成できます。スナップショットの取得後に作成元のデバイスに変更が加えられると、データが変更する前に、これから変更する部分のコピーがスナップショット機能により作成されるため、このコピーを使用して、デバイスの状態を再構築できます。
- シンプロビジョニングされたスナップショットボリューム
- シンプロビジョニングされたスナップショットボリュームを使用すると、同じデータボリュームにより多くの仮想デバイスを格納できます。シンプロビジョニングされたスナップショットは、特定のタイミングでキャプチャーする際にすべてのデータをコピーしていないため、便利です。
- キャッシュボリューム
- LVM は、高速ブロックデバイス (SSD ドライブなど) を、大規模で低速なブロックデバイスのライトバックまたはライトスルーのキャッシュとして使用することに対応します。既存の論理ボリュームのパフォーマンスを改善するためにキャッシュ論理ボリュームを作成したり、大規模で低速なデバイスと共に小規模で高速なデバイスで設定される新規のキャッシュ論理ボリュームを作成したりできます。
68.4.2. CLI コマンドの使用
以下のセクションでは、LVM CLI コマンドの一般的な操作機能を説明します。
コマンドラインの引数で単位の指定
コマンドラインの引数でサイズが必要な場合は、常に単位を明示的に指定できます。単位を指定しないと、デフォルトで KB または MB が指定されます。LVM CLI コマンドでは、分数を使用できません。
コマンドライン引数で単位を指定する場合は、LVM が大文字と小文字を区別しません。たとえば、M と m は同じで、2 の累乗 (1024 の倍数) が使用されます。ただし、コマンドで --units
引数を指定すると、小文字は、単位が 1024 の倍数であることを示し、その単位は 1000 の倍数であることを示します。
ボリュームグループおよび論理ボリュームの指定
LVM CLI コマンドでボリュームグループまたは論理ボリュームを指定する場合は、以下の点に留意してください。
-
ここで、コマンドではボリュームグループまたは論理ボリューム名を引数として取り、完全パス名はオプションになります。たとえば、ボリュームグループ
vg0
内の論理ボリュームlvol0
は、vg0/lvol0
と指定できます。 - ボリュームグループのリストは必須ですが、空の場合は、ボリュームグループのリストが置き換えられます。
-
論理ボリュームのリストが必要ですが、ボリュームグループを指定すると、そのボリュームグループにある論理ボリュームがすべて置き換えられます。たとえば、
lvdisplay vg0
コマンドは、ボリュームグループvg0
の論理ボリュームをすべて表示します。
出力の詳細レベルを上げる
すべての LVM コマンドは、出力の詳細レベルを上げるために複数回入力できる -v
引数を受け入れます。以下の例は、lvcreate
コマンドのデフォルト出力を示しています。
# lvcreate -L 50MB new_vg
Rounding up size to full physical extent 52.00 MB
Logical volume "lvol0" created
以下のコマンドは、lvcreate
コマンドの出力と、-v
引数を表示します。
# lvcreate -v -L 50MB new_vg
Rounding up size to full physical extent 52.00 MB
Archiving volume group "new_vg" metadata (seqno 1).
Creating logical volume lvol0
Creating volume group backup "/etc/lvm/backup/new_vg" (seqno 2).
Activating logical volume new_vg/lvol0.
activation/volume_list configuration setting not defined: Checking only host tags for new_vg/lvol0.
Creating new_vg-lvol0
Loading table for new_vg-lvol0 (253:0).
Resuming new_vg-lvol0 (253:0).
Wiping known signatures on logical volume "new_vg/lvol0"
Initializing 4.00 KiB of logical volume "new_vg/lvol0" with value 0.
Logical volume "lvol0" created
引数の -vv
、-vvv
、および -vvvv
を使用すると、表示されるコマンド実行がより詳細になります。-vvvv
引数は、この時点で情報の最大数を提供します。以下の例は、lvcreate
コマンドで -vvvv
引数を指定して、出力の最初の行を示しています。
# lvcreate -vvvv -L 50MB new_vg
#lvmcmdline.c:913 Processing: lvcreate -vvvv -L 50MB new_vg
#lvmcmdline.c:916 O_DIRECT will be used
#config/config.c:864 Setting global/locking_type to 1
#locking/locking.c:138 File-based locking selected.
#config/config.c:841 Setting global/locking_dir to /var/lock/lvm
#activate/activate.c:358 Getting target version for linear
#ioctl/libdm-iface.c:1569 dm version OF [16384]
#ioctl/libdm-iface.c:1569 dm versions OF [16384]
#activate/activate.c:358 Getting target version for striped
#ioctl/libdm-iface.c:1569 dm versions OF [16384]
#config/config.c:864 Setting activation/mirror_region_size to 512
...
LVM CLI コマンドのヘルプの表示
コマンドの --help
引数を使用して、LVM CLI コマンドのヘルプを表示できます。
# commandname --help
コマンドの man ページを表示するには、man
コマンドを実行します。
# man commandname
man lvm
コマンドは、LVM に関する一般的なオンライン情報を提供します。
68.4.3. LVM 論理ボリュームの作成
この手順では、/dev/vdb1、/dev/vdb2、および /dev/vdb3 物理ボリュームを使用して作成された myvg ボリュームグループから mylv LVM 論理ボリューム (LV) を作成する方法を説明します。
前提条件
-
lvm2
パッケージがインストールされている。 - ボリュームグループが作成されます。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
論理ボリュームを作成します。
# lvcreate -n mylv -L 500M myvg
-n
オプションを使用して LV 名を mylv に設定し、-L
オプションを使用して、Mb 単位で LV のサイズを設定しますが、他の単位を使用することもできます。デフォルトでは、論理ボリュームのタイプはリニアですが、--type
オプションを使用して必要なタイプを指定できます。重要ボリュームグループに要求されるサイズとタイプの空き物理エクステントが十分にない場合、このコマンドは失敗します。
要件に応じて、以下のコマンドのいずれかを使用して、作成した論理ボリュームを表示します。
lvs
コマンド: 論理ボリューム情報を設定可能な形式で提供して、1 つの論理ボリュームにつき 1 行ずつ表示します。# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv myvg -wi-ao---- 500.00m
lvdisplay
コマンド: 決められた形式で、論理ボリュームのプロパティー (サイズ、レイアウト、マッピングなど) を表示します。# lvdisplay -v /dev/myvg/mylv --- Logical volume --- LV Path /dev/myvg/mylv LV Name mylv VG Name myvg LV UUID YTnAk6-kMlT-c4pG-HBFZ-Bx7t-ePMk-7YjhaM LV Write Access read/write [..]
lvscan
コマンド: システム内のすべての論理ボリュームをスキャンし、それらをリスト表示します。# lvscan ACTIVE '/dev/myvg/mylv' [500.00 MiB] inherit
論理ボリュームにファイルシステムを作成します。以下のコマンドを使用すると、論理ボリュームに
xfs
ファイルシステムが作成されます。# mkfs.xfs /dev/myvg/mylv meta-data=/dev/myvg/mylv isize=512 agcount=4, agsize=32000 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=128000, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=1368, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 Discarding blocks...Done.
論理ボリュームをマウントして、ファイルシステムのディスクの領域使用率を報告します。
# mount /dev/myvg/mylv /mnt # df -h Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/myvg-mylv 506528 29388 477140 6% /mnt
関連情報
-
lvcreate(8)
、lvdisplay(8)
、lvs(8)
、lvscan(8)
、lvm(8)
、およびmkfs.xfs(8)
の man ページ
68.4.4. RAID0 ストライピング 論理ボリュームの作成
RAID0 論理ボリュームは、論理ボリュームデータをストライプサイズ単位で複数のデータサブボリューム全体に分散します。以下の手順では、ディスク間でデータをストライピングする mylv という LVM RAID0 論理ボリュームを作成します。
前提条件
- 3 つ以上の物理ボリュームを作成している。物理ボリュームの作成方法は、LVM 物理ボリュームの作成 を参照してください。
- ボリュームグループを作成している。詳細は、LVM ボリュームグループの作成 を参照してください。
手順
既存のボリュームグループから RAID0 論理ボリュームを作成します。次のコマンドは、ボリュームグループ myvg から RAID0 ボリューム mylv を 作成します。これは、サイズが 2G で、ストライプが 3 つ、ストライプ サイズが 4kB です。
# lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg Rounding size 2.00 GiB (512 extents) up to stripe boundary size 2.00 GiB(513 extents). Logical volume "mylv" created.
RAID0 論理ボリュームにファイルシステムを作成します。以下のコマンドを使用すると、論理ボリュームに ext4 ファイルシステムが作成されます。
# mkfs.ext4 /dev/my_vg/mylv
論理ボリュームをマウントして、ファイルシステムのディスクの領域使用率を報告します。
# mount /dev/my_vg/mylv /mnt # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/my_vg-mylv 2002684 6168 1875072 1% /mnt
検証
作成された RAID0 ストライピング論理ボリュームを表示します。
# lvs -a -o +devices,segtype my_vg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type mylv my_vg rwi-a-r--- 2.00g mylv_rimage_0(0),mylv_rimage_1(0),mylv_rimage_2(0) raid0 [mylv_rimage_0] my_vg iwi-aor--- 684.00m /dev/sdf1(0) linear [mylv_rimage_1] my_vg iwi-aor--- 684.00m /dev/sdg1(0) linear [mylv_rimage_2] my_vg iwi-aor--- 684.00m /dev/sdh1(0) linear
68.4.5. LVM 論理ボリュームの名前の変更
この手順では、既存の論理ボリューム mylv の名前を mylv1 に変更する方法を説明します。
手順
論理ボリュームが現在マウントされている場合は、ボリュームをアンマウントします。
# umount /mnt
/mnt は、マウントポイントに置き換えます。
既存の論理ボリュームの名前を変更します。
# lvrename myvg mylv mylv1 Renamed "mylv" to "mylv1" in volume group "myvg"
また、デバイスへの完全パスを指定して、論理ボリュームの名前を変更することもできます。
# lvrename /dev/myvg/mylv /dev/myvg/mylv1
関連情報
-
lvrename(8)
の man ページ
68.4.6. 論理ボリュームからのディスクの削除
この手順では、ディスクを交換するか、別のボリュームで使用するために、既存の論理ボリュームからディスクを削除する方法を説明します。
ディスクを削除する前に、LVM 物理ボリュームのエクステントを、別のディスクまたはディスクセットに移動する必要があります。
手順
LV を使用する際に、物理ボリュームの使用済み容量と空き容量を表示します。
# pvs -o+pv_used PV VG Fmt Attr PSize PFree Used /dev/vdb1 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 myvg lvm2 a-- 1020.00m 1008.00m 12.00m
データを他の物理ボリュームに移動します。
既存のボリュームグループ内の他の物理ボリュームに空きエクステントが十分にある場合は、以下のコマンドを使用してデータを移動します。
# pvmove /dev/vdb3 /dev/vdb3: Moved: 2.0% ... /dev/vdb3: Moved: 79.2% ... /dev/vdb3: Moved: 100.0%
既存のボリュームグループ内の他の物理ボリュームに空きエクステントが十分にない場合は、以下のコマンドを使用して新しい物理ボリュームを追加し、新たに作成した物理ボリュームを使用してボリュームグループを拡張し、この物理ボリュームにデータを移動します。
# pvcreate /dev/vdb4 Physical volume "/dev/vdb4" successfully created # vgextend myvg /dev/vdb4 Volume group "myvg" successfully extended # pvmove /dev/vdb3 /dev/vdb4 /dev/vdb3: Moved: 33.33% /dev/vdb3: Moved: 100.00%
物理ボリュームを削除します。
# vgreduce myvg /dev/vdb3 Removed "/dev/vdb3" from volume group "myvg"
論理ボリュームに、障害のある物理ボリュームが含まれる場合は、その論理ボリュームを使用することはできません。見つからない物理ボリュームをボリュームグループから削除します。その物理ボリュームに論理ボリュームが割り当てられていない場合は、
vgreduce
コマンドの--removemissing
パラメーターを使用できます。# vgreduce --removemissing myvg
関連情報
-
pvmove(8)
、vgextend(8)
、vereduce(8)
、およびpvs(8)
の man ページ
68.4.7. LVM 論理ボリュームの削除
この手順では、既存の論理ボリューム /dev/myvg/mylv1 をボリュームグループ myvg から削除する方法を説明します。
手順
論理ボリュームが現在マウントされている場合は、ボリュームをアンマウントします。
# umount /mnt
クラスター環境に論理ボリュームが存在する場合は、アクティブになっているすべてのノードで、論理ボリュームを非アクティブにします。アクティブになっている各ノードで、次のコマンドを実行します。
# lvchange --activate n vg-name/lv-name
lvremove
ユーティリティーを使用して、論理ボリュームを削除します。# lvremove /dev/myvg/mylv1 Do you really want to remove active logical volume "mylv1"? [y/n]: y Logical volume "mylv1" successfully removed
注記この場合は、論理ボリュームが非アクティブになっていません。削除する前に論理ボリュームを明示的に非アクティブにした場合は、アクティブな論理ボリュームを削除するかどうかを確認するプロンプトが表示されません。
関連情報
-
lvremove(8)
の man ページ
68.4.8. 永続的なデバイス番号の設定
メジャーデバイス番号とマイナーデバイス番号は、モジュールのロード時に動的に割り当てられます。一部のアプリケーションは、ブロックデバイスが常に同じデバイス (メジャーとマイナー) 番号でアクティブにされている場合に、最も効果的に機能します。これらは lvcreate
と lvchange
コマンドで、以下の引数を使用することによって指定できます。
--persistent y --major major --minor minor
別のデバイスにすでに動的に割り当てられている番号を使用しないように、マイナー番号は大きくします。
NFS を使用してファイルシステムをエクスポートする場合は、そのエクスポートファイルで fsid
パラメーターを指定すると、LVM 内で永続的なデバイス番号を設定する必要がなくなります。
68.4.9. LVM エクステントサイズの指定
ボリュームグループの作成に物理ボリュームが使用されると、ディスク領域はデフォルトで 4MB のエクステントに分割されます。このエクステントは、論理ボリュームのサイズを拡張/縮小する最小単位です。エクステントの数が多くても、論理ボリュームの I/O パフォーマンスに影響を与えることはありません。
エクステントサイズのデフォルト設定が適切でない場合は、vgcreate
コマンドに -s
オプションを使用して、エクステントのサイズを指定できます。vgcreate
コマンドに -p
引数と -l
引数を使用すると、ボリュームグループに追加可能な物理ボリュームまたは論理ボリュームの数に制限をかけることができます。
68.4.10. RHEL システムロールを使用した LVM 論理ボリュームの管理
storage
ロールを使用して、次のタスクを実行します。
- 複数のディスクで設定されるボリュームグループに LVM 論理ボリュームを作成します。
- 論理ボリューム上に特定のラベルを付けて ext4 ファイルシステムを作成します。
- ext4 ファイルシステムを永続的にマウントします。
前提条件
-
storage
ロールを含む Ansible Playbook がある。
68.4.10.1. 論理ボリュームを管理する Ansible Playbook の例
本セクションでは、Ansible Playbook の例を紹介します。この Playbook は、storage
ロールを適用して、ボリュームグループに LVM 論理ボリュームを作成します。
例68.1 myvg ボリュームグループに mylv 論理ボリュームを作成する Playbook
- hosts: all vars: storage_pools: - name: myvg disks: - sda - sdb - sdc volumes: - name: mylv size: 2G fs_type: ext4 mount_point: /mnt/data roles: - rhel-system-roles.storage
myvg
ボリュームグループは、次のディスクで設定されます。-
/dev/sda
-
/dev/sdb
-
/dev/sdc
-
-
myvg
ボリュームグループがすでに存在する場合は、Playbook により論理ボリュームがボリュームグループに追加されます。 -
myvg
ボリュームグループが存在しない場合は、Playbook により作成されます。 -
Playbook は、
mylv
論理ボリューム上に Ext4 ファイルシステムを作成し、/mnt
ファイルシステムを永続的にマウントします。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
ファイル
68.4.10.2. 関連情報
68.4.11. LVM ボリュームグループの削除
この手順では、既存のボリュームグループを削除する方法を説明します。
前提条件
- ボリュームグループには論理ボリュームがありません。ボリュームグループから論理ボリュームを削除するには、LVM 論理ボリュームの削除 を参照してください。
手順
クラスター環境にボリュームグループが存在する場合は、その他のすべてのノードで、ボリュームグループの
lockspace
を停止します。削除するノード以外の全ノードで、次のコマンドを実行します。# vgchange --lockstop vg-name
ロックが停止するのを待ちます。
ボリュームグループを削除します。
# vgremove vg-name Volume group "vg-name" successfully removed
関連情報
-
vgremove(8)
の man ページ