VirtualBoxで仮想HDDを追加して Linuxのディスク空き容量を増やす

More than 3 years have passed since last update.

VirtualBox上のCentOS7にあれやこれや入れてたら、仮想HDDの2GBでは少な過ぎたようで、ルートパスの使用率が96%に。

$ df

ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/centos-root 1361920 1306184 55736 96% /
devtmpfs 242508 0 242508 0% /dev
tmpfs 251028 0 251028 0% /dev/shm
tmpfs 251028 4408 246620 2% /run
tmpfs 251028 0 251028 0% /sys/fs/cgroup
/dev/sda1 508588 136960 371628 27% /boot

なにも考えず、とりあえず仮想HDDをもう2GB追加してルートパス /を拡張してみます。


VirtualBoxで新しい仮想HDDを追加

追加するVMのストレージ設定画面を開きます。

「コントローラー: SATA」を選択するとの右のほうにHDD追加ボタンHDD追加アイコン.PNG

がでるので、それをクリックします。

DiskADD01.PNG

「新規ディスクの作成」をクリックします。

DiskADD02.PNG

私の場合は、既存のディスクがVHDだったので同じVHDを選択しました。

デフォルトのVDIでも結構です。

DiskADD03.PNG

可変サイズを選択。固定でも大丈夫です。

(固定だといきなり指定サイズのファイルが作成される)

DiskADD04.PNG

仮想ディスクイメージのファイル名と、サイズを設定します。

DiskADD05.PNG

最後に作成をクリックするとDiskが追加されます。

DiskADD06.PNG


追加した仮想HDDをLinuxのボリュームへ追加

ルート / の空きを増やすには以下の作業が必要です。


  1. 追加した仮想HDDにパーティションを作成

  2. 作成したパーティションで物理ボリュームを作成

  3. / にマウントしている論理ボリュームが割当てられているボリュームグループへ、物理ボリュームを追加

  4. 論理ボリュームを拡張

  5. ファイルシステムを拡張

CentOS7に加えて、Ubuntu Server 14.04LTSでも試しています。

Ubuntuのrootボリュームグループ名はホスト名によって変るので、hostnameコマンドで確認して置き換えて下さい。


パーティション作成

まずは、認識されているHDDを探します。

デバイス名はsd?(もしくはhd?)を探します。


CentOS

$ ll /dev/sd*

brw-rw----. 1 root disk 8, 0 2月 00 00:00 /dev/sda
brw-rw----. 1 root disk 8, 1 2月 00 00:00 /dev/sda1
brw-rw----. 1 root disk 8, 2 2月 00 00:00 /dev/sda2
brw-rw----. 1 root disk 8, 16 2月 00 00:00 /dev/sdb


Ubuntu

$ ll /dev/sd*

brw-rw----. 1 root disk 8, 0 2月 00 00:00 /dev/sda
brw-rw----. 1 root disk 8, 1 2月 00 00:00 /dev/sda1
brw-rw----. 1 root disk 8, 2 2月 00 00:00 /dev/sda2
brw-rw----. 1 root disk 8, 5 2月 00 00:00 /dev/sda5
brw-rw----. 1 root disk 8, 16 2月 00 00:00 /dev/sdb

まだパーティションが作成されていない /dev/sdb が見つかりました。

fdiskを使用して、/dev/sdb に新しいパーティションを追加します。


CentOS

$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x1c46cb44.

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



Ubuntu

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0xf591a1f7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help):


pコマンドで現在のパーティションを確認します。


fdisk

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

Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x1c46cb44

デバイス ブート 始点 終点 ブロック Id システム


初期状態なので何もありません。

nコマンド新しいプライマリ・パーティションを作成します。

パーティション番号は1、2GiB全て割当てるために、セクターは全て(2048-4194303)使用します。

※2048開始なのは、あらゆるRAIDでストライプ・サイズの倍数になっているから、セクタ位置合せで都合がよいのだとか。


fdisk

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

Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-4194303, 初期値 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, 初期値 4194303): 4194303
Partition 1 of type Linux and of size 2 GiB is set

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

Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x1c46cb44

デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 4194303 2096128 83 Linux


新しいパーティション /dev/sdb1 が作成されました。

wコマンドでパーティションを書込みます。


fdisk

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

パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。


ファイルシステムからも /dev/sdb1 が確認できます。


CentOS

$ ll /dev/sd*

brw-rw----. 1 root disk 8, 0 2月 00 00:00 /dev/sda
brw-rw----. 1 root disk 8, 1 2月 00 00:00 /dev/sda1
brw-rw----. 1 root disk 8, 2 2月 00 00:00 /dev/sda2
brw-rw----. 1 root disk 8, 16 2月 00 00:00 /dev/sdb
brw-rw----. 1 root disk 8, 17 2月 00 00:00 /dev/sdb1


Ubuntu

$ ll /dev/sd*

brw-rw----. 1 root disk 8, 0 2月 00 00:00 /dev/sda
brw-rw----. 1 root disk 8, 1 2月 00 00:00 /dev/sda1
brw-rw----. 1 root disk 8, 2 2月 00 00:00 /dev/sda2
brw-rw----. 1 root disk 8, 5 2月 00 00:00 /dev/sda5
brw-rw----. 1 root disk 8, 16 2月 00 00:00 /dev/sdb
brw-rw----. 1 root disk 8, 17 2月 00 00:00 /dev/sdb1


ボリューム拡張

冒頭のdfコマンドで確認した通り、/dev/mapper/centos-root がルートにマウントされています。(Ubuntuは /dev/mapper/ホスト名--vg-root)

ボリュームグループ centos に物理ボリュームとして/dev/sdb1を追加して、論理ボリュームrootの容量を拡張します。


ボリュームグループ拡張

vgdisplayコマンドで現在のボリュームグループを確認します。


CentOS

$ sudo vgdisplay

--- Volume group ---
VG Name centos
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 1.51 GiB
PE Size 4.00 MiB
Total PE 386
Alloc PE / Size 386 / 1.51 GiB
Free PE / Size 0 / 0
VG UUID UPHnYU-zXwc-1L3w-LxQu-1uEP-K1wO-vCUXwc


Ubuntu

$ sudo vgdisplay

--- Volume group ---
VG Name ホスト名-vg
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 7.76 GiB
PE Size 4.00 MiB
Total PE 1986
Alloc PE / Size 1978 / 7.73 GiB
Free PE / Size 8 / 32.00 MiB
VG UUID JkiHt9-3wvZ-dJYz-qhPp-xGxd-QRWq-5HsliN

VG Sizeが1.51GiBになっています。(Ubuntuは7.76GiB)

pvcreateコマンドでパーティション /dev/sdb1 の物理ボリュームを作成して、ボリュームグループ centos へ追加します。(Ubuntuはボリュームグループ ホスト名-vg)


CentOS

$ sudo pvcreate /dev/sdb1

Physical volume "/dev/sdb1" successfully created
$ sudo vgextend centos /dev/sdb1
Volume group "centos" successfully extended
$ sudo vgdisplay
--- Volume group ---
VG Name centos
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 3.50 GiB
PE Size 4.00 MiB
Total PE 897
Alloc PE / Size 386 / 1.51 GiB
Free PE / Size 511 / 2.00 GiB
VG UUID UPHnYU-zXwc-1L3w-LxQu-1uEP-K1wO-vCUXwc


Ubuntu

$ sudo pvcreate /dev/sdb1

Physical volume "/dev/sdb1" successfully created
$ sudo vgextend ホスト名-vg /dev/sdb1
Volume group "ホスト名-vg" successfully extended
$ sudo vgdisplay
--- Volume group ---
VG Name ホスト名-vg
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 9.75 GiB
PE Size 4.00 MiB
Total PE 2497
Alloc PE / Size 1978 / 7.73 GiB
Free PE / Size 519 / 2.03 GiB
VG UUID JkiHt9-3wvZ-dJYz-qhPp-xGxd-QRWq-5HsliN

Free Sizeが2.00GiBに増えて、VG Sizeが3.50GiBになりました。(

Ubuntuは9.75GiBに)

この2.00GiBをすべて論理ボリューム root に割当てます。


論理ボリューム拡張

lvdisplayコマンドで現在のLV SizeとLV Pathを確認します。


CentOS

$ sudo lvdisplay

--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID T2yPcS-nfFm-QNQF-NXK9-IiOM-ZUz4-c4GY3V
LV Write Access read/write
LV Creation host, time localhost, 2015-02-00 00:00:00 +0900
LV Status available
# open 2
LV Size 204.00 MiB
Current LE 51
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID NhZmMs-2PF4-Izbl-glMg-Pm26-GPh0-cPnP0s
LV Write Access read/write
LV Creation host, time localhost, 2015-02-00 00:00:00 +0900
LV Status available
# open 1
LV Size 1.31 GiB
Current LE 335
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1



Ubuntu

$ sudo lvdisplay

--- Logical volume ---
LV Path /dev/ホスト名-vg/root
LV Name root
VG Name ホスト名-vg
LV UUID wfJe7W-SFJC-y3oK-2Qz2-fgR5-n8D2-8Jvb1a
LV Write Access read/write
LV Creation host, time ホスト名, 2014-09-00 00:00:00 +0900
LV Status available
# open 1
LV Size 7.23 GiB
Current LE 1851
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0

--- Logical volume ---
LV Path /dev/ホスト名-vg/swap_1
LV Name swap_1
VG Name ホスト名-vg
LV UUID 5lMqR5-0r5b-WfRz-21Rs-sF4z-foms-H3VYmY
LV Write Access read/write
LV Creation host, time ホスト名, 2014-09-00 00:00:00 +0900
LV Status available
# open 2
LV Size 508.00 MiB
Current LE 127
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1


lvextendコマンドでLV Path /dev/centos/root を指定し、論理ボリュームrootを拡張します(CentOSで、なんか2Gを指定したらエクステントが一個足らんって怒られたので、1.99Gにしました)


CentOS

$ sudo lvextend -L+1.99G /dev/centos/root

Rounding size to boundary between physical extents: 1.99 GiB
Extending logical volume root to 3.30 GiB
Logical volume root successfully resized
$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID T2yPcS-nfFm-QNQF-NXK9-IiOM-ZUz4-c4GY3V
LV Write Access read/write
LV Creation host, time localhost, 2015-02-19 10:44:47 +0900
LV Status available
# open 2
LV Size 204.00 MiB
Current LE 51
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0

--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID NhZmMs-2PF4-Izbl-glMg-Pm26-GPh0-cPnP0s
LV Write Access read/write
LV Creation host, time localhost, 2015-02-19 10:44:47 +0900
LV Status available
# open 1
LV Size 3.30 GiB
Current LE 845
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1



Ubuntu

$ sudo lvextend -L+2G /dev/ホスト名-vg/root

Extending logical volume root to 9.23 GiB
Logical volume root successfully resized

rootのLV Sizeが3.30GiBに増えました。(Ubuntuは9.23GiB)


ファイルシステム拡張(xfs)

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

CentOS7の場合、デフォルトのファイルシステムはxfsになっています。(Ubuntuはext4)

df -Tでファイルシステムタイプを確認してみます。


CentOS

$ df -T

ファイルシス タイプ 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/centos-root xfs 1361920 1306176 55744 96% /
devtmpfs devtmpfs 242508 0 242508 0% /dev
tmpfs tmpfs 251028 0 251028 0% /dev/shm
tmpfs tmpfs 251028 4440 246588 2% /run
tmpfs tmpfs 251028 0 251028 0% /sys/fs/cgroup
/dev/sda1 xfs 508588 136960 371628 27% /boot


Ubuntu

$ df -T

Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu01--vg-root ext4 7331536 1841792 5094276 27% /
none tmpfs 4 0 4 0% /sys/fs/cgroup
udev devtmpfs 239652 12 239640 1% /dev
tmpfs tmpfs 50180 436 49744 1% /run
none tmpfs 5120 0 5120 0% /run/lock
none tmpfs 250892 0 250892 0% /run/shm
none tmpfs 102400 0 102400 0% /run/user
/dev/sda1 ext2 240972 37074 191457 17% /boot

xfsの拡張はxfs_growfsコマンドを使用します。


CentOS

$ sudo xfs_growfs /dev/centos/root

meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=85760 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=343040, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
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 343040 to 865280

$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/centos-root 3450880 1306424 2144456 38% /
devtmpfs 242508 0 242508 0% /dev
tmpfs 251028 0 251028 0% /dev/shm
tmpfs 251028 4408 246620 2% /run
tmpfs 251028 0 251028 0% /sys/fs/cgroup
/dev/sda1 508588 136960 371628 27% /boot


無事にルートの空きが増えて、使用率が38%へ落ちました。

ext4の拡張はresize2fsコマンドを使用します。


Ubuntu

$ sudo resize2fs /dev/ホスト名-vg/root

resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/ubuntu01-vg/root is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/ubuntu01-vg/root is now 2419712 blocks long.
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/ホスト名--vg-root 9395856 1841792 7075532 21% /
none 4 0 4 0% /sys/fs/cgroup
udev 239652 12 239640 1% /dev
tmpfs 50180 436 49744 1% /run
none 5120 0 5120 0% /run/lock
none 250892 0 250892 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/sda1 240972 37074 191457 17% /boot