hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

LVMの環境構築手順



1 LVM(Logical Volume Manage)とは?

複数のハードディスクやパーティションにまたがった記憶領域を、あたかも一つのディスクとして扱うことのできるディスク管理機能です。以下の手順で、論理ボリュームを作成し、その上にファイルシステムを作成してみます。

物理ボリューム作成(pvcreate)
    ↓
ボリュームグループ作成(vgcreate)
    ↓
論理ボリューム作成(lvcreate)
    ↓
論理ボリュームにファイルシステム作成
    ↓
作成したファイルシステムのマウント

2 検証環境

CentOS版数は以下のとおりです。仮想マシンは最小限の構成で作成しました。

[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
3.10.0-1160.el7.x86_64

3 パッケージのインストール

lvm2パッケージをインストールします。

[root@server ~]# yum -y install lvm2

版数を確認します。

 [root@server ~]# lvm version
   LVM version:     2.02.187(2)-RHEL7 (2020-03-24)
   Library version: 1.02.170-RHEL7 (2020-03-24)
   Driver version:  4.37.1
 -snip-

4 LVMコマンド一覧

  • 物理ボリュームの管理コマンド
コマンド 概要
pvcreate 物理ボリュームの作成
pvdisplay 物理ボリュームの表示
pvremove 物理ボリュームの削除
  • ボリュームグループの管理コマンド
コマンド 概要
vgcreate ボリュームグループの作成
vgdisplay ボリュームグループの表示
vgremove ボリュームグループの削除
vgextend ボリュームグループの拡張
vgreduce ボリュームグループの縮小
  • 論理ボリュームの管理コマンド
コマンド 概要
lvcreate 論理ボリュームの作成
lvdisplay 論理ボリュームの表示
lvremove 論理ボリュームの削除
lvextend 論理ボリュームの拡張
lvreduce 論理ボリュームの縮小

5 事前準備

ここでは、ループバックデバイスを使って、お手軽にLVMの各種コマンドの使い方を練習してみます。

5.1 ファイルの作成

ループバックデバイスとして使うファイルを2つ作成します。ファイルサイズはともに500Mです。ddコマンドの使い方は、ddコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# dd if=/dev/zero of=disk1.img bs=1024 count=512000
[root@server ~]# dd if=/dev/zero of=disk2.img bs=1024 count=512000

作成したファイルを確認します。

[root@server ~]# ls -lh disk*
-rw-r--r--. 1 root root 500M  3月  4 19:36 disk1.img
-rw-r--r--. 1 root root 500M  3月  4 19:37 disk2.img

5.2 ループバックデバイスの作成

ループバックデバイスを作成します。

[root@server ~]# losetup -f /root/disk1.img
[root@server ~]# losetup -f /root/disk2.img

作成したループバックデバイスを確認します。losetupコマンドの使い方は、losetupコマンドの使い方 - hana_shinのLinux技術ブログを参照ください。

[root@server ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img
/dev/loop1         0      0         0  0 /root/disk2.img

6 物理ボリュームの作成(pvcreate)

ループバックデバイスに物理ボリュームを作成します。

[root@server ~]# pvcreate /dev/loop0
  Physical volume "/dev/loop0" successfully created.

ループバックデバイスに物理ボリュームを作成します。

[root@server ~]# pvcreate /dev/loop1
  Physical volume "/dev/loop1" successfully created.

作成した物理ボリュームを確認します。

[root@server ~]# pvscan
  PV /dev/loop0                      lvm2 [500.00 MiB]
  PV /dev/loop1                      lvm2 [500.00 MiB]
  Total: 2 [1000.00 MiB] / in use: 0 [0   ] / in no VG: 2 [1000.00 MiB]

7 ボリュームグループの作成(vgcreate)

作成した2つの物理ボリュームから、vg01という名前のボリュームグループを作成します。

[root@server ~]# vgcreate vg01 /dev/loop0 /dev/loop1
  Volume group "vg01" successfully created

作成したボリュームグループを確認します。vg01という名前のボリュームグループが作成されたことがわかります。

[root@server ~]# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               992.00 MiB
  PE Size               4.00 MiB
  Total PE              248
  Alloc PE / Size       0 / 0
  Free  PE / Size       248 / 992.00 MiB
  VG UUID               7eh6C1-78dI-iUzt-alQK-QyWF-kgyg-2I94NO

8 論理ボリュームの作成(lvcreate)

ボリュームグループにlv01という名前の論理ボリュームを作成します。このとき、ボリュームグループ全体のサイズに対する割合を指定して論理ボリュームを作成します。ここでは、ボリュームグループ全てを論理ボリュームとして使用するため、-lに100%FREEと指定します。

[root@server ~]# lvcreate -l100%FREE -n lv01 vg01
  Logical volume "lv01" created.

作成した論理ボリュームを確認します。lv01という名前の論理ボリュームが作成できたことがわかります。また、LV Pathを確認すると、論理ボリュームが/dev/vg01/lv01であることがわかります。

[root@server ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                mdF76R-BUvE-TU6Q-vmZR-97fC-atsL-ZIOyb9
  LV Write Access        read/write
  LV Creation host, time server, 2022-03-04 19:48:40 +0900
  LV Status              available
  # open                 0
  LV Size                992.00 MiB
  Current LE             248
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

9 ファイルシステムの作成

論理ボリュームにxfsファイルシステムを作成してみます。

[root@server ~]# mkfs.xfs /dev/vg01/lv01
Discarding blocks...Done.
meta-data=/dev/vg01/lv01         isize=512    agcount=4, agsize=63488 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=253952, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

10 論理ボリュームのマウント

論理ボリュームを/mntにマウントします。

[root@server ~]# mount -o loop /dev/vg01/lv01 /mnt

マウントしたデバイスファイルシステムを確認します。

[root@server ~]# df -hT /mnt/
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
/dev/loop2     xfs      989M   33M  957M    4% /mnt

11 環境削除

バイスをアンマウントします。

[root@server ~]# umount /mnt

論理ボリュームを削除します。

[root@server ~]# lvremove /dev/vg01/lv01
Do you really want to remove active logical volume vg01/lv01? [y/n]: y
  Logical volume "lv01" successfully removed

ボリュームグループを削除します。

[root@server ~]# vgremove vg01
  Volume group "vg01" successfully removed

物理ボリューム(/dev/loop0)を削除します。

[root@server ~]# pvremove /dev/loop0
  Labels on physical volume "/dev/loop0" successfully wiped.

物理ボリューム(/dev/loop1)を削除します。

[root@server ~]# pvremove /dev/loop1
  Labels on physical volume "/dev/loop1" successfully wiped.

最後に、ループバックデバイスを削除します。まず、ループバックデバイスを確認します。/dev/loop0 ,/dev/loop1が存在することがわかります。

[root@server ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img
/dev/loop1         0      0         0  0 /root/disk2.img

ループバックデバイスを削除します。

[root@server ~]# losetup -d /dev/loop0
[root@server ~]# losetup -d /dev/loop1

ループバックデバイスを確認します。

[root@server ~]# losetup -l
[root@server ~]#

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ