Photon OS のディスクパーティションを拡張する

Photon OS は、クラウド環境に最適化された非常に軽量でミニマリストな Linux OS です。

簡単ですが、こちらの記事の冒頭で、Photon OS について紹介をしてます。

https://qiita.com/iwaseyusuke/items/7b2a76f4538df93ba792

非常にシンプルな OS ですが、vSphere 環境であれば、非常に簡単にデプロイできる Linux OS なので、「ちょっと Docker の使える環境が欲しい」や「kubectl が叩ける Linux が欲しい」という時に、重宝します。

今回は、そんな Photon OS で、「あ、しまった... 最初にデプロイした時よりも、ディスク容量が必要になっちゃった」という時に、Photon OS の停止を伴わず、オンラインでサクッとディスクパーティションを拡張する方法をご紹介します。


## 前提

執筆時点で、Photon OS は ver 4.0 を利用しています。

```sh
# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=2f5aad892
```


## 手順

まずは、vCenter などの UI から、仮想マシンとしてのディスクサイズを増やします。
この例では、16GB から 100GB に変更しました。

![Screenshot 2023-01-20 at 14.52.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245234/e74d8bfa-434f-ae12-e355-1d0446ddd3b2.png)

仮想ディスクのサイズが増やせたら、次は、Photon OS にログインし、下記のコマンドを実行します。
このコマンドにより、OS 再起動無しで、ディスクサイズの変更を検知させることができます。

```sh
echo 1 > /sys/class/block/sda/device/rescan
```

では、Linux において、パーティションサイズの変更と言ったらお馴染みの `parted` をインストールします。

```sh
tdnf install -y parted
```

実際に、パーティションの変更を行う前に、まずは、今のファイルシステムの状況を確認しておきましょう。

```sh
# df -kh
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        16G  3.9G   11G  27% /  <-- ここ
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G  608K  1.6G   1% /run
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
tmpfs           3.9G   11M  3.9G   1% /tmp
/dev/sda3        10M  2.0M  8.1M  20% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0
```

この時点では、まだルートファイルシステムの容量は 16GB のままです。

それでは、実際に、`parted` を対話的に実行し、パーティションを拡張していきます。

```sh
# parted /dev/sda
GNU Parted 3.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
```

まずは、現在のパーティションレイアウトを表示させるために `print` コマンドを実行します。

```sh
(parted) print
print
Warning: Not all of the space available to /dev/sda appears to be used, you can
fix the GPT to use all of the space (an extra 176160768 blocks) or continue with
the current setting?
Fix/Ignore?
```

すると、警告として、今のディスク状態と一致していないため、パーティションテーブル (GPT) を修正するかを聞かれるので、`f` を入力し、修正します。

```sh
Fix/Ignore? f
f
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  5243kB  4194kB                     bios_grub
 3      5243kB  15.7MB  10.5MB  fat16              boot, esp
 2      15.7MB  17.2GB  17.2GB  ext4

(parted)
```

すると、先ほど増やした通り、`/dev/sda` が、(約)100GB に増えています。
後ほど、この `107GB` という数字の部分は使うので、クリップボードにコピー等をして、控えておいてください。

次に、注目すべき点として、ターゲットとなる ext4 のファイルシステムが、この例では `Number 2` として表示されていることに着目してください。
このファイルシステムをリサイズするので、下記のようなコマンドを実行します。

```sh
(parted) resizepart 2 100%
resizepart 2 100%
Warning: Partition /dev/sda2 is being used. Are you sure you want to continue?
Yes/No?
```

今使っているパーティションである旨の確認がありますので、`y` を入力して続行し、その後、先ほど控えておいたディスク容量、この例では `107GB` を終端として、入力します。

```sh
Yes/No? y
y
End?  [17.2GB]? 107GB
107GB
(parted)
```

これでパーティションとしてのリサイズは完了しましたので、もう一度 `print` コマンドで結果を確認してみます。

```sh
(parted) print
print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  5243kB  4194kB                     bios_grub
 3      5243kB  15.7MB  10.5MB  fat16              boot, esp
 2      15.7MB  107GB   107GB   ext4

(parted)
```

ターゲットとなる ext4 のファイルシステムが、107GB まで拡張できていることが確認できましたので、`quit` コマンドで、parted を終了します。

```sh
(parted) quit
quit
Information: You may need to update /etc/fstab.
```

ここまでで、パーティションとしては、リサイズされていますが、まだファイルシステム (ext4) としては、変更が反映されていないので、`df` コマンドでは、最初のままです。

```sh
# df -kh
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        16G  3.9G   11G  27% /  <-- ここ
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G  608K  1.6G   1% /run
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
tmpfs           3.9G   11M  3.9G   1% /tmp
/dev/sda3        10M  2.0M  8.1M  20% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0
```

先ほど、`parted` コマンドで確認したところ、`/dev/sda` は 3つのパーティションを持っており、`Number 2` のパーションを拡張しました。
なので、ここでは `/dev/sda2` をターゲットに、ファイルシステムのリサイズコマンドを実行します。

```sh
# resize2fs /dev/sda2
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 13
The filesystem on /dev/sda2 is now 26119207 (4k) blocks long.
```

ここまで来れば、`df` コマンドでパーティションの拡張を確認でき、作業完了です。

```sh
# df -kh
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        98G  3.9G   90G   5% /  <-- ここ
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G  608K  1.6G   1% /run
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
tmpfs           3.9G   11M  3.9G   1% /tmp
/dev/sda3        10M  2.0M  8.1M  20% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0
```

## 参考

Photon OS の公式ドキュメントとしては、下記のページを参照ください。

https://vmware.github.io/photon/docs/troubleshooting-guide/file-system-troubleshooting/expanding-disk-partition/