LVMでディスク拡張2

February 02, 2021

前回の続きです。

  1. ディスクの追加
  2. 物理ボリュームの作成
  3. 物理ボリュームをボリュームグループへ追加
  4. 論理ボリュームの拡張

の順番で作業していきます。

1. 仮想サーバへの仮想ディスク追加。

サーバをシャットダウンし、Hyper-Vマネージャーから仮想ディスクを追加します。
ハードドライブを選択して追加を押します。

1.jpg

未使用の場所を選択し、新規を押します。

2.jpg

次へを押します。

3.jpg

容量可変を選択し、次へを押します。

4.jpg

わかりやすい名前を付け、次へを押します。

5.jpg

新しい空の仮想ハードディスクを作成するを選択し、希望する容量を入力(今回はただの練習なので4Gにしました)、次へを押します。

6.jpg

内容に問題がなければ完了とします。

7.jpg

設定画面を閉じた後、サーバを起動してsshでログインします。ログイン後、lsblkコマンドで確認してみます。

$ lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   127G  0 disk
├─sda1            8:1    0   200M  0 part /boot/efi
├─sda2            8:2    0     1G  0 part /boot
└─sda3            8:3    0 125.8G  0 part
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0     1G  0 lvm  [SWAP]
  └─centos-home 253:2    0  74.8G  0 lvm  /home
sdb               8:16   0     4G  0 disk
sr0              11:0    1  1024M  0 rom
$

sdbが追加されました。

2. 物理ボリュームの作成

lvmdiskscanというコマンドでLVMから参照できるHDDの情報を一覧表示することができるようなので実行してみます。

$ sudo /sbin/lvmdiskscan
  /dev/sda1 [     200.00 MiB]
  /dev/sda2 [       1.00 GiB]
  /dev/sda3 [     125.80 GiB] LVM physical volume
  /dev/sdb  [       4.00 GiB]
  1 disk
  2 partitions
  0 LVM physical volume whole disks
  1 LVM physical volume
$

/dev/sda3がLVM physical volumeになっていて、/dev/sdbが存在します。/dev/sdbをpvcreateコマンドで物理ボリュームにしてみます。

$ sudo /sbin/pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
$ sudo /sbin/lvmdiskscan
  /dev/sda1 [     200.00 MiB]
  /dev/sda2 [       1.00 GiB]
  /dev/sda3 [     125.80 GiB] LVM physical volume
  /dev/sdb  [       4.00 GiB] LVM physical volume
  0 disks
  2 partitions
  1 LVM physical volume whole disk
  1 LVM physical volume
$

disksが減り、LVM physical volume whole diskが1増えました。/dev/sdbがディスクからLVM physical volumeに変わったようです。
pvdisplayも観てみます。

$ sudo /sbin/pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               centos
  PV Size               125.80 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              32205
  Free PE               1
  Allocated PE          32204
  PV UUID               F0ItPv-jpOz-A6o7-LDbQ-f8Zv-Wcv2-kTnyaG

  "/dev/sdb" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name
  PV Size               4.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               6nQ880-Zidy-gUEb-atXL-xkgI-8peq-splD6H

$

/dev/sdbがphysical volumeになっていますがまだAllocatableになってません。また、VG Nameも空になっています。

3. 物理ボリュームをボリュームグループへ追加

既存のボリュームグループに新しく作成した物理ボリュームを追加します。まずは、ボリュームグループを確認します。-v(verbose)オプションをつけると詳細情報が出てくるようなので-vをつけて実行します。

$ sudo /sbin/vgdisplay -v
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               125.80 GiB
  PE Size               4.00 MiB
  Total PE              32205
  Alloc PE / Size       32204 / <125.80 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               510xRa-4lvI-s60z-E3ji-dRjf-F15Z-ZFcqnT

  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                jCgO6B-3uus-3miN-hOmq-Ymaq-7y3S-qfQa9D
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 2
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/home
  LV Name                home
  VG Name                centos
  LV UUID                Qu2Nej-yB1c-hl8L-4mF1-q9Ok-wSvh-BuCWeh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 1
  LV Size                <74.80 GiB
  Current LE             19148
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                mW4aXn-KUik-P3IK-Ep58-ryvj-bRZ0-aebUO0
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:05 +0900
  LV Status              available
  # open                 1
  LV Size                50.00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sda3
  PV UUID               F0ItPv-jpOz-A6o7-LDbQ-f8Zv-Wcv2-kTnyaG
  PV Status             allocatable
  Total PE / Free PE    32205 / 1

$

physical volumesには/dev/sda3しかありません。vgextendコマンドで/dev/sdbをVG(centos)に追加します。

$ sudo /sbin/vgextend centos /dev/sdb
  Volume group "centos" successfully extended
$ sudo /sbin/vgdisplay -v
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <129.80 GiB
  PE Size               4.00 MiB
  Total PE              33228
  Alloc PE / Size       32204 / <125.80 GiB
  Free  PE / Size       1024 / 4.00 GiB
  VG UUID               510xRa-4lvI-s60z-E3ji-dRjf-F15Z-ZFcqnT

  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                jCgO6B-3uus-3miN-hOmq-Ymaq-7y3S-qfQa9D
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 2
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/home
  LV Name                home
  VG Name                centos
  LV UUID                Qu2Nej-yB1c-hl8L-4mF1-q9Ok-wSvh-BuCWeh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 1
  LV Size                <74.80 GiB
  Current LE             19148
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                mW4aXn-KUik-P3IK-Ep58-ryvj-bRZ0-aebUO0
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:05 +0900
  LV Status              available
  # open                 1
  LV Size                50.00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sda3
  PV UUID               F0ItPv-jpOz-A6o7-LDbQ-f8Zv-Wcv2-kTnyaG
  PV Status             allocatable
  Total PE / Free PE    32205 / 1

  PV Name               /dev/sdb
  PV UUID               6nQ880-Zidy-gUEb-atXL-xkgI-8peq-splD6H
  PV Status             allocatable
  Total PE / Free PE    1023 / 1023

$

physical volumesに/dev/sdbが追加されました。pvdisplayも見てみます。

$ sudo /sbin/pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               centos
  PV Size               125.80 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              32205
  Free PE               1
  Allocated PE          32204
  PV UUID               F0ItPv-jpOz-A6o7-LDbQ-f8Zv-Wcv2-kTnyaG

  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               centos
  PV Size               4.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1023
  Free PE               1023
  Allocated PE          0
  PV UUID               6nQ880-Zidy-gUEb-atXL-xkgI-8peq-splD6H

$

/dev/sdbのVG NameがcentosになってAllocatableになりました。

4. 論理ボリュームの拡張

追加した4Gのハードディスクを/dev/centos/homeと/dev/centos/swapに半分ずつ割り当てます。現状のディスク容量を確認。

$ df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  200M     0  200M    0% /dev
tmpfs                     212M     0  212M    0% /dev/shm
tmpfs                     212M  4.4M  207M    3% /run
tmpfs                     212M     0  212M    0% /sys/fs/cgroup
/dev/mapper/centos-root    50G  2.3G   48G    5% /
/dev/sda2                1014M  129M  886M   13% /boot
/dev/sda1                 200M   12M  189M    6% /boot/efi
/dev/mapper/centos-home    75G   33M   75G    1% /home
tmpfs                      43M     0   43M    0% /run/user/1000
$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1048572 1544    -2
$

改めて、vgdisplayコマンドで空きを確認。

$ sudo /sbin/vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <129.80 GiB
  PE Size               4.00 MiB
  Total PE              33228
  Alloc PE / Size       32204 / <125.80 GiB
  Free  PE / Size       1024 / 4.00 GiB
  VG UUID               510xRa-4lvI-s60z-E3ji-dRjf-F15Z-ZFcqnT

$

Free PE / SIZEが 4.00 GiBになっています。lvextendコマンドで空き容量の半分を/dev/centos/homeに割り当てます。

$ sudo /sbin/lvextend -l +50%FREE /dev/centos/home
  Size of logical volume centos/home changed from <74.80 GiB (19148 extents) to <76.80 GiB (19660 extents).
  Logical volume centos/home successfully resized.
$ sudo /sbin/lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                jCgO6B-3uus-3miN-hOmq-Ymaq-7y3S-qfQa9D
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 2
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/home
  LV Name                home
  VG Name                centos
  LV UUID                Qu2Nej-yB1c-hl8L-4mF1-q9Ok-wSvh-BuCWeh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 1
  LV Size                <76.80 GiB
  Current LE             19660
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                mW4aXn-KUik-P3IK-Ep58-ryvj-bRZ0-aebUO0
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:05 +0900
  LV Status              available
  # open                 1
  LV Size                50.00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

$ df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  200M     0  200M    0% /dev
tmpfs                     212M     0  212M    0% /dev/shm
tmpfs                     212M  4.4M  207M    3% /run
tmpfs                     212M     0  212M    0% /sys/fs/cgroup
/dev/mapper/centos-root    50G  2.3G   48G    5% /
/dev/sda2                1014M  129M  886M   13% /boot
/dev/sda1                 200M   12M  189M    6% /boot/efi
/dev/mapper/centos-home    75G   33M   75G    1% /home
tmpfs                      43M     0   43M    0% /run/user/1000
$

/dev/centos/homeのLV Sizeが74.80 GiBから76.80 GiBに増えていますが、ファイルシステムはまだ拡張されていないためdfでみたサイズは変わっていません。
dfコマンドに-Tオプションをつけてファイルシステムの形式を確認します。

$ df -Th
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                devtmpfs   200M     0  200M    0% /dev
tmpfs                   tmpfs      212M     0  212M    0% /dev/shm
tmpfs                   tmpfs      212M  4.4M  207M    3% /run
tmpfs                   tmpfs      212M     0  212M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs         50G  2.3G   48G    5% /
/dev/sda2               xfs       1014M  129M  886M   13% /boot
/dev/sda1               vfat       200M   12M  189M    6% /boot/efi
/dev/mapper/centos-home xfs         75G   33M   75G    1% /home
tmpfs                   tmpfs       43M     0   43M    0% /run/user/1000
$

/dev/centos/home(/dev/mapper/centos-home)のタイプがxfsなので、xfs_growfsコマンドでファイルシステムを拡張します

$ sudo /sbin/xfs_growfs /dev/centos/home
meta-data=/dev/mapper/centos-home isize=512    agcount=4, agsize=4901888 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=19607552, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=9574, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 19607552 to 20131840
$ df -Th
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                devtmpfs   200M     0  200M    0% /dev
tmpfs                   tmpfs      212M     0  212M    0% /dev/shm
tmpfs                   tmpfs      212M  4.4M  207M    3% /run
tmpfs                   tmpfs      212M     0  212M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs         50G  2.3G   48G    5% /
/dev/sda2               xfs       1014M  129M  886M   13% /boot
/dev/sda1               vfat       200M   12M  189M    6% /boot/efi
/dev/mapper/centos-home xfs         77G   33M   77G    1% /home
tmpfs                   tmpfs       43M     0   43M    0% /run/user/1000
$

/dev/centos/home(/dev/mapper/centos-home)が75Gから77Gに増えました。続いてswap領域のサイズを変更します。あえて、swapoffにしないで割り当てを増やしてみます。lvextendコマンドで残りすべての容量をswapに割り当てます。

$ sudo /sbin/lvextend -l +100%FREE /dev/centos/swap
  Size of logical volume centos/swap changed from 1.00 GiB (256 extents) to 3.00 GiB (768 extents).
  Logical volume centos/swap successfully resized.
$ sudo /sbin/lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                jCgO6B-3uus-3miN-hOmq-Ymaq-7y3S-qfQa9D
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 2
  LV Size                3.00 GiB
  Current LE             768
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/home
  LV Name                home
  VG Name                centos
  LV UUID                Qu2Nej-yB1c-hl8L-4mF1-q9Ok-wSvh-BuCWeh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:04 +0900
  LV Status              available
  # open                 1
  LV Size                <76.80 GiB
  Current LE             19660
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                mW4aXn-KUik-P3IK-Ep58-ryvj-bRZ0-aebUO0
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-11-17 02:51:05 +0900
  LV Status              available
  # open                 1
  LV Size                50.00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
$

特にエラーになることもなく、/dev/centos/swapの容量を1Gから3Gに増やすことができました。vgdisplayで割り当てされてない容量を確認します。

$ sudo /sbin/vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <129.80 GiB
  PE Size               4.00 MiB
  Total PE              33228
  Alloc PE / Size       33228 / <129.80 GiB
  Free  PE / Size       0 / 0
  VG UUID               510xRa-4lvI-s60z-E3ji-dRjf-F15Z-ZFcqnT

$

Free PE / Sizeが0になっています。すべて割り当てられました。swaponコマンドでswap領域のサイズを確認してみます。

$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1048572 2824    -2
$

1Gのまま変わってません。swapoff && swaponしてみます。

$ sudo swapoff -a && swapon -a
swapon: /dev/mapper/centos-swap を open できません: 許可がありません
$ swapon -s
$ free -m
              total        used        free      shared  buff/cache   available
Mem:            422         275          22          25         124         109
Swap:             0           0           0
$

想定外のエラー。swapon出来ません。free等で確認するとswap領域のサイズがになってしまいました。再度swaponコマンドを打ってみます。

$ sudo swapon -a
$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       1048572 0       -2
$ free -m
              total        used        free      shared  buff/cache   available
Mem:            422         275          22          25         124         109
Swap:          1023           0        1023
$

swap領域は復活しましたがサイズは増えていません。xfs_growfs的作業が必要なのでしょか。
そちらの調査の前にswapon -aが失敗した原因を少し調べてみます。まずはもう一回swapoff -a && swapon -aを打ってみます。

$ sudo swapoff -a && swapon -a
swapon: /dev/mapper/centos-swap を open できません: 許可がありません
$

許可がありませんということは権限回りでしょうか。sudoで&&を使用していることが原因かを切り分けるためrootになって再度実行してみます。

$ sudo -i
# free -m
              total        used        free      shared  buff/cache   available
Mem:            422         277          19          25         124         107
Swap:          1023           0        1023
# swapoff -a && swapon -a
# free -m
              total        used        free      shared  buff/cache   available
Mem:            422         278          16          25         127         106
Swap:          1023           0        1023
# swapoff -a && swapon -a
# exit
ログアウト
$ sudo swapoff -a && swapon -a
swapon: /dev/mapper/centos-swap を open できません: 許可がありません
$

やはりsudoで実行したからのようです。sudoでコマンドを連結して実行する場合はsudoを2回いれればよいのでしょうか。

$ sudo swapoff -a && sudo swapon -a
$ free -m
              total        used        free      shared  buff/cache   available
Mem:            422         276          18          25         127         109
Swap:          1023           0        1023
$ sudo swapoff -a && sudo swapon -a
$ free -m
              total        used        free      shared  buff/cache   available
Mem:            422         276          18          25         127         108
Swap:          1023           0        1023
$

いけました。やはり&&のあともsudoがいるみたいです。ちょっと調べてみるとここに回答がありました。ちょっと考えてみればわかることかもしれませんが、sudo swapoff -a && swapon -aはsudo swapoff -aとswaponに別れて実行されてしまうからでした。whoamiのを使った例が分かりやすいので載せておきます。

$ sudo whoami && whoami
root
staring_lion  # 自ユーザ名
$ sudo whoami && sudo whoami
root
root
$

また、上記ページには-cオプションを使ってコマンドを文字列で渡して実行する例が記載されています。こちらのほうがエレガントかもしれません。

$ sudo /bin/bash -c "whoami && whoami"
root
root
$

勉強になりました。あとはswapの領域拡張の問題を解決します。素直にググります。ここを参考に、swapoff, mkswap, swaponの手順を実行してみます。

$ sudo swapoff -a
$ sudo mkswap /dev/centos/swap
mkswap: /dev/centos/swap: warning: wiping old swap signature.
スワップ空間バージョン1を設定します、サイズ = 3145724 KiB
ラベルはありません, UUID=0faf720d-4c29-4d73-8e8a-8163fab93488
$ sudo swapon -a
$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       3145724 0       -2
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           422M        288M        8.6M         25M        124M         96M
Swap:          3.0G          0B        3.0G
$

無事、swap領域も拡張されました