RHEL で LVM 論理ボリュームを作成し拡張する

Red Hat Enterprise LinuxBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、Red Hat Enterprise Linux システム上で LVM (Logical Volume Manager) ストレージを作成し、管理するための基本的なプロセスを学びます。まず、物理ディスクを準備し、parted を使用してパーティションを作成し、pvcreate を使用して LVM 物理ボリューム (PV) として初期化することから始めます。次に、この PV を vgcreate を使用してボリュームグループ (VG) にプールし、そこから lvcreate を使用して柔軟な論理ボリューム (LV) を作成します。初期設定は、新しい LV を XFS ファイルシステムでフォーマットし、システムで使用するために永続的にマウントすることで完了します。

初期設定に基づいて、LVM の主要な利点の 1 つである、ストレージを動的にサイズ変更する機能を調べます。vgextend を使用して、新しい物理ボリュームを追加することにより、既存のボリュームグループを拡張する方法を学びます。その後、lvextend を使用してこの新しいスペースを利用するように論理ボリュームを拡張し、xfs_growfs を使用して XFS ファイルシステムをオンラインでサイズ変更し、追加の容量をダウンタイムなしでオペレーティングシステムですぐに利用できるようにします。

partedpvcreate で物理ボリュームを準備する

このステップでは、Logical Volume Manager (LVM) で使用するために物理ディスクを準備することからストレージの管理を開始します。これには、2 つの主要な段階が含まれます。まず、parted ユーティリティを使用してディスクをパーティション分割し、次に、pvcreate コマンドを使用してこれらのパーティションを LVM 物理ボリューム (PV) として初期化します。

Logical Volume Manager (LVM) の概要

LVM は、Linux における強力なストレージ管理ツールであり、物理ストレージデバイス上に柔軟なレイヤーを提供します。ディスクとパーティションを直接使用する代わりに、LVM を使用すると、1 つ以上の物理デバイスから抽象的な「ボリュームグループ」を作成し、そのプールされたスペースから「論理ボリューム」を切り出すことができます。これにより、ストレージのサイズ変更、ディスクの交換、およびシステムのストレージ管理をダウンタイムなしで簡単に行うことができます。

LVM の最も基本的なコンポーネントは、Physical Volume (PV) です。PV は、ハードディスクパーティションやディスク全体など、LVM で使用するために初期化された物理ストレージデバイスです。

1. LVM 用のパーティションを作成する

LVM でディスクを使用するには、その上にパーティションを作成し、そのタイプを「LVM」に設定する必要があります。この演習では、/dev/vdb デバイスを使用します。ディスクパーティションを変更するには、sudo 特権が必要です。

まず、/dev/vdb デバイス上に新しい GUID パーティションテーブル (GPT) を作成します。GPT は、物理ストレージデバイス上のパーティションテーブルのレイアウトに関する最新の標準です。

sudo parted /dev/vdb mklabel gpt

次に、512 MiB の単一のパーティションを作成します。このパーティションを lvm-part1 と名付けます。

sudo parted /dev/vdb mkpart lvm-part1 1MiB 513MiB

次に、パーティションタイプを lvm に設定します。このフラグは、このパーティションが Logical Volume Manager で使用されることをシステムに指示します。

sudo parted /dev/vdb set 1 lvm on

カーネルが新しいパーティションをすぐに認識するようにするには、udevadm settle コマンドを実行します。このコマンドは、udev デーモンがすべてのデバイスイベントを処理するのを待ち、新しいパーティション /dev/vdb1 が利用可能であることを確認します。

sudo udevadm settle

最後に、パーティションテーブルを出力して、パーティションが正しく作成されたことを確認します。

sudo parted /dev/vdb print

次のような出力が表示され、lvm フラグが有効になっている 1 つのパーティションが表示されます。

Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name       Flags
 1      1049kB  538MB  537MB               lvm-part1  lvm

2. パーティションを物理ボリュームとして初期化する

パーティションが作成され、正しく型付けされたので、次のステップは、pvcreate コマンドを使用して、それを LVM 物理ボリュームとして初期化することです。このコマンドは、LVM メタデータをパーティションに書き込み、正式に LVM システムの一部にします。

/dev/vdb1 を初期化するには、次のコマンドを実行します。

sudo pvcreate /dev/vdb1

操作が成功すると、次のメッセージが表示されます。

  Physical volume "/dev/vdb1" successfully created.
  Creating devices file /etc/lvm/devices/system.devices

3. 物理ボリューム情報を表示する

これで、新しく作成された物理ボリュームを検査できます。pvs コマンドは、システム上のすべての PV の簡潔な概要を提供し、pvdisplay はより詳細なビューを提供します。

pvs を使用して、簡単な概要を確認します。

sudo pvs

出力には、新しい PV がリストされます。まだどのボリュームグループ (VG) にも属していないことに注意してください。

  PV         VG Fmt  Attr PSize   PFree
  /dev/vdb1     lvm2 ---  512.00m 512.00m

詳細については、pvdisplay を使用します。

sudo pvdisplay /dev/vdb1

このコマンドは、PV 名、サイズ、一意の識別子 (UUID) などの詳細情報を表示します。

  "/dev/vdb1" is a new physical volume of "512.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb1
  VG Name
  PV Size               512.00 MiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

これで、LVM 用の物理パーティションを正常に準備できました。次のステップでは、この PV を使用してボリュームグループを作成します。

vgcreate を使用して物理ボリュームからボリュームグループを作成する

このステップでは、前のステップで準備した物理ボリューム (PV) を使用して、ボリュームグループ (VG) を作成します。ボリュームグループは LVM の中心的なコンポーネントであり、論理ボリュームを作成できる単一の管理可能なディスクスペースのプールとして機能します。

ボリュームグループと物理エクステントの理解

Volume Group (VG) は、1 つ以上の物理ボリュームを単一のストレージプールに集約します。これを、いくつかの小さな水の容器を 1 つの大きなタンクにまとめるようなものと考えてください。この抽象化が、LVM に柔軟性をもたらしています。

このストレージプールは、Physical Extents (PE) と呼ばれる、小さく固定サイズのチャンクに分割されます。デフォルトでは、PE は 4 MiB です。後で論理ボリュームを作成するときは、基本的にボリュームグループからこれらの PE の特定の数を割り当てます。

1. ボリュームグループを作成する

次に、/dev/vdb1 物理ボリュームを使用して、my_vg という名前のボリュームグループを作成します。これに使用するコマンドは vgcreate です。

sudo vgcreate my_vg /dev/vdb1

コマンドが成功すると、確認メッセージが表示されます。

  Volume group "my_vg" successfully created

このコマンドは、/dev/vdb1 から利用可能なすべてのスペースを含む、my_vg という名前の新しいストレージプールを作成しました。

2. ボリュームグループ情報を表示する

物理ボリュームの場合と同様に、新しいボリュームグループに関する情報を表示できます。vgs コマンドは概要を提供し、vgdisplay は詳細なビューを提供します。

システム上のすべてのボリュームグループの簡潔な概要を取得するには、次を実行します。

sudo vgs

出力には、新しい VG、そのサイズ、および空き容量が表示されます。

  VG    #PV #LV #SN Attr   VSize   VFree
  my_vg   1   0   0 wz--n- 508.00m 508.00m

特定のボリュームグループに関するより詳細なレポートについては、vgdisplay を使用します。

sudo vgdisplay my_vg

この出力は、PE サイズ、PE の総数、およびまだ空いている PE の数など、包括的な詳細を提供します。

  --- Volume group ---
  VG Name               my_vg
  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               508.00 MiB
  PE Size               4.00 MiB
  Total PE              127
  Alloc PE / Size       0 / 0
  Free  PE / Size       127 / 508.00 MiB
  VG UUID               xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

PE Size が 4.00 MiB であり、127 個の Free PE があることに注意してください。これは、ボリュームグループで使用可能な合計スペースに対応しています。これで、ボリュームグループが正常に作成され、そこから論理ボリュームを作成する準備ができました。

lvcreatemkfs.xfs で論理ボリュームを作成しフォーマットする

このステップでは、作成したボリュームグループから、論理ボリューム (LV) と呼ばれる、使用可能なブロックデバイスを切り出します。LV が作成されても、それはまだ生のストレージスペースにすぎません。ファイル を保存するには、ファイルシステムでフォーマットする必要があります。

論理ボリュームとファイルシステムの理解

Logical Volume (LV) は、従来のディスクパーティションに相当する LVM です。ボリュームグループ内の空き領域から作成され、標準のブロックデバイスとしてオペレーティングシステムに提示されます。LV 上にファイルシステムを作成し、マウントして、それらを使用してデータを保存できます。主な利点は、LV のサイズを簡単に変更できることであり、これは物理パーティションでは非常に困難です。

ファイルシステム は、オペレーティングシステムがデータの保存と取得を制御するために使用するデータ構造です。LV のようなデバイスの生のスペースをファイルとディレクトリに整理します。このラボでは、Red Hat Enterprise Linux のデフォルトである、高性能なジャーナリングファイルシステムである XFS を使用します。

1. 論理ボリュームを作成する

次に、my_vg ボリュームグループから、my_lv という名前の 256 MiB の論理ボリュームを作成します。これに使用するコマンドは lvcreate です。

  • -n my_lv: 新しい LV の名前を指定します。
  • -L 256M: LV のサイズを 256 メガバイトに設定します。
  • my_vg: LV を作成するボリュームグループの名前。

次のコマンドを実行します。

sudo lvcreate -n my_lv -L 256M my_vg

コマンドが成功すると、この出力が生成されます。

  Logical volume "my_lv" created.

2. 論理ボリュームの作成を確認する

lvs および lvdisplay コマンドを使用して、新しい LV を検査できます。

すべての LV の概要を表示するには、次を実行します。

sudo lvs

出力には、my_vg グループ内の新しい LV である my_lv が表示されます。

  LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  my_lv my_vg -wi-a----- 256.00m

詳細なビューについては、LV のフルパスを指定できます。LV へのパスは、通常 /dev/VG_NAME/LV_NAME です。

sudo lvdisplay /dev/my_vg/my_lv

これにより、次のステップに必要な LV パスなど、詳細情報が提供されます。

  --- Logical volume ---
  LV Path                /dev/my_vg/my_lv
  LV Name                my_lv
  VG Name                my_vg
  LV UUID                xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  LV Write Access        read/write
  LV Creation host, time host, 2023-10-27 10:30:00 +0000
  LV Status              available
  ## open                 0
  LV Size                256.00 MiB
  Current LE             64
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

3. XFS ファイルシステムで論理ボリュームをフォーマットする

次に、mkfs.xfs コマンドを使用して、my_lv 論理ボリュームを XFS ファイルシステムでフォーマットします。これにより、ボリュームがファイルの保存用に準備されます。

sudo mkfs.xfs /dev/my_vg/my_lv

コマンドは、作成しているファイルシステムに関する詳細を出力します。

meta-data=/dev/my_vg/my_lv       isize=512    agcount=4, agsize=16384 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=65536, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

これで、論理ボリュームがフォーマットされ、マウントして使用する準備ができました。これは次のステップで行います。

/etc/fstab を使用して論理ボリュームを永続的にマウントする

このステップでは、作成しフォーマットした論理ボリュームをシステムからアクセスできるようにします。これには、"マウントポイント" として機能するディレクトリを作成し、システムが起動するたびに論理ボリュームをこのディレクトリに自動的にアタッチするように構成する、という 2 つのアクションが含まれます。

マウントと /etc/fstab の理解

フォーマットされたブロックデバイス ( my_lv 論理ボリュームなど) は、マウント されるまで直接使用できません。マウントとは、ファイルシステムをメインファイルシステムツリー内の特定のディレクトリにアタッチするプロセスです。マウントされると、そのディレクトリに移動して、デバイス上のファイルの読み取りと書き込みを行うことができます。

再起動後にファイルシステムが自動的にマウントされるようにするには、/etc/fstab (ファイルシステムテーブル) ファイルにそのエントリを追加する必要があります。このファイルには、システムが起動時にマウントする必要があるすべてのディスクとパーティションのリストが含まれています。

1. マウントポイントを作成する

マウントポイントは、新しいファイルシステムのルートとして機能する空のディレクトリです。この目的のために、/data という名前のディレクトリを作成します。

sudo mkdir /data

2. 永続的なマウントのために /etc/fstab にエントリを追加する

次に、システムに LV を /data ディレクトリに自動的にマウントするように指示する必要があります。/etc/fstab ファイルに新しい行を追加します。このファイルの各行には、6 つのフィールドがあります。

  1. Device (デバイス): マウントするデバイス。この場合は、/dev/my_vg/my_lv です。
  2. Mount Point (マウントポイント): マウント先のディレクトリ。ここでは、/data です。
  3. Filesystem Type (ファイルシステムタイプ): ファイルシステムのタイプ。これは xfs です。
  4. Mount Options (マウントオプション): マウントのオプション。defaults は、ほとんどの場合に適した標準のオプションセットです。
  5. Dump (ダンプ): dump ユーティリティがファイルシステムをバックアップするかどうかを決定するために使用されます。0 は無効を意味します。
  6. Pass (パス): fsck が起動時にファイルシステムをチェックする順序を決定するために使用されます。0 はチェックしないことを意味します。

テキストエディタを使用せずに、echo コマンドと sudo tee -a を組み合わせて、正しい行を /etc/fstab に追加します。

echo '/dev/my_vg/my_lv /data xfs defaults 0 0' | sudo tee -a /etc/fstab

ファイルの内容を表示して、行が正しく追加されたことを確認できます。

cat /etc/fstab

3. ファイルシステムをマウントする

/etc/fstab にエントリが存在するようになったので、mount コマンドを使用してすぐにマウントできます。マウントポイント /data/etc/fstab にリストされているため、ディレクトリ名だけを指定する必要があります。

sudo mount /data

システムは /etc/fstab を読み取り、/data のエントリを見つけて、対応するデバイスをマウントします。

4. マウントを確認する

ファイルシステムが正常にマウントされたことを確認するには、-h (人間が読める形式) オプションを指定して df (ディスク空き容量) コマンドを使用できます。

df -h /data

出力には、/data にマウントされた論理ボリュームが表示され、その合計サイズと空き容量が表示されます。

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/my_vg-my_lv     251M   28M  224M  11% /data

また、書き込みアクセスがあることを確認するために、テストファイルを作成することもできます。

echo "My LVM is working!" | sudo tee /data/test.txt

次に、ファイルを読み戻して、書き込まれたことを確認します。

cat /data/test.txt
My LVM is working!

これで、論理ボリュームがマウントされ、システムが起動するたびに自動的に利用できるようになります。

vgextendlvextend でボリュームグループと論理ボリュームを拡張する

このステップでは、LVM の最も強力な機能の 1 つである、ストレージのサイズを動的に増やす機能を体験します。既存のボリュームグループに新しい物理ディスクパーティションを追加して総容量を増やし、その新しいスペースの一部を使用するように論理ボリュームを拡張します。

ストレージ拡張の理解

LVM を使用する主な理由の 1 つは、その柔軟性です。スペースが不足した場合、複雑なデータ移行を実行する必要はありません。代わりに、別の物理ディスク (またはパーティション) をボリュームグループに追加し、必要に応じて論理ボリュームを拡張するだけです。これはすべて、ファイルシステムをアンマウントすることなく、オンラインで実行できます。

  • vgextend: このコマンドは、1 つ以上の物理ボリュームを既存のボリュームグループに追加し、その合計サイズを増やします。
  • lvextend: このコマンドは、論理ボリュームのサイズを増やし、ボリュームグループ内の空きエクステントからスペースを割り当てます。

1. 新しい物理ボリュームを準備する

ボリュームグループを拡張するには、まず新しい物理ボリュームが必要です。最初のステップと同様に、/dev/vdb デバイスに 2 番目のパーティションを作成します。

まず、新しい 512 MiB のパーティションを作成します。最初のパーティションの直後に配置します。

sudo parted /dev/vdb mkpart lvm-part2 513MiB 1025MiB

次に、パーティションタイプを lvm に設定します。

sudo parted /dev/vdb set 2 lvm on

カーネルが新しいパーティション /dev/vdb2 を認識していることを確認します。

sudo udevadm settle

最後に、この新しいパーティションを物理ボリュームとして初期化します。

sudo pvcreate /dev/vdb2

成功メッセージが表示されます。

  Physical volume "/dev/vdb2" successfully created.

2. ボリュームグループを拡張する

次に、vgextend コマンドを使用して、新しい物理ボリューム (/dev/vdb2) を既存のボリュームグループ (my_vg) に追加します。

sudo vgextend my_vg /dev/vdb2

確認メッセージは成功を示します。

  Volume group "my_vg" successfully extended

vgs コマンドで変更を確認できます。VSizeVFree が大幅に増加していることに注意してください。

sudo vgs my_vg
  VG    #PV #LV #SN Attr   VSize    VFree
  my_vg   2   1   0 wz--n- 1022.00m 766.00m

my_vg ボリュームグループは、これで 2 つの物理パーティションにまたがり、より多くの空きスペースが利用可能になりました。

3. 論理ボリュームを拡張する

ボリュームグループでより多くのスペースが利用可能になったので、論理ボリュームを拡張できます。my_lv のサイズを 256 MiB から新しい合計サイズ 400 MiB に増やしましょう。

-L オプションを指定した lvextend コマンドは、ボリュームの新しい絶対サイズを設定します。

sudo lvextend -L 400M /dev/my_vg/my_lv

出力は、サイズ変更操作を確認します。

  Size of logical volume my_vg/my_lv changed from 256.00 MiB (64 extents) to 400.00 MiB (100 extents).
  Logical volume my_vg/my_lv successfully resized.

lvs で論理ボリュームの新しいサイズを確認します。

sudo lvs /dev/my_vg/my_lv
  LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  my_lv my_vg -wi-ao---- 400.00m

重要: 論理ボリューム (ブロックデバイス) は正常に拡張されましたが、その上にある XFS ファイルシステムは、まだこの新しいスペースを認識していません。マウントされたファイルシステムのサイズを確認すると、古いサイズがまだ報告されます。

df -h /data
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/my_vg-my_lv     251M   28M  224M  11% /data

次のステップでは、ファイルシステムのサイズを変更して、論理ボリュームで新しく利用可能になったスペースをすべて使用します。

xfs_growfs を使用して XFS ファイルシステムをリサイズする

この最終ステップでは、XFS ファイルシステムのサイズを変更して、基盤となる論理ボリュームに割り当てた追加のスペースを認識させることで、ストレージ拡張プロセスを完了します。これは、新しいスペースをファイル保存に使用できるようにする重要な最終ステップです。

ファイルシステムサイズ変更の理解

論理ボリュームを拡張する場合、コンテナ (ブロックデバイス) のサイズを増やしているだけです。そのコンテナ のファイルシステムは元のサイズのままであり、デバイスの末尾にある新しい未使用のスペースを認識していません。

XFS ファイルシステムの場合、xfs_growfs コマンドを使用して、ファイルシステムを拡張して基盤となるデバイスを埋めます。XFS の大きな利点は、この操作をオンラインで、ファイルシステムがマウントされて使用されている間に、ダウンタイムなしで実行できることです。

1. XFS ファイルシステムを拡張する

xfs_growfs コマンドは、ファイルシステムのマウントポイントを引数として受け取ります。この場合、マウントポイントは /data です。

ファイルシステムを拡張するには、次のコマンドを実行します。

sudo xfs_growfs /data

このコマンドは、変更に関する情報を出力し、古いデータブロック数と新しいデータブロック数を示します。

meta-data=/dev/mapper/my_vg-my_lv isize=512    agcount=4, agsize=16384 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=65536, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           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 65536 to 102400

重要な行は data blocks changed from 65536 to 102400 で、ファイルシステムが拡張されたことを確認します。

2. 新しいファイルシステムのサイズを確認する

次に、df -h コマンドをもう一度実行して、ファイルシステムのサイズが変更を反映していることを確認します。

df -h /data

出力には、新しい、より大きなサイズが表示されるはずです。これは約 400 MiB です。

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/my_vg-my_lv     395M   29M  367M   8% /data

また、以前に作成したテストファイルがまだそのまま残っていることを確認することもできます。

cat /data/test.txt
My LVM is working!

おめでとうございます!物理ディスクのパーティション分割と物理ボリュームの作成から、ボリュームグループの構築、論理ボリュームの作成、フォーマットとマウント、そして最後に、データ損失なしでオンラインで動的に拡張することまで、LVM ワークフロー全体を正常に完了しました。

まとめ

この実験では、RHEL で論理ボリュームマネージャー (LVM) を使用してストレージをセットアップするための基本的なワークフローを学習しました。まず、物理ディスクを準備し、parted を使用して lvm フラグを設定したパーティションを作成し、次に pvcreate でそれを物理ボリューム (PV) として初期化しました。次に、この PV を vgcreate を使用して新しいボリュームグループ (VG) にプールしました。この VG から、lvcreate で論理ボリューム (LV) を切り出し、mkfs.xfs を使用して XFS ファイルシステムでフォーマットし、/etc/fstab にエントリを追加して永続的なマウントを設定しました。

この実験では、既存の論理ボリュームを拡張するプロセスを案内することで、LVM の柔軟性も示しました。これには、新しい物理ボリュームの準備、vgextend を使用してボリュームグループに追加して利用可能な総容量を増やすこと、そして lvextend で論理ボリューム自体を拡張することが含まれていました。最後に、xfs_growfs を使用して XFS ファイルシステムをオンラインでサイズ変更し、追加のストレージスペースをオペレーティングシステムで使用できるようにすることで、動的ストレージ管理のエンドツーエンドプロセスを完了しました。