仮想マシンのディスク容量を拡張する

VMWareの仮想マシンのディスク容量を拡張する手順を記録します。

# 環境
- VMWare Workstation 17 Player
- AlmaLinux 8.10

### 拡張前のディスクの空き容量を確認する
- 「/dev/mapper/almalinux-root」の「使用％」が「94％」になっていることを確認
```
$ df
ファイルシス               1K-ブロック     使用   使用可 使用% マウント位置
devtmpfs                      14144992        0 14144992    0% /dev
tmpfs                         14174020        0 14174020    0% /dev/shm
tmpfs                         14174020     9968 14164052    1% /run
tmpfs                         14174020        0 14174020    0% /sys/fs/cgroup
/dev/mapper/almalinux-root    17811456 16694368  1117088   94% /
/dev/nvme0n1p1                 1038336   463996   574340   45% /boot
tmpfs  
```

# VMwareの「仮想マシンの設定」でディスク容量を拡張する
1\. VMWareを起動し、ホーム画面からディスク容量を拡張する仮想マシンを選び、「仮想マシン設定の編集」をクリックして「仮想マシン設定」の画面を開く<br>
<img src ="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570127/b978d6d8-250f-28a5-5e95-ed1190d1eb91.png" width=100%>


2\. 画面左の「ハードウェア」のデバイス一覧の「ハードディスク」をクリックする
3\. 画面右の「ディスクユーティリティ」の「展開」をクリックして、「ディスク容量の拡張」のポップアップ画面を表示させる<br>
<img src ="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570127/54ce6db0-053a-a518-9d63-095583ab3318.png" width=70%>

4\. ポップアップ画面の「ディスク最大サイズ」を増設したい容量に設定し、「展開」をクリックする
5\. ポップアップ画面が閉じられ、「仮想マシンの設定」画面に戻るので、画面下の「OK」をクリックする
6\. 仮想マシン選択後の画面に戻るので、画面右の「仮想マシンの再生」をクリックして、仮想マシンを起動する 


# LVM（論理ボリューム管理）の設定を変更する
### LVMとは
 >論理ボリューム管理 (LVM) は、物理ストレージ上に抽象化レイヤーを作成して、ファイルシステム、データベース、またはアプリケーションが使用できる仮想ブロックストレージデバイスである論理ストレージボリュームを作成します。物理ボリューム (PV) は、パーティションまたはディスク全体のいずれかです。これらの PV を使用すると、ボリュームグループ (VG) を作成し、利用可能なストレージから論理ボリューム (LV) 用のディスク領域のプールを作成できます。
論理ボリューム (LV) は、物理ボリュームをボリュームグループに結合することで作成できます。LV は物理ストレージを使用するよりも柔軟性があり、作成した LV は物理デバイスのパーティション再設定や再フォーマットを行わずに拡張または縮小できます。
（出典：https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html-single/configuring_and_managing_logical_volumes/index#proc_providing-feedback-on-red-hat-documentation_configuring-and-managing-logical-volumes ）


## パーティションを作成する
### 現在のパーティション情報を確認する
```
$ sudo fdisk -l
ディスク /dev/nvme0n1: 100 GiB, 107374182400 バイト, 209715200 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8998897b

デバイス       起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/nvme0n1p1 *        2048  2099199  2097152     1G 83 Linux
/dev/nvme0n1p2       2099200 41943039 39843840    19G 8e Linux LVM


ディスク /dev/mapper/almalinux-root: 17 GiB, 18249416704 バイト, 35643392 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト


ディスク /dev/mapper/almalinux-swap: 2 GiB, 2147483648 バイト, 4194304 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
```
- `ディスク /dev/nvme0n1: 100 GiB` よりディスクの容量は100GiBに拡張されている
- `/dev/nvme0n1p1 *  ... 1G 83 Linux` `/dev/nvme0n1p2  ... 19G 8e Linux LVM`より、現状で/dev/nvme0n1p1がLinuxとして1G、/dev/nvme0n1p2がLinux LVMとして19Gを割り当てられている
- Linux LVMのLVとして `/dev/mapper/almalinux-root　17GiB`、スワップ領域として ` /dev/mapper/almalinux-swap: 2 GiB`が割り当てられている

### 新しいパーティションを作成する
- デバイス名「/dev/nvme0n1」を指定して「fdisk」コマンドを実行し、対話形式で編集を行う
    -  ヘルプを表示する「m」コマンドを実行し、コマンドの一覧を確認する
```
$ sudo fdisk /dev/nvme0n1

fdisk (util-linux 2.32.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。


コマンド (m でヘルプ): m

ヘルプ:

  DOS (MBR)
   a   起動可能フラグを切り替えます
   b   入れ子の BSD ディスクラベルを編集します
   c   DOS 互換フラグを切り替えます

  一般
   d   パーティションを削除します
   F   パーティションのない領域を一覧表示します
   l   既知のパーティションタイプを一覧表示します
   n   新しいパーティションを追加します
   p   パーティション情報を表示します
   t   パーティションタイプを変更します
   v   パーティション情報を検証します
   i   パーティションの情報を表示します

  その他
   m   このメニューを表示します
   u   表示項目の単位を変更します
   x   特殊機能に移動します (熟練者向け機能)

  スクリプト
   I   ディスクのレイアウトを sfdisk 互換のスクリプトから読み込みます
   O   ディスクのレイアウトを sfdisk 互換のスクリプトに書き出します

  保存と終了
   w   パーティション情報をディスクに書き込んで終了します
   q   変更点を保存せずに終了します

  新しいラベルを作成します
   g   新しい (何もない) GPT パーティションテーブルを作成します
   G   新しい (何もない) SGI (IRIX) パーティションテーブルを作成します
   o   新しい (何もない) DOS パーティションテーブルを作成します
   s   新しい (何もない) Sun パーティションテーブルを作成します
```

- 「新しいパーティションを追加します」の「n」コマンドを実行する
    - 「パーティション番号」「最初のセクタ」「最終セクタ」を聞かれるので規定値のまま「Enter」で進める
```
コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (2 プライマリ, 0 拡張, 2 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p): 

既定の回答 p であるものとみなします。
パーティション番号 (3,4, 既定値 3): 
最初のセクタ (41943040-209715199, 既定値 41943040): 
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (41943040-209715199, 既定値 209715199): 

新しいパーティション 3 をタイプ Linux、サイズ 80 GiB で作成しました。
```
- 「パーティション情報を表示します」の「p」コマンドを実行する
    - 新しいパーティションである「/dev/nvme0n1p3」が追加されていることを確認する
```
コマンド (m でヘルプ): p
ディスク /dev/nvme0n1: 100 GiB, 107374182400 バイト, 209715200 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8998897b

デバイス       起動 開始位置  終了位置    セクタ サイズ Id タイプ
/dev/nvme0n1p1 *        2048   2099199   2097152     1G 83 Linux
/dev/nvme0n1p2       2099200  41943039  39843840    19G 8e Linux LVM
/dev/nvme0n1p3      41943040 209715199 167772160    80G 83 Linux
```
### パーティションのタイプを変更する

- 「パーティションタイプを変更します」の「t」コマンドを実行する
    - 「パーティション番号」は規定値のまま「Enter」で進む
    - 「16進数コード」は上記の「p」コマンドの実行結果より「Linux LVM」のIdである「8e」を入力する
```
コマンド (m でヘルプ): t 
パーティション番号 (1-3, 既定値 3): 
16 進数コード (L で利用可能なコードを一覧表示します): 8e

パーティションのタイプを 'Linux' から 'Linux LVM' に変更しました。
```
- 「p」コマンドでタイプが変更されていることを確認
```
コマンド (m でヘルプ): p
ディスク /dev/nvme0n1: 100 GiB, 107374182400 バイト, 209715200 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8998897b

デバイス       起動 開始位置  終了位置    セクタ サイズ Id タイプ
/dev/nvme0n1p1 *        2048   2099199   2097152     1G 83 Linux
/dev/nvme0n1p2       2099200  41943039  39843840    19G 8e Linux LVM
/dev/nvme0n1p3      41943040 209715199 167772160    80G 8e Linux LVM
```
### パーティション情報をディスクに書き込む
- 「パーティション情報をディスクに書き込んで終了します」の「w」コマンドを実行し、パーティション情報の設定を終了する
```
コマンド (m でヘルプ): w
パーティション情報が変更されました。
ディスクを同期しています。
```

## PV（物理ボリューム）を作成する
### PVの詳細情報を確認する
- 現段階ではパーティション「/dev/nvme0n1p3」にPVが作成されていないので、「/dev/nvme0n1p2」の情報のみが出力される
```
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/nvme0n1p2
  VG Name               almalinux
  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               ncznOi-2FMC-vY21-UmCl-dzei-4wjm-MN8LdT
```
### 新しいPVを作成する
- 先程作成したパーティション「/dev/nvme0n1p3」に新しいPVを作成する
```
$ sudo pvcreate /dev/nvme0n1p3 
  Physical volume "/dev/nvme0n1p3" successfully created.
```
### 新しいPVが追加されたことを確認する
```
$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/nvme0n1p2
  VG Name               almalinux
  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               ncznOi-2FMC-vY21-UmCl-dzei-4wjm-MN8LdT
   
  "/dev/nvme0n1p3" is a new physical volume of "80.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/nvme0n1p3
  VG Name               
  PV Size               80.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               doYOGs-YKvX-pnvi-djQD-kIQE-jHCz-6q8IST
```
## VG（ボリュームグループ）を拡張する
### VGの情報を確認する
- VG nameは「almalinux」であることを確認
```
$ sudo vgdisplay
  --- Volume group ---
  VG Name               almalinux
  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               281fSZ-pRkc-VfHh-wH4f-eL33-MbU6-P7FhTj
```
### VGを拡張する
- VG「almalinux」にPV「/dev/nvme0n1p3」を追加する
```
$ sudo vgextend almalinux /dev/nvme0n1p3
  Volume group "almalinux" successfully extended
```
### VGのサイズが拡張したことを確認する
- 「VG size」が「<19GiB」から「98.99GiB」に拡張したことを確認
```
$ sudo vgdisplay
  --- Volume group ---
  VG Name               almalinux
  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               98.99 GiB
  PE Size               4.00 MiB
  Total PE              25342
  Alloc PE / Size       4863 / <19.00 GiB
  Free  PE / Size       20479 / <80.00 GiB
  VG UUID               281fSZ-pRkc-VfHh-wH4f-eL33-MbU6-P7FhTj
```
## LV（論理ボリューム）を拡張する
###  LVの情報を確認する
- 拡張するLVのLV Pathが「 /dev/almalinux/root」であることを確認
```
$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/almalinux/swap
  LV Name                swap
  VG Name                almalinux
  LV UUID                nX7F1A-gtMu-sUOL-omzr-x7fc-Ps3h-ez4nBQ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-07-03 16:04:41 +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/almalinux/root
  LV Name                root
  VG Name                almalinux
  LV UUID                H1e3Pu-Pz0N-ExvQ-wdwQ-z1FZ-FfRO-4yWI5L
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-07-03 16:04:41 +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
```
### VGの空き領域を割り当てる
- VG「almalinux」の空き容量全てをLV「root」に追加する
```
$ sudo lvextend  -l +100%FREE /dev/almalinux/root
  Size of logical volume almalinux/root changed from <17.00 GiB (4351 extents) to 96.99 GiB (24830 extents).
  Logical volume almalinux/root successfully resized.
```
### LVが拡張されたことを確認する
-  「/dev/almalinux/root」の「LV Size」が「<17.00 GiB」から「96.99 GiB」に拡張されたことを確認　
```
$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/almalinux/swap
  LV Name                swap
  VG Name                almalinux
  LV UUID                nX7F1A-gtMu-sUOL-omzr-x7fc-Ps3h-ez4nBQ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-07-03 16:04:41 +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/almalinux/root
  LV Name                root
  VG Name                almalinux
  LV UUID                H1e3Pu-Pz0N-ExvQ-wdwQ-z1FZ-FfRO-4yWI5L
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-07-03 16:04:41 +0900
  LV Status              available
  # open                 1
  LV Size                96.99 GiB
  Current LE             24830
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
```
## ファイルシステムを拡張する
### マウント位置を確認する
- 「/dev/mapper/almalinux-root」のマウント位置「/」を確認
```
$ df
ファイルシス               1K-ブロック     使用   使用可 使用% マウント位置
devtmpfs                      14144992        0 14144992    0% /dev
tmpfs                         14174020        0 14174020    0% /dev/shm
tmpfs                         14174020     9960 14164060    1% /run
tmpfs                         14174020        0 14174020    0% /sys/fs/cgroup
/dev/mapper/almalinux-root    17811456 16699468  1111988   94% /
/dev/nvme0n1p1                 1038336   463996   574340   45% /boot
tmpfs                          2834804       20  2834784    1% /run/user/1000
```

### ファイルシステムを拡張する
```
$ sudo xfs_growfs /
meta-data=/dev/mapper/almalinux-root isize=512    agcount=4, agsize=1113856 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
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 25425920
```
- xfsとは
>XFS は、拡張性が高く、高性能で堅牢な、成熟した 64 ビットのジャーナリングファイルシステムで、1 台のホストで非常に大きなファイルおよびファイルシステムに対応します。Red Hat Enterprise Linux 8 ではデフォルトのファイルシステムになります。
（出典：https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/managing_file_systems/getting-started-with-xfs_managing-file-systems ）

### ファイルシステムが拡張されたことを確認する
- 「/dev/mapper/almalinux-root」の「使用％」が「94％」から「17％」に下がり、空き容量が増えたことを確認
```
$ df
ファイルシス               1K-ブロック     使用   使用可 使用% マウント位置
devtmpfs                      14144992        0 14144992    0% /dev
tmpfs                         14174020        0 14174020    0% /dev/shm
tmpfs                         14174020     9960 14164060    1% /run
tmpfs                         14174020        0 14174020    0% /sys/fs/cgroup
/dev/mapper/almalinux-root   101693440 17283648 84409792   17% /
/dev/nvme0n1p1                 1038336   463996   574340   45% /boot
tmpfs                          2834804       20  2834784    1% /run/user/1000
```

# 使用したコマンドのまとめ
- df
>ディスクの空き領域（freeスペース）のサイズを集計して表示する
（出典：https://atmarkit.itmedia.co.jp/ait/ ）

- fdisk
>パーティションの作成や削除などに使う
>「fdisk -l デバイス名」で、指定したデバイスのパーティション情報を表示します。デバイス名を省略した場合、「/proc/partitions」に書かれているパーティション情報（カーネルが認識しているパーティションのリスト）を表示
（出典：同上 ）

- pvcreate
>「pvcreate デバイス名」、または「pvcreate パーティション名」で、指定した場所に物理ボリュームを作成
（出典：同上 ）

- vgextend
>「vgextend ボリュームグループ名 物理ボリューム名」で、既存のボリュームグループに物理ボリュームを追加します。物理ボリュームは複数指定可能
（出典：同上 ）


- lvextend
>「lvextend -Lまたは-lオプション 論理ボリューム名」で、論理ボリュームのサイズを変更
>lvextend -l 100%FREE /dev/datagroup/data1（ボリュームグループ「datagroup」の空き容量全てを論理ボリューム「data1」に追加する）
（出典：同上 ）

- xfs_growfs
>xfs_growfs は、-D オプションを指定しないと、基となるデバイスがサポートする最大サイズまでファイルシステムを拡張
(出典：https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/managing_file_systems/increasing-the-size-of-an-xfs-file-system_managing-file-systems#proc_increasing-the-size-of-an-xfs-file-system-with-xfs_growfs_increasing-the-size-of-an-xfs-file-system )


# 参考
- LVMについて
    - https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html-single/configuring_and_managing_logical_volumes/index#proc_providing-feedback-on-red-hat-documentation_configuring-and-managing-logical-volumes

    - https://qiita.com/miyuki_samitani/items/ee3f93fa82d6ada1fa37


- ディスク容量の拡張について
    - https://www.fatware.jp/?page_id=541