Opensourcetechブログ

OpensourcetechによるNGINX/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

LVM(Logical Volume Manager)でディスク容量を増加させる on CentOS8


LinuCエヴァンジェリストの鯨井貴博@opensourcetechです。

ディスク容量がなくなった際に、LVM(Logical Volume Manager)を使って容量を増やす方法の紹介です。


まず、現状のディスク容量の確認から。
以下を見るとわかりますが、/dev/mapper/cl-rootの使用率が100%となり、全く余裕がない状態です。

[root@centos8test /]# df -h
ファイルシス        サイズ  使用  残り 使用% マウント位置
devtmpfs              897M     0  897M    0% /dev
tmpfs                 914M     0  914M    0% /dev/shm
tmpfs                 914M  8.5M  906M    1% /run
tmpfs                 914M     0  914M    0% /sys/fs/cgroup
/dev/mapper/cl-root    17G   17G  132K  100% /
/dev/sda1             976M  128M  782M   15% /boot
tmpfs                 183M     0  183M    0% /run/user/0


この状態だと、ファイルをディスクに書き込もうとしても、以下のようにエラーとなります。
※カーネルの再構築中にディスク容量が不足になっています。

cp: '/lib/modules/5.7.10/kernel/drivers/infiniband/hw/cxgb4/iw_cxgb4.ko' の書き込みエラー: No space left on device
make[1]: *** [scripts/Makefile.modinst:33: drivers/infiniband/hw/cxgb4/iw_cxgb4.ko] エラー 1
make: *** [Makefile:1353: _modinst_] エラー 2



容量不足に陥ったPCの電源を落とした後、物理的なディスク(HDD)を追加します。
今回は、Virtualbox上でディスク追加しました。
f:id:opensourcetech:20200724093239p:plain f:id:opensourcetech:20200724093341p:plain

PCの起動。
追加されたディスクが認識されているか、確認します。

[root@centos8test ~]# dmesg | grep sdb
[    2.979261] sd 3:0:0:0: [sdb] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB)
[    2.979671] sd 3:0:0:0: [sdb] Write Protect is off
[    2.979980] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    2.979987] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.981727] sd 3:0:0:0: [sdb] Attached SCSI disk
[root@centos8test ~]# dmesg | grep sdc
[root@centos8test ~]# dmesg | grep sdb
[    2.979261] sd 3:0:0:0: [sdb] 41943040 512-byte logical blocks: (21.5 GB/20.0 GiB)
[    2.979671] sd 3:0:0:0: [sdb] Write Protect is off
[    2.979980] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    2.979987] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.981727] sd 3:0:0:0: [sdb] Attached SCSI disk
[root@centos8test ~]# ll /dev/sdb
brw-rw----. 1 root disk 8, 16  7月 24 09:35 /dev/sdb



pvcreateコマンドで、物理ボリューム(PV)の作成します。
pvdisplayコマンドで確認もしておきます。

[root@centos8test ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

[root@centos8test ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               <19.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4863
  Free PE               0
  Allocated PE          4863
  PV UUID               1nn1XI-1AAD-LUN3-iRG5-8yMu-VZvl-2Ir5L4

  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               liQMQG-AZwk-ZONh-64fM-rR9U-UnJo-6IoS46



続いて、ボリュームグループ(VG)の拡張。
vgdisplayコマンドで確認、vgextendコマンドで物理ボリューム(/dev/sdb)を追加します。

[root@centos8test ~]# vgdisplay
  --- Volume group ---
  VG Name               cl
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <19.00 GiB
  PE Size               4.00 MiB
  Total PE              4863
  Alloc PE / Size       4863 / <19.00 GiB
  Free  PE / Size       0 / 0
  VG UUID               76eOzR-XLIy-8ViI-peX1-sfvw-YqiK-frgAF1

[root@centos8test ~]# vgextend cl /dev/sdb
  Volume group "cl" successfully extended

[root@centos8test ~]# vgdisplay
  --- Volume group ---
  VG Name               cl
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               38.99 GiB
  PE Size               4.00 MiB
  Total PE              9982
  Alloc PE / Size       4863 / <19.00 GiB
  Free  PE / Size       5119 / <20.00 GiB
  VG UUID               76eOzR-XLIy-8ViI-peX1-sfvw-YqiK-frgAF1



そして、論理ボリューム(LV)の増加。
対象となるのは、/dev/cl/rootです。

[root@centos8test ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                NGr38q-VAUk-AAXz-JvDF-N4c2-BWxG-Xm4oP4
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-07-23 11:13:59 +0900
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                jz1MtB-YopA-uvzG-ejzv-nPRR-UIbY-dKSiV1
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-07-23 11:13:59 +0900
  LV Status              available
  # open                 1
  LV Size                <17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0



論理ボリュームの容量拡張。
「+100%FREE」をオプションに指定して、物理ボリュームにで割り当てることが可能な全ての容量を拡張対象とします。

[root@centos8test ~]# lvextend -l +100%FREE /dev/cl/root
  Size of logical volume cl/root changed from <17.00 GiB (4351 extents) to 36.99 GiB (9470 extents).
  Logical volume cl/root successfully resized.

[root@centos8test ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                NGr38q-VAUk-AAXz-JvDF-N4c2-BWxG-Xm4oP4
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-07-23 11:13:59 +0900
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                jz1MtB-YopA-uvzG-ejzv-nPRR-UIbY-dKSiV1
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-07-23 11:13:59 +0900
  LV Status              available
  # open                 1
  LV Size                36.99 GiB
  Current LE             9470
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0



仕上げに、ファイルシステムで認識しているサイズを拡張します。
これを行わないと、追加した論理ボリュームサイズが認識されないので、注意が必要です。
なお、今回使われているファイルシステムはXFSなのでxfs_growfsコマンドを使っていますが、ext4の場合はresize2fsコマンドを使います。

[root@centos8test ~]# df -h
ファイルシス        サイズ  使用  残り 使用% マウント位置
devtmpfs              897M     0  897M    0% /dev
tmpfs                 914M     0  914M    0% /dev/shm
tmpfs                 914M  8.5M  906M    1% /run
tmpfs                 914M     0  914M    0% /sys/fs/cgroup
/dev/mapper/cl-root    17G   17G   32M  100% /
/dev/sda1             976M  128M  782M   15% /boot
tmpfs                 183M     0  183M    0% /run/user/0

[root@centos8test ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=917728k,nr_inodes=229432,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime,seclabel)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpu,cpuacct)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,rdma)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_cls,net_prio)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=28,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=17730)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel,pagesize=2M)
debugfs on /sys/kernel/debug type debugfs (rw,relatime,seclabel)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=187088k,mode=700)

[root@centos8test ~]# xfs_growfs /dev/cl/root
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=1113856 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=4455424, 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 4455424 to 9697280

[root@centos8test ~]# df -h
ファイルシス        サイズ  使用  残り 使用% マウント位置
devtmpfs              897M     0  897M    0% /dev
tmpfs                 914M     0  914M    0% /dev/shm
tmpfs                 914M  8.5M  906M    1% /run
tmpfs                 914M     0  914M    0% /sys/fs/cgroup
/dev/mapper/cl-root    37G   18G   20G   47% /
/dev/sda1             976M  128M  782M   15% /boot
tmpfs                 183M     0  183M    0% /run/user/0



これでディスク容量の拡張、完了です!

Opensourcetech by Takahiro Kujirai