LVM環境下での仮想ディスク伸長操作

![RockyLinux-8.4](https://img.shields.io/badge/RockyLinux-8.4-brightgreen)

## 概要
仮想マシン環境にてテンプレートをよく構築するのですが、設定内容も物理構成も出来るだけ小さくしています。仮想マシンならではの「あとからディスク増量」が可能ですので、仕様や必要に応じて増量すればイイジャン！ただ、あとからディスク増量を行うとWindows系であれば全部オンラインでGUI上で可能なのですが、RHEL系は若干面倒です。コピペレベルで出来るように手順を残すことにしました。
**コマンドをミスるとデータが消し飛ぶので注意。**

数字がたくさん表示されますが、もちろん環境によってバラバラですので適宜読み替えて下さい。今回は例として、Hyper-Vの第2世代仮想マシンとして、LVMにて40GBディスクをext4またはxfsでrootに割り当てているRedHat環境を、100GBに増量した時の対応内容を記載します。


## 仮想ディスクの伸長
Hyper-Vの既存仮想ディスクの拡張機能を使って物理的なサイズを変更します。今回は40GBから100GBにマシマシしました。



## LVMボリュームの伸長
OSインストールメディアを起動し、レスキューモードのシェルを利用して拡張していきます。

```shell-session:レスキューモードShell
# parted
> unit s
> ptint free
GPTが保持しているディスクサイズと実際のディスクサイズが合っていない旨の警告が表示された場合はFixする。
> Fix
※下記結果をどこかに控えておくこと。
Number Start      End         Size        FileSystem    Name                    Flags
       34s        2047s       2014s       Free Space
 1     2048s      526335s     524288s     fat16         EFI System Partition    boot, esp
 2     526336s    2623487s    2097152s    xfs
 3     2623488s   83884031s   81260544s                                        lvm
       83884032s  209715166s  125831135s  Free Space

※既存のLVMボリューム情報を削除する。
※このコマンドだけだとパーティション情報が消えるだけであって、データ自体は消えていないのでビビらないように。
> rm 3

※新たにLVMパーティションを切りなおす。ついでに末尾セクタまで伸ばす
> mkpart " " 先頭セクタ 末尾セクタ
例:
> mkpart " " 2623488s 209715166s

> print free
Number Start      End         Size        FileSystem    Name                    Flags
       34s        2047s       2014s       Free Space
 1     2048s      526335s     524288s     fat16         EFI System Partition    boot, esp
 2     526336s    2623487s    2097152s    xfs
 3     2623488s   209715166s  207091679s

> set LVMパーティション番号 lvm on
例:
> set 3 lvm on

> print free
Number Start      End         Size        FileSystem    Name                    Flags
       34s        2047s       2014s       Free Space
 1     2048s      526335s     524288s     fat16         EFI System Partition    boot, esp
 2     526336s    2623487s    2097152s    xfs
 3     2623488s   209715166s  207091679s                                        lvm

> quit

# pvs
  PV           VG          Fmt     Attr   PSize      PFree
  /dev/sda3    LogVol00    lvm2    a--    <38.75g    0
# pvresize 対象のLVM物理ボリューム
例:
# pvresize /dev/sda3
# pvs
  PV           VG          Fmt     Attr   PSize      PFree
  /dev/sda3    LogVol00    lvm2    a--    <98.75g    60.00g

# vgchange -a y
# pvs
  PV           VG          Fmt     Attr   PSize      PFree
  /dev/sda3    LogVol00    lvm2    a--    <38.75g    60.00g
# lvextend -l +100%FREE 対象のLVM論理ボリューム
例:
# lvextend -l +100%FREE /dev/LogVol00/root
# lvs
  LV   VG        Attr       LSize ...
  root LogVol00  -wi-a----- <98.75g ...
# pvs
  PV           VG          Fmt     Attr   PSize      PFree
  /dev/sda3    LogVol00    lvm2    a--    <98.75g    0
```

### ファイルシステムの伸長【EXT4の場合】
EXT4の場合はレスキューモードで拡張します。

```shell-session:レスキューモードShell
# fsck.ext4 -f 対象のLVM論理ボリューム
# resize2fs 対象のLVM論理ボリューム
例:
# fsck.ext4 -f /dev/LogVol00/root
# resize2fs /dev/LogVol00/root

# reboot
```

再起動してメディアを抜き、通常のOSを起動して下さい。

以下はOS起動状態での作業です。

```shell-session:
# df -Th
ファイルシス              タイプ   サイズ  使用  残り 使用% マウント位置
/dev/mapper/LogVol00-root ext4        99G   16G   84G   16% /
/dev/sda2                 ext4      1014M  193M  822M   20% /boot
/dev/sda1                 vfat       256M  5.8M  250M    3% /boot/efi
```



### ファイルシステムの伸長【XFSの場合】
XFSの場合はOSを起動してオンライン状態で拡張するため、レスキューモードでの作業は終了です。再起動してメディアを抜き、通常のOSを起動して下さい。

```shell-session:レスキューモードShell
# reboot
```

以下はOS起動状態での作業です。

```shell-session:
# xfs_growfs 対象のLVM論理ボリューム
例:
# xfs_growfs /dev/LogVol00/root

# df -Th
ファイルシス              タイプ   サイズ  使用  残り 使用% マウント位置
/dev/mapper/LogVol00-root xfs         99G   16G   84G   16% /
/dev/sda2                 xfs       1014M  193M  822M   20% /boot
/dev/sda1                 vfat       256M  5.8M  250M    3% /boot/efi
```

これで無事伸長完了です！ヤッター