RHEL - ルートファイルシステム拡張

OSが動作しているルートファイルシステムを拡張する場合は、
OSが動作していると拡張できないので手順が少し面倒なんですよね。

# 1. 仮想マシン停止
OSが動作している仮想ディスクを編集するために仮想マシンを停止します。

# 2. 仮想ディスク拡張
ハイパーバイザー付属のツールを使って、仮想ディスクのサイズ拡張する。

ESXiの場合
```shell
vmkfstools -X 80g /vmfs/volumes/ssd/156_RHEL7.9/156_RHEL7.9.vmdk
```

KVMやHyper-Vの場合も同じような感じで仮想ディスクを拡張します。

# 3. 仮想マシンにインストールディスク挿入
Linuxのレスキューモードに入るためにはインストールディスクが必要です。

# 4. レスキューモード起動
仮想マシンのブートデバイスをインストールディスクに設定しておく（手順省略）。
起動したら、以下の順に選択してレスキューモードを起動する。
```shell
Red Hat Enterprise Linux 7.9
  -> Troubleshooting
    -> Rescue a Red Hat Enterprise Linux system
```

レスキューモードで起動したら 3) を選択する。
```shell
3) Skip to shell
```
すると / にはローカルディスクではなくISOメディアボリュームがマウントされる。

# 5. 仮想ディスクのパーティション拡張

## 5-1. fdiskを利用する場合

拡張ディスクのデバイス名を確認する
```shell
sh-4.2# fdisk -l
Device     Boot Start    End       Blocks Id System
/dev/sda1  *    2048     2099199   ****** 83 Linux
/dev/sda2       2099200  33554431  ****** 8e Linux LVM
```
→/dev/sda


fdiskを実行
```shell
sh-4.2# fdisk /dev/sda
```

拡張するパーティションと開始-終了セクタを確認する。
開始-終了セクタは後で必要になりますので必ずメモ！

```shell
Command (m for help) : p
Device     Boot Start    End       Blocks Id System
/dev/sda1  *    2048     2099199   ****** 83 Linux
/dev/sda2       2099200  33554431  ****** 8e Linux LVM
```
→ /dev/sda2

fdiskでパーティション拡張するためには、一度パーティションを削除してから、再作成する必要がある。
パーティションを削除する
```shell
Command (m for help) : d
Partition number (1,2, default 2): 2
Partition 2 is deleted
```

パーティションが消えたことを確認する
```shell
Command (m for help) : p
Device     Boot Start    End       Blocks Id System
/dev/sda1  *    2048     2099199   ****** 83 Linux
```

新しいパーティションを作成する
開始セクタ(First sector)は、削除する前の開始セクタと同じにしないといけない。
終了セクタ(Last sector）は、デフォルトで空き領域を使った最大サイズになっている。
※通常はデフォルト値でEnterキーを押下していけばいい感じになるけど設定値は慎重に。
```shell
Command (m for help) : n
Partition type:
   p   primary (1 parimary, 0 extended, 3 free)
   e   extended
Select (default p): p
Parition number (2-4, default 2): 2
First sector (2099200-167772159, default 2099200):
Using default value 2099299
Last sector, +sectors or +size{K,M,G} (2099200-167772159, default 16772159):
Using default value 167772159
Partition 2 of type Linux and of size 79 GiB is set
```

作成されたパーティションを確認する
```shell
Command (m for help) : p
Device     Boot Start    End        Blocks Id System
/dev/sda1  *    2048     2099199    ****** 83 Linux
/dev/sda2       2099200  167772159  ****** 83 Linux
```

System id が ```Linux LVM``` になっていないので変更する
```shell
Command (m for help) : t
Partition number (1,2, default 2): 2
Hex code (type L to List all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
```

System id が変更されていることを確認する
```shell
Command (m for help) : p
Device     Boot Start    End        Blocks Id System
/dev/sda1  *    2048     2099199    ****** 83 Linux
/dev/sda2       2099200  167772159  ****** 8e Linux LVM
```

最後に変更を反映する（これをしないと、ここまでの変更は反映されないよ！）
```shell
Command (m for help) : w
The partition tables has been alerted!

Calling ioctl() to re-read partition table.
Syncing disk.
```

## 5-2. partedを利用する場合
partedはfdiskより簡単に拡張できます。

拡張ディスクのデバイス名を確認する
```shell
sh-4.4# parted -l
Model: VMware Virtual disk (scisi)
Disk /dev/sda: 85.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start   End     Size    File system Name                  Flags
1      1049kB  630MB   629MB   fat32       EFI System Partition  boot, esp
2      630MB   1704MB  1074MB  xfs
3      1704MB  21.5GB  19.8GB   
```
→/dev/sda

partedを実行
```shell
sh-4.4# parted /dev/sda
```

変更前のパーティションを確認する
```shell
(parted) p
Number Start   End     Size    File system Name                  Flags
1      1049kB  630MB   629MB   fat32       EFI System Partition  boot, esp
2      630MB   1704MB  1074MB  xfs
3      1704MB  21.5GB  19.8GB   
```

パーティションを拡張する
partedはfdiskと違って変更が即座に反映されます！
```shell
(parted) resizepart 3 100%
```

パーティションが拡張されたことを確認する
```shell
(parted) p
Number Start   End     Size    File system Name                  Flags
1      1049kB  630MB   629MB   fat32       EFI System Partition  boot, esp
2      630MB   1704MB  1074MB  xfs
3      1704MB  21.5GB  19.8GB 
```

partedを終了する
```shell
(parted) q
```

# 6. LVM - PV拡張

現状はディスクサイズが増えただけで、ファイルシステムは元のまま。
ファイルシステムはLVM上に構築されているので、
LVMの拡張を行ってから、ファイルシステムの拡張が必要です。

現状のPVは 15GB になっている
```shell
sh-4.2# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               rhel
  PV Size               <15.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              3839
  Free PE               0
  Allocated PE          3839
  PV UUID               EiZp2t-yIIe-JEeF-1ecJ-xLkM-lun2-Z31Rcl
```

PVを拡張する（fdiskで拡張した領域を反映)
```shell
sh-4.2# pvresize /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
```

PVが 79GB に拡張されたことが確認できる
```shell
sh-4.2# pvscan
  PV  /dev/sda2   VG rhel   lvm2 [<99.00 GiB / 40.00 GiB free]
  Total: 1 [<79.00 GiB] / in use: 1 [<79.00 GiB] / in no VG: 0 [0  ]
```
```shell
sh-4.2# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               rhel
  PV Size               <79.00 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              20223
  Free PE               16384
  Allocated PE          3839
  PV UUID               EiZp2t-yIIe-JEeF-1ecJ-xLkM-lun2-Z31Rcl
```

# 7. LVM - LV拡張
(VGはPVを束にしたものなので、PVを拡張すればVGも拡張される)

現状のPVは 13.39GB になっている
```shell
sh-4.2# lvdisplay
  --- Logical volume ---
  LV Path                /dev/rhel/swap
  LV Name                swap
  VG Name                rhel
  LV UUID                LGg4a2-gG2u-LxWb-LHBm-Hsxk-9oG0-4ZpXtS
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-03-19 00:54:25 +0000
  LV Status              available
  # open                 2
  LV Size                1.60 GiB
  Current LE             410
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
    - Logical volume ---
  LV Path                /dev/rhel/root
  LV Name                home
  VG Name                rhel
  LV UUID                6NJV1B-U3XR-ylSk-imRS-QG4V-KP8K-Bycd8Z
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-03-19 00:54:25 +0000
  LV Status              available
  # open                 1
  LV Size                13.39 GiB
  Current LE             3429
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3
```

LVを拡張する(キーボードはUS配列になっているので + は[へ]キーです)
```shell
sh-4.2# lvextend -l +100%FREE /dev/rhel/root
  Size of logical volume rhel/root chnaged from 13.39 GiB (3429 extents) to 77.39 GiB (19813 extents).
  Logical volume rhel/root successfully resize.
```

LVが 77.39GB に拡張されていることを確認する
```shell
sh-4.2# lvdisplaw
  (略)
    - Logical volume ---
  LV Path                /dev/rhel/root
  LV Name                home
  VG Name                rhel
  LV UUID                6NJV1B-U3XR-ylSk-imRS-QG4V-KP8K-Bycd8Z
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-03-19 00:54:25 +0000
  LV Status              available
  # open                 1
  LV Size                77.39 GiB
  Current LE             19813
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3
```

# 8. ファイルシステム拡張
最後にファイルシステムの拡張をする。

レスキューモードを抜けて、通常のOS起動を行う
```shell
sh-4.2# exit
```
仮想マシンの電源ON!!


現状のファイルシステムサイズを確認する
```shell
[root@rhel79 ~]# df -h
ファイルシス          サイズ  使用  残り 使用% マウント位置
devtmpfs                903M     0  903M    0% /dev
tmpfs                   919M     0  919M    0% /dev/shm
tmpfs                   919M  9.6M  910M    2% /run
tmpfs                   919M     0  919M    0% /sys/fs/cgroup
/dev/mapper/rhel-root    14G   14G   44M  100% /
/dev/sda1              1014M  185M  830M   19% /boot
tmpfs                   184M  8.0K  184M    1% /run/user/42
tmpfs                   184M     0  184M    0% /run/user/0
```

ファイルシステムタイプを確認する
```shell
[root@rhel79 ~]# cat /etc/fstab
```

ファイルシステムを拡張する（ここではxfs)
```shell
[root@rhel79 ~]# xfs_growfs /dev/mapper/rhel-root
meta-data=/dev/mapper/rhel-root  isize=512    agcount=4, agsize=877824 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=3511296, 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 3511296 to 20288512
```

ファイルシステムが拡張されたことを確認する
```shell
[root@rhel79 ~]# df -h
ファイルシス          サイズ  使用  残り 使用% マウント位置
devtmpfs                903M     0  903M    0% /dev
tmpfs                   919M     0  919M    0% /dev/shm
tmpfs                   919M  9.6M  910M    2% /run
tmpfs                   919M     0  919M    0% /sys/fs/cgroup
/dev/mapper/rhel-root    78G   14G   65G   18% /
/dev/sda1              1014M  185M  830M   19% /boot
tmpfs                   184M  8.0K  184M    1% /run/user/42
tmpfs                   184M     0  184M    0% /run/user/0
```

ファイルシステム拡張だけOS上ですみません。。。

以上です。