LoginSignup
10
7

More than 1 year has passed since last update.

VMware ESXi でLinux仮想マシンの電源をONのままHDサイズを拡張する

Last updated at Posted at 2022-06-17

VMware ESXi で、サーバーを再起動せずにHDDサイズを拡張する手順をまとめます。
同様のことを様々なコマンドで実現可能なので、他の記事を見ているときに混乱しないよう、各方法を記載します。

環境・目的

  • VMware ESXi 7
  • Ubuntu 20.04 Server
    • HDDを10GBとして初期構築
    • HDDを15GBにし、/パーティションを最大にしたい。

ほかのOSでもコマンドは変わりません。コマンドが見つからない場合はdnfコマンドなどでインストールしてください。

事前準備

コマンドはすべてrootユーザーで作業していきます。
なので、事前にrootになっておきます。

user@ubuntu:~$ sudo -s
root@ubuntu:~#

非LVMの場合

作業前の構成は次のようなイメージです。

image.png

HDDサイズを拡張する

HDDのサイズを拡張して、次のイメージの構成を目指します。

image.png

まずは現在の容量をdfコマンドで確認します。

root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            445M     0  445M   0% /dev
tmpfs            98M  2.4M   96M   3% /run
/dev/sda2       9.8G  4.3G  5.0G  47% /
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/2128
/dev/loop1       33M   33M     0 100% /snap/snapd/12704
/dev/loop2       71M   71M     0 100% /snap/lxd/21029
tmpfs            98M     0   98M   0% /run/user/1000

Mounted on が / となっているFilesystem /dev/sda2 を大きくすればよいことがわかりました。

次に、パーティションの配置状況を、fdisk コマンドで確認します。

root@ubuntu:~# fdisk -l
(略)
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 332D6C26-2C88-408B-95E1-E9916F0705EB

Device     Start      End  Sectors Size Type
/dev/sda1   2048     4095     2048   1M BIOS boot
/dev/sda2   4096 20969471 20965376  10G Linux filesystem

/dev/sda のサイズが 10GB であり、目的のパーティション /dev/sda2 がディスクの末尾に存在することが確認できました。
目的のパーティションがディスク末尾ではないところに存在する場合は、目的のパーティションの後ろに存在するパーティションが邪魔をして、パーティションを大きくすることができません。

では/dev/sda のサイズを大きくしましょう。ESXiの設定画面で、容量を増やしてOKを押すだけです。
このとき、OSはシャットダウンしていなくても大丈夫です。
ただし、スナップショットがあるとHDDのサイズは大きくできませんので、すべてのスナップショットを統合しておく必要があります。

image.png

ESXiでHDDを大きくしても、Linuxは自動で認識はしてくれません。
/dev/<ディスク名> のサイズ変更を認識させるには、/sys/class/block/<ディスク名>/device/rescan に 1 を書き込むことで、
最新のHDDサイズをLinuxに認識させることができます。

root@ubuntu:~# echo 1 > /sys/class/block/sda/device/rescan

改めて、fdiskで、HDDサイズを確認しましょう。

root@ubuntu:~# fdisk -l
()
GPT PMBR size mismatch (20971519 != 31457279) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 332D6C26-2C88-408B-95E1-E9916F0705EB

Device     Start      End  Sectors Size Type
/dev/sda1   2048     4095     2048   1M BIOS boot
/dev/sda2   4096 20969471 20965376  10G Linux filesystem

GPT PMBR size mismatch の警告が表示されていればOKです。

パーティションを拡張する

次の構成を目指します。

image.png

方法1 growpart

パーティションを拡張するのに、growpartコマンドを使います。
Ubuntu 20.04 Server にはデフォルトでインストールされています。
もしコマンドが見つからない場合は、cloud-guest-utils パッケージをインストールすることで導入できます。

root@ubuntu:~# apt install cloud-guest-utils

ではパーティションを大きくしましょう。

まずは現在のパーティションサイズをfdiskで確認します。

root@ubuntu:~# fdisk -l
()
GPT PMBR size mismatch (20971519 != 31457279) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 332D6C26-2C88-408B-95E1-E9916F0705EB

Device     Start      End  Sectors Size Type
/dev/sda1   2048     4095     2048   1M BIOS boot
/dev/sda2   4096 20969471 20965376  10G Linux filesystem

/dev/sda2 のサイズは 10G です。

次に、growpart コマンドでパーティションを大きくします。
/dev/sda2 の間にはスペースを入れることに注意してください。

# growpart /dev/<ディスク> <パーティション番号>
root@ubuntu:~# growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=20965376 end=20969472 new: size=31453151 end=31457247

結果を、fdiskで確認します。

root@ubuntu:~# fdisk -l
()
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 332D6C26-2C88-408B-95E1-E9916F0705EB

Device     Start      End  Sectors Size Type
/dev/sda1   2048     4095     2048   1M BIOS boot
/dev/sda2   4096 31457246 31453151  15G Linux filesystem

GPT PMBR size mismatch の警告がなくなり、/dev/sda2 のサイズが 15GB になりました。

方法2 parted

パーティションを拡張するのに、partedコマンドを使います。
Ubuntu 20.04 Server にはデフォルトでインストールされています。

ではパーティションを大きくしましょう。

partedを、/dev/sdaを引数として実行します。

root@ubuntu:~# parted /dev/sda
GNU Parted 3.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) 

(parted) というプロンプトが表示されるので、print free と入力して実行します。

(parted) print free
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 10485760 blocks) or continue with the current
setting?
Fix/Ignore? 

HDDのサイズが変更になったため、HDDの最後に書かれているはずのGPTが最後にないことが検出されています。
GPTをHDDの最後に移動してよいか聞いているので、Fixと入力します。
ここでFixしないと、パーティションを大きくすることはできません。

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

Number  Start   End     Size    File system  Name  Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  10.7GB  10.7GB  ext4
        10.7GB  16.1GB  5370MB  Free Space

現在の状況が表示されます。/dev/sda が 16.1GB (だいたい15GB)であること、
パーティション番号2 が 10.7GB (だいたい10GB)であること、
パーティション番号2 の後ろに、5370MBの空き領域が存在し、そのEndは 16.1GBであることがわかります。

空き領域を最大限使い切るため、表示の単位をセクタ単位にしておきます。

(parted) unit s

再度、print free します。

(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 31457280s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start      End        Size       File system  Name  Flags
        34s        2047s      2014s      Free Space
 1      2048s      4095s      2048s                         bios_grub
 2      4096s      20969471s  20965376s  ext4
        20969472s  31457246s  10487775s  Free Space

ディスクのEndのセクタ番号31457246sを後で使いますのでメモしておいてください。

では、パーティションを大きくします。resizepartコマンドで2番のパーティションを大きくします。

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

現在使われている(マウントされている)パーティションだが、本当に続行してよいか聞いてきています。
よいので、yesを入力します。

Yes/No? yes
End?  [20969471s]?

2番のパーティションのEndを、何セクタの場所まで大きくするかを聞いてきています。先ほどメモしたEndである 31457246s を入力します。(parted version 3.0以上であれば、100%という入力も受け付けます)

End?  [20969471s]? 31457246s

再びprint freeします。

(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 31457280s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End        Size       File system  Name  Flags
        34s    2047s      2014s      Free Space
 1      2048s  4095s      2048s                         bios_grub
 2      4096s  31457246s  31453151s  ext4

ディスク末尾の空き領域がなくなり、2番パーティションのEndが先ほど入力したセクタ番号になっていることがわかりました。

セクタ番号表示だとわかりにくいので、単位をcompact(人間が読みやすいようにいい感じにする)にして、print freeしてみます。

(parted) unit compact
(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  16.1GB  16.1GB  ext4

2番パーティションのサイズが16.1GB(だいたい15GB)に増えていることがわかりました。

quitでpartedを終了します。

(parted) quit

方法3 fdisk

パーティションを拡張するのに、fdiskコマンドを使います。
Ubuntu 20.04 Server にはデフォルトでインストールされています。

拡張というよりは、2番パーティションを一度消して、大きいサイズで改めて作成するというイメージです。

ではパーティションを大きくしましょう。

fdiskを、/dev/sdaを引数として実行します。

root@ubuntu:~# fdisk /dev/sda

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

GPT PMBR size mismatch (20971519 != 31457279) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.

Command (m for help):

現在の状況を p (print) で表示させます。

Command (m for help): p
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 332D6C26-2C88-408B-95E1-E9916F0705EB

Device     Start      End  Sectors Size Type
/dev/sda1   2048     4095     2048   1M BIOS boot
/dev/sda2   4096 20969471 20965376  10G Linux filesystem

Command (m for help):

さて、ここからパーティションを削除して、再作成していきます。
なお、パーティション削除作業をしても、結果がすぐにHDDに反映されるわけではなく、
再作成も含めて最後にまとめてHDDに反映する形となります。
よって、操作を間違ったら、落ちついて qfdiskを終了すればなにも問題ありません。

では、/dev/sda2 (2番パーティション)を d (delete)で削除しましょう。

Command (m for help): d

Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help):

正しく削除されたか、pで確認しましょう。

Command (m for help): p
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 332D6C26-2C88-408B-95E1-E9916F0705EB

Device     Start   End Sectors Size Type
/dev/sda1   2048  4095    2048   1M BIOS boot

/dev/sda2 がなくなったことがわかります。
それでは、/dev/sda2 を大きなサイズで作成しましょう。n(new)を入力し、2を入力し、そのあとは空白のままエンターを2回押します。

Command (m for help): n
Partition number (2-128, default 2): 2
First sector (4096-31457246, default 4096):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4096-31457246, default 31457246):

Created a new partition 2 of type 'Linux filesystem' and of size 15 GiB.
Partition #2 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o:

新たにパーティションを作成したところ、古いファイルシステムの痕跡が残っているが、削除するかを聞かれています。
これはnoをします。削除してしまうとファイルシステム(ext4)の情報が消えるため、復旧が面倒になります。

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help):

これでパーティションが大きなサイズで作成されました。p で確認します。

Command (m for help): p
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 332D6C26-2C88-408B-95E1-E9916F0705EB

Device     Start      End  Sectors Size Type
/dev/sda1   2048     4095     2048   1M BIOS boot
/dev/sda2   4096 31457246 31453151  15G Linux filesystem

Sizeが 15GB と、大きくなっていることがわかります。
それでは、ここまでの作業結果を、w (write)でHDDに反映させます。

Command (m for help): w

The partition table has been altered.
Syncing disks.

root@ubuntu:~# 

ファイルシステムを拡張する

最後に、ファイルシステムを拡張します。

作業終了時には次の構成になっています。
image.png

方法1 resize2fs

resize2fsコマンドを使ってファイルシステムを拡張します。

まず、現在のファイルシステムサイズを、dfコマンドで確認します。

root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            445M     0  445M   0% /dev
tmpfs            98M  2.4M   96M   3% /run
/dev/sda2       9.8G  4.3G  5.0G  47% /
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/2128
/dev/loop1       33M   33M     0 100% /snap/snapd/12704
/dev/loop2       71M   71M     0 100% /snap/lxd/21029
tmpfs            98M     0   98M   0% /run/user/1000

/dev/sda2 のSizeが 9.8GB であることがわかります。

では、resize2fs コマンドでパーティションを拡張します。

root@ubuntu:~# resize2fs /dev/sda2
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/sda2 is now 3931643 (4k) blocks long.

結果をdfコマンドで確認します。

root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            445M     0  445M   0% /dev
tmpfs            98M  2.4M   96M   3% /run
/dev/sda2        15G  4.3G  9.8G  31% /
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/loop0       56M   56M     0 100% /snap/core18/2128
/dev/loop1       33M   33M     0 100% /snap/snapd/12704
/dev/loop2       71M   71M     0 100% /snap/lxd/21029
tmpfs            98M     0   98M   0% /run/user/1000

/dev/sda2 のSizeが 15GB になりました。これで作業終了です。

LVMの場合

作業前の構成は次のようなイメージです。

image.png

HDDサイズを拡張する

HDDのサイズを拡張して、次のイメージの構成を目指します。

image.png

まずは現在の容量をlsblkコマンドで確認します。

root@ubuntu:~# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0                       7:0    0 55.4M  1 loop /snap/core18/2128
loop1                       7:1    0 32.3M  1 loop /snap/snapd/12704
loop2                       7:2    0 70.3M  1 loop /snap/lxd/21029
sda                         8:0    0   10G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0    1G  0 part /boot
└─sda3                      8:3    0    9G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0    9G  0 lvm  /
sr0                        11:0    1  1.2G  0 rom

MOUNTPOINT が / となっているNAME /dev/mapper/ubuntu--vg-ubuntu--lv を大きくすればよいことがわかりました。
そしてそれを大きくするには、sda3 を大きくしなければならないこともわかりました。

次に、sda3パーティションの配置状況を、fdisk コマンドで確認します。

root@ubuntu:~# fdisk -l /dev/sda
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D18BFAE1-C432-49C6-AF34-4901543CB719

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 20969471 18868224   9G Linux filesystem

/dev/sda のサイズが 10GB であり、目的のパーティション /dev/sda3 がディスクの末尾に存在することが確認できました。
目的のパーティションがディスク末尾ではないところに存在する場合は、目的のパーティションの後ろに存在するパーティションが邪魔をして、パーティションを大きくすることができません。

では/dev/sda のサイズを大きくしましょう。ESXiの設定画面で、容量を増やしてOKを押すだけです。
このとき、OSはシャットダウンしていなくても大丈夫です。
ただし、スナップショットがあるとHDDのサイズは大きくできませんので、すべてのスナップショットを統合しておく必要があります。

image.png

ESXiでHDDを大きくしても、Linuxは自動で認識はしてくれません。
/dev/<ディスク名> のサイズ変更を認識させるには、/sys/class/block/<ディスク名>/device/rescan に 1 を書き込むことで、
最新のHDDサイズをLinuxに認識させることができます。

root@ubuntu:~# echo 1 > /sys/class/block/sda/device/rescan

改めて、fdiskで、HDDサイズを確認しましょう。

root@ubuntu:~# fdisk -l /dev/sda
GPT PMBR size mismatch (20971519 != 31457279) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D18BFAE1-C432-49C6-AF34-4901543CB719

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 20969471 18868224   9G Linux filesystem

GPT PMBR size mismatch の警告が表示されていればOKです。

パーティションを拡張する

次の構成を目指します。

image.png

方法1 growpart

パーティションを拡張するのに、growpartコマンドを使います。
Ubuntu 20.04 Server にはデフォルトでインストールされています。
もしコマンドが見つからない場合は、cloud-guest-utils パッケージをインストールすることで導入できます。

root@ubuntu:~# apt install cloud-guest-utils

ではパーティションを大きくしましょう。

まずは現在のパーティションサイズをfdiskで確認します。

root@ubuntu:~# fdisk -l /dev/sda
GPT PMBR size mismatch (20971519 != 31457279) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D18BFAE1-C432-49C6-AF34-4901543CB719

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 20969471 18868224   9G Linux filesystem

/dev/sda3 のサイズは 9G です。

次に、growpart コマンドでパーティションを大きくします。
/dev/sda3 の間にはスペースを入れることに注意してください。

# growpart /dev/<ディスク> <パーティション番号>
root@ubuntu:~# growpart /dev/sda 3
CHANGED: partition=3 start=2101248 old: size=18868224 end=20969472 new: size=29355999 end=31457247

結果を、fdiskで確認します。

root@ubuntu:~# fdisk -l /dev/sda
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D18BFAE1-C432-49C6-AF34-4901543CB719

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 31457246 29355999  14G Linux filesystem

GPT PMBR size mismatch の警告がなくなり、/dev/sda3 のサイズが 14GB (だいたい15GB)になりました。

方法2 parted

パーティションを拡張するのに、partedコマンドを使います。
Ubuntu 20.04 Server にはデフォルトでインストールされています。

ではパーティションを大きくしましょう。

partedを、/dev/sdaを引数として実行します。

root@ubuntu:~# parted /dev/sda
GNU Parted 3.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) 

(parted) というプロンプトが表示されるので、print free と入力して実行します。

(parted) print free
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 10485760 blocks) or continue with the current
setting?
Fix/Ignore? 

HDDのサイズが変更になったため、HDDの最後に書かれているはずのGPTが最後にないことが検出されています。
GPTをHDDの最後に移動してよいか聞いているので、Fixと入力します。
ここでFixしないと、パーティションを大きくすることはできません。

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

Number  Start   End     Size    File system  Name  Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  1076MB  1074MB  ext4
 3      1076MB  10.7GB  9661MB
        10.7GB  16.1GB  5370MB  Free Space

現在の状況が表示されます。/dev/sda が 16.1GB (だいたい15GB)であること、
パーティション番号3 が 9661MB (だいたい10GB)であること、
パーティション番号3 の後ろに、5370MBの空き領域が存在し、そのEndは 16.1GBであることがわかります。

空き領域を最大限使い切るため、表示の単位をセクタ単位にしておきます。

(parted) unit s

再度、print free します。

(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 31457280s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start      End        Size       File system  Name  Flags
        34s        2047s      2014s      Free Space
 1      2048s      4095s      2048s                         bios_grub
 2      4096s      2101247s   2097152s   ext4
 3      2101248s   20969471s  18868224s
        20969472s  31457246s  10487775s  Free Space

ディスクのEndのセクタ番号31457246sを後で使いますのでメモしておいてください。

では、パーティションを大きくします。resizepartコマンドで3番のパーティションを大きくします。

(parted) resizepart 3
End?  [20969471s]?

3番のパーティションのEndを、何セクタの場所まで大きくするかを聞いてきています。先ほどメモしたEndである 31457246s を入力します。

End?  [20969471s]? 31457246s

再びprint freeします。

(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 31457280s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start     End        Size       File system  Name  Flags
        34s       2047s      2014s      Free Space
 1      2048s     4095s      2048s                         bios_grub
 2      4096s     2101247s   2097152s   ext4
 3      2101248s  31457246s  29355999s

ディスク末尾の空き領域がなくなり、3番パーティションのEndが先ほど入力したセクタ番号になっていることがわかりました。

セクタ番号表示だとわかりにくいので、単位をcompact(人間が読みやすいようにいい感じにする)にして、print freeしてみます。

(parted) unit compact
(parted) print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  1076MB  1074MB  ext4
 3      1076MB  16.1GB  15.0GB

3番パーティションのサイズが15.0GBに増えていることがわかりました。

quitでpartedを終了します。

(parted) quit

方法3 fdisk

パーティションを拡張するのに、fdiskコマンドを使います。
Ubuntu 20.04 Server にはデフォルトでインストールされています。

拡張というよりは、3番パーティションを一度消して、大きいサイズで改めて作成するというイメージです。

ではパーティションを大きくしましょう。

fdiskを、/dev/sdaを引数として実行します。

root@ubuntu:~# fdisk /dev/sda

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

GPT PMBR size mismatch (20971519 != 31457279) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.

Command (m for help):

現在の状況を p (print) で表示させます。

Command (m for help): p
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D18BFAE1-C432-49C6-AF34-4901543CB719

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 20969471 18868224   9G Linux filesystem

Command (m for help):

さて、ここからパーティションを削除して、再作成していきます。
なお、パーティション削除作業をしても、結果がすぐにHDDに反映されるわけではなく、
再作成も含めて最後にまとめてHDDに反映する形となります。
よって、操作を間違ったら、落ちついて qfdiskを終了すればなにも問題ありません。

では、/dev/sda3 (3番パーティション)を d (delete)で削除しましょう。

Command (m for help): d

Partition number (1-3, default 3): 3

Partition 3 has been deleted.

Command (m for help):

正しく削除されたか、pで確認しましょう。

Command (m for help): p
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D18BFAE1-C432-49C6-AF34-4901543CB719

Device     Start     End Sectors Size Type
/dev/sda1   2048    4095    2048   1M BIOS boot
/dev/sda2   4096 2101247 2097152   1G Linux filesystem

/dev/sda3 がなくなったことがわかります。
それでは、/dev/sda3 を大きなサイズで作成しましょう。n(new)を入力し、3を入力し、そのあとは空白のままエンターを2回押します。

Command (m for help): n
Partition number (3-128, default 3): 3
First sector (2101248-31457246, default 2101248):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2101248-31457246, default 31457246):

Created a new partition 3 of type 'Linux filesystem' and of size 14 GiB.
Partition #3 contains a LVM2_member signature.

Do you want to remove the signature? [Y]es/[N]o:

新たにパーティションを作成したところ、古いファイルシステムの痕跡が残っているが、削除するかを聞かれています。
これはnoをします。削除してしまうとシグネチャ(LVM)の情報が消えるため、復旧が面倒になります。

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help):

これでパーティションが大きなサイズで作成されました。p で確認します。

Command (m for help): p
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D18BFAE1-C432-49C6-AF34-4901543CB719

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 31457246 29355999  14G Linux filesystem

Sizeが 14GB と、大きくなっていることがわかります。
それでは、ここまでの作業結果を、w (write)でHDDに反映させます。

Command (m for help): w

The partition table has been altered.
Syncing disks.

root@ubuntu:~# 

LVMの物理ボリュームの拡張(pvresize)

pvresizeを使って、LVMの物理ボリュームを拡張します。
終了時には次の構成になっています。ボリュームグループも一緒に大きくなります。

image.png

まずは、pvdisplay で状況を確認します。(-C オプションでカラム表示させる)

root@ubuntu:~# pvdisplay -C
  PV         VG        Fmt  Attr PSize  PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <9.00g    0

/dev/sda3 はubuntu-vg というボリュームグループに組み込まれており、サイズは9.00gぐらいということがわかりました。

では、物理ボリューム /dev/sda3pvresize で拡張します。

root@ubuntu:~# pvresize /dev/sda3
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

結果を確認します。

root@ubuntu:~# pvdisplay -C
  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <14.00g 5.00g

14.00g に拡張されました。

LVMの論理ボリュームの拡張(lvresize)

次に、lvresizeを使って、論理ボリュームを拡張します。
似たコマンドとしてlvextend(拡張専用)、lvreduce(縮小専用)がありますが、
lvresize はこれらのコマンドの機能を兼ね備えたコマンドです。

作業終了時には次の構成になっています。
image.png

まずは、lvdisplay で状況を確認します。(-C オプションでカラム表示させる)

root@ubuntu:~# lvdisplay -C
  LV        VG        Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <9.00g

論理ボリューム ubuntu-lvubuntu-vgというボリュームグループから切り出されており、サイズは9.00gぐらいということがわかりました。

では、論理ボリューム ubuntu-lvlvresize で拡張します。
-l +100%FREEE で、ボリュームグループの空き領域100%分を+(拡張)するという意味になります。

root@ubuntu:/home/user# lvresize -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from <9.00 GiB (2303 extents) to <14.00 GiB (3583 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.

結果を確認します。

root@ubuntu:/home/user# lvdisplay -C
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <14.00g

14.00g に拡張されました。

ファイルシステムを拡張する

最後に、ファイルシステムを拡張します。

作業終了時には次の構成になっています。
image.png

方法1 resize2fs

resize2fsコマンドを使ってファイルシステムを拡張します。

まず、現在のファイルシステムサイズを、dfコマンドで確認します。

root@ubuntu:/home/user# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               445M     0  445M   0% /dev
tmpfs                               98M  2.5M   96M   3% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  8.8G  4.0G  4.4G  48% /
tmpfs                              489M     0  489M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              489M     0  489M   0% /sys/fs/cgroup
/dev/sda2                          976M  108M  801M  12% /boot
/dev/loop0                          56M   56M     0 100% /snap/core18/2128
/dev/loop1                          33M   33M     0 100% /snap/snapd/12704
/dev/loop2                          71M   71M     0 100% /snap/lxd/21029
tmpfs                               98M     0   98M   0% /run/user/1000

/dev/mapper/ubuntu--vg-ubuntu--lv のSizeが 8.8GB であることがわかります。

では、resize2fs コマンドでパーティションを拡張します。

root@ubuntu:/home/user# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 3668992 (4k) blocks long.

結果をdfコマンドで確認します。

root@ubuntu:/home/user# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               445M     0  445M   0% /dev
tmpfs                               98M  2.5M   96M   3% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   14G  4.0G  9.1G  31% /
tmpfs                              489M     0  489M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              489M     0  489M   0% /sys/fs/cgroup
/dev/sda2                          976M  108M  801M  12% /boot
/dev/loop0                          56M   56M     0 100% /snap/core18/2128
/dev/loop1                          33M   33M     0 100% /snap/snapd/12704
/dev/loop2                          71M   71M     0 100% /snap/lxd/21029
tmpfs                               98M     0   98M   0% /run/user/1000

/dev/mapper/ubuntu--vg-ubuntu--lv のSizeが 14GB(だいたい15GB) になりました。これで作業終了です。

備考:GUIの場合

GUIの場合は、gparted を使います。
Ubuntu 20.04 Desktop にはデフォルトではインストールされていないので、次のコマンドでインストールします。

root@ubuntu:~# apt install gparted

gparted で起動できます。

root@ubuntu:~# gparted

あとは直感的に使えるので、解説は割愛します。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7