2020年3月25日水曜日

【LVM入門】LinuxのLVMでディスク容量を拡張する

本記事ではLVM拡張手順の例として、2GBの容量を持つ/dev/sdbを拡張して5GBに拡張してみる。なお、LVMの領域はマウントした状態のままオンラインで拡張を行う。
※今までのLVM関連記事はこちら。↓
手順 記事
LVM領域作成 【LVM入門】LinuxのLVM領域を最短で作成する
LVM領域削除 【LVM入門】LinuxのLVMで作成したディスクを削除する
LVM領域拡張 【LVM入門】LinuxのLVMでディスク容量を拡張する←★本記事
LVM領域縮小 【LVM入門】LinuxのLVMでディスク容量を縮小する
VG・LV名前変更 【LVM入門】LinuxのLVMで作成済みのVGやLVの名前を変更する

環境

環境情報は以下の通り。下から順に削除していくイメージとなる。
  • OS : Red Hat Enterprise Linux 7.6
  • PV : /dev/sdb1
  • VG : vg_sdb1
  • LV : lv_sdb1
  • マウントポイント : /mnt
作業前のdfコマンドの状態を以下に記載しておく。/dev/mapper/vg_sdb1-lv_sdb1となっている2GBの領域を拡張し4GBにする。
[root@localhost ~]# df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root          14G  1.4G   13G   11% /
devtmpfs                      908M     0  908M    0% /dev
tmpfs                         920M     0  920M    0% /dev/shm
tmpfs                         920M  8.9M  911M    1% /run
tmpfs                         920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                    1014M  146M  869M   15% /boot
tmpfs                         184M     0  184M    0% /run/user/0
/dev/mapper/vg_sdb1-lv_sdb1   2.0G   33M  2.0G    2% /mnt

LVM容量拡張手順

1. 拡張前のディスク状態を確認

[root@localhost ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt
Disk identifier: B383352C-EF95-49AC-AA28-A6A99BB2A11C


#         Start          End    Size  Type            Name
 1         2048      4192255      2G  Linux LVM

[root@localhost ~]# ls -l /mnt/
合計 0
-rw-r--r--. 1 root root 0  2月  8 19:55 test.txt

2. ストレージやVMware上でディスクを拡張

ストレージやVMwareの仮想マシンの設定などで、ディスクの拡張を行う。今回はVMware Host Clientにて拡張作業を実施した。


拡張しただけでは容量を認識しないので、ディスク容量は変わらず2GBのままとなる。
[root@localhost ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt
Disk identifier: B383352C-EF95-49AC-AA28-A6A99BB2A11C


#         Start          End    Size  Type            Name
 1         2048      4192255      2G  Linux LVM

3. 拡張後OSでリスキャンし、容量を認識させる

リスキャンコマンドはecho 1 > /sys/class/block/_device-name_/device/rescanとなる。_device-name_は今回の場合はsdbとなる。
[root@localhost ~]# echo 1 > /sys/class/block/sdb/device/rescan
リスキャンしてfdisk -lで確認すると、「Disk label type」がgptではなくdosとなり表示がおかしくなるが、これは次の手順で修正する。
[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos ←★gptではなくdosになっている
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1     4194303     2097151+  ee  GPT

4. GPTテーブルの修復

リスキャンし、parted -lコマンドで確認しようとすると、「あるべき GPT テーブルのバックアップがディスクの最後にありません」というエラーが表示される。そのまま修正することができるので「F」を入力して修正すること。
[root@localhost ~]# parted -l
モデル: VMware Virtual disk (scsi)
ディスク /dev/sda: 17.2GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  xfs               boot
 2    1075MB  17.2GB  16.1GB  primary                    lvm


エラー: あるべき GPT テーブルのバックアップがディスクの最後にありません。他の OS
がディスクはもっと小さいものだと思っているのかもしれません。バックアップを最後に持ってきて(古いバックアップを削除して)修復しますか?
修正/Fix/無視(I)/Ignore/取消(C)/Cancel? F ←★Fを入力
警告: /dev/sdb で利用可能な領域の一部が利用されていません。GPT を修正して全ての 領域を利用可能にするか(4194304
ブロック増えます)、このままで続行することができますが、どうしますか?
修正/Fix/無視(I)/Ignore? F ←★Fを入力
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  2146MB  2145MB                          lvm


~(以下略)~
fdiskコマンドも表示が正常に戻る。
[root@localhost ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt
Disk identifier: B383352C-EF95-49AC-AA28-A6A99BB2A11C


#         Start          End    Size  Type            Name
 1         2048      4192255      2G  Linux LVM

5. パーティションの拡張

partedコマンドでパーティションを拡張する。
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) p ←★現在のパーティション情報を確認
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  2146MB  2145MB                          lvm

(parted) p free ←★現在のパーティションの空き容量を確認
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
      17.4kB  1049kB  1031kB  空き容量
 1    1049kB  2146MB  2145MB                          lvm
      2146MB  4295MB  2149MB  空き容量

(parted) resizepart ←★パーティション容量拡張
パーティション番号? 1
終了?  [2146MB]? 100%
(parted) p free
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
      17.4kB  1049kB  1031kB  空き容量
 1    1049kB  4295MB  4294MB                          lvm

(parted) q ←★parted終了
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
なお、resizeコマンドは、RHEL 7.6に付属しているpartedコマンドのバージョン3.0では使えなくなったので注意。
(parted) resize
エラー: The resize command has been removed in parted 3.0

6. PV容量拡張

pvresizeコマンドでPVの容量を拡張する。
[root@localhost ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_sdb1
  PV Size               <2.00 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              511
  Free PE               0
  Allocated PE          511
  PV UUID               pmrFQB-o1oh-VGLc-Aogy-tOoC-PYdz-qizm2I

[root@localhost ~]# pvresize /dev/sdb1
  Physical volume "/dev/sdb1" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

[root@localhost ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_sdb1
  PV Size               <4.00 GiB / not usable 1.98 MiB ←★容量が4.00GiBに増えている
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1023
  Free PE               512
  Allocated PE          511
  PV UUID               pmrFQB-o1oh-VGLc-Aogy-tOoC-PYdz-qizm2I

7. VG確認

PVの容量が拡張されれば、自動的にVGの容量も増えるので、確認だけしておく。
[root@localhost ~]# vgdisplay vg_sdb1
  --- Volume group ---
  VG Name               vg_sdb1
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <4.00 GiB ←★容量が4.00GiBに増えている
  PE Size               4.00 MiB
  Total PE              1023
  Alloc PE / Size       511 / <2.00 GiB
  Free  PE / Size       512 / 2.00 GiB
  VG UUID               rV0GBn-DK2o-5STl-LJCX-y3yF-1kB0-eoqTP9

8. LV容量拡張

lvextendコマンドで容量を拡張する。空き容量をすべて拡張するので**+100%FREEを指定して拡張する(+を付けないと拡張されないので注意)**。
[root@localhost ~]# lvdisplay /dev/vg_sdb1/lv_sdb1
  --- Logical volume ---
  LV Path                /dev/vg_sdb1/lv_sdb1
  LV Name                lv_sdb1
  VG Name                vg_sdb1
  LV UUID                WBUK0w-La44-rff0-DLIY-QpWK-a72w-cfzOEF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-02-08 19:53:50 +0900
  LV Status              available
  # open                 1
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

[root@localhost ~]# lvextend -l +100%FREE /dev/vg_sdb1/lv_sdb1
  Size of logical volume vg_sdb1/lv_sdb1 changed from 2.00 GiB (512 extents) to <4.00 GiB (1023 extents).
  Logical volume vg_sdb1/lv_sdb1 successfully resized.

[root@localhost ~]# lvdisplay /dev/vg_sdb1/lv_sdb1
  --- Logical volume ---
  LV Path                /dev/vg_sdb1/lv_sdb1
  LV Name                lv_sdb1
  VG Name                vg_sdb1
  LV UUID                WBUK0w-La44-rff0-DLIY-QpWK-a72w-cfzOEF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-02-08 19:53:50 +0900
  LV Status              available
  # open                 1
  LV Size                <4.00 GiB ←★容量が4.00GiBに増えている
  Current LE             1023
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

9. ファイルシステム拡張

xfsの領域は、xfs_growfsコマンドで拡張する。xfs_growfsコマンドはファイルシステムをマウントした状態で実行すること。また、xfs_growfsコマンドでは、デバイス名ではなくマウントポイントを指定すること。
[root@localhost ~]# xfs_growfs /mnt
meta-data=/dev/mapper/vg_sdb1-lv_sdb1 isize=512    agcount=4, agsize=130816 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=523264, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               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 523264 to 1047552
dfコマンドで確認すると、/mnt領域の容量が4.0GBに拡張していることが確認できる。
[root@localhost ~]# df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root          14G  1.4G   13G   11% /
devtmpfs                      908M     0  908M    0% /dev
tmpfs                         920M     0  920M    0% /dev/shm
tmpfs                         920M  8.9M  911M    1% /run
tmpfs                         920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                    1014M  146M  869M   15% /boot
tmpfs                         184M     0  184M    0% /run/user/0
/dev/mapper/vg_sdb1-lv_sdb1   4.0G   33M  4.0G    1% /mnt ←★容量が4.00GiBに増えている

ちなみに、xfs_growfsを実行した際に、マウントポイントではなくデバイス名をした場合、「デバイス is not a mounted XFS filesystem」のエラーが出る場合がある (成功する場合もある)。

[root@localhost ~]# xfs_growfs /dev/mapper/rhel-root
xfs_growfs: /dev/mapper/rhel-root is not a mounted XFS filesystem

この場合は、デバイスではなくマウントポイントを指定して再実行してみよう。以下は「/」を拡張する際のコマンド実行例となる。

[root@localhost ~]# xfs_growfs /
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=839424 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=3357696, 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 3357696 to 14892032
なお、xfsの領域拡張はresize2fsではできないので注意。resize2fsで実施しようとすると、「Bad magic number in super-block」というエラーで失敗する。
[root@localhost ~]# resize2fs /dev/vg_sdb1/lv_sdb1
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/vg_sdb1/lv_sdb1
Couldn't find valid filesystem superblock.
以上で作業は完了となる。

0 件のコメント:

コメントを投稿

人気の投稿