🙆

VirtualBoxのディスク容量を増やす方法(「No space left on device」対策)

2024/10/12に公開

はじめに

(本記事は再投稿です。)
VirtulaBox上のCentOSでシェルスクリプトを動かしていたら以下のエラーを吐いて途中で動かなくなってしまいました。

No space left on device

ディスク容量を増やして対応しようとしたところ、色々苦労したので備忘のため手順を残しておきます。
初学者のためいろいろ間違っていると思います。。ご指摘いただけると嬉しいです。

手順

8GB -> 32Gbに増やしてみます。

仮想的なサイズを増やす

まず、VirtualBox Managerで以下の流れのとおり仮想的なサイズを拡張します。こちらが参考になります。
ファイル>ツール>仮想メディアマネージャー>対象のストレージを選択>サイズを変更して「適用」

しかし、これだけではdfの結果は変わりません。

[root@localhost ~]# df -h /
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root   6.2G  1.3G  5.0G   20% /

ただ、デバイス全体で見ると/dev/sda/自体は32GBに増えていることが分かります。

[root@localhost ~]# lsblk -ip
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda                      8:0    0   32G  0 disk
|-/dev/sda1                   8:1    0    1G  0 part /boot
`-/dev/sda2                   8:2    0    7G  0 part
  |-/dev/mapper/centos-root 253:0    0  6.2G  0 lvm  / 
  `-/dev/mapper/centos-swap 253:1    0  820M  0 lvm  [SWAP]
/dev/sr0                     11:0    1 1024M  0 rom

dfの結果に反映させるには/にマウントしている/dev/mapper/centos-rootを拡張する必要がありますが、typeを見るとLVMとなっているため、LVMを使用していることが分かります。
そのため、パーテーション -> 物理ボリューム -> 論理ボリュームの順番で拡張してあげる必要があります。

パーテーションとボリュームの確認

パーテーションの確認

cfdiskコマンドでパーテーションを確認します。

 cfdisk (util-linux 2.23.2)

                                               ディスクドライブ: /dev/sda
                                           サイズ: 34359738368 バイト. 34.3 GB
                          ヘッド: 255   トラック当たりのセクタ: 63   シリンダ: 4177

      名前               フラグ            パーティションタイFSタイプ                  [ラベル]               サイズ (MB)
 ------------------------------------------------------------------------------------------------------------------------------
                                            基本/論理       空き領域                                               1.05        *
      sda1               ブート             基本領域        xfs                                                 1073.75        *
      sda2                                  基本領域        LVM2_member                                         7515.15        *
                                            基本/論理       空き領域                                           25769.81        *

sda2の後ろに、先ほど追加した領域があることが分かります。
この空き領域をsda2に渡してあげることが必要になります。
ちなみに、LVMを使用していない場合はここでパーテーションを選んで「Resize」=>「Write」すれば簡単にサイズを変更できます。

物理ボリュームの確認

[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <7.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              1791
  Free PE               0
  Allocated PE          1791
  PV UUID               zMIdTS-ntPY-1SS6-tWlv-e4TK-5wLY-2ceZ7a

論理ボリュームの確認

最終的にはこれを拡張してあげる必要があります。

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                K0d2iQ-66qd-LFxg-YmXV-gOai-TaTo-E72wa1
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-02-17 20:39:55 +0900
  LV Status              available
  # open                 2
  LV Size                820.00 MiB
  Current LE             205
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                oIjimO-Y0Vq-csuL-5IEl-FTsp-KC66-n5dTdB
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-02-17 20:39:55 +0900
  LV Status              available
  # open                 1
  LV Size                <6.20 GiB
  Current LE             1586
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

パーテーションとボリュームの拡張

パーテーションの拡張

以下のコマンドでパーテーション/dev/sda2に空き領域を渡します。

[root@localhost ~]# parted /dev/sda
(parted) resizepart 2 100%

cfdiskで改めて確認すると、空き領域がすべて/dev/sda2に渡されていることが分かります。

                                                  cfdisk (util-linux 2.23.2)

                                               ディスクドライブ: /dev/sda
                                           サイズ: 34359738368 バイト. 34.3 GB
                          ヘッド: 255   トラック当たりのセクタ: 63   シリンダ: 4177

      名前               フラグ            パーティションタイFSタイプ                  [ラベル]               サイズ (MB)
 ------------------------------------------------------------------------------------------------------------------------------
                                            基本/論理       空き領域                                               1.05        *
      sda1               ブート             基本領域        xfs                                                 1073.75        *
      sda2                                  基本領域        LVM2_member                                        33284.95        *

物理ボリュームの拡張

以下のコマンドを使います。
指定した物理ボリュームを拡張したパーテーションサイズに合わせて自動的に拡張します。

[root@localhost ~]# pvresize /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) esized or updated / 0 physical volume(s) not resized

増えていますね。

[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <31.00 GiB / not usable 2.00 MiB <===★
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              7935
  Free PE               6144
  Allocated PE          1791
  PV UUID               zMIdTS-ntPY-1SS6-tWlv-e4TK-5wLY-2ceZ7a

論理ボリュームの拡張

論理ボリュームである/dev/centos/rootを拡張します。
-l +100%FREEオプションは、利用可能な全ての空き領域を使用して論理ボリュームを拡張することを指示します。

[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
  Size of logical volume centos/root changed from <6.20 GiB (1586 extents) to <30.20 GiB (7730 extents).
  Logical volume centos/root successfully resized.

こちらもちゃんと増えています。

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                K0d2iQ-66qd-LFxg-YmXV-gOai-TaTo-E72wa1
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-02-17 20:39:55 +0900
  LV Status              available
  # open                 2
  LV Size                820.00 MiB
  Current LE             205
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                oIjimO-Y0Vq-csuL-5IEl-FTsp-KC66-n5dTdB
  LV Write Access        read/write
  LV Creation host, time localhost, 2024-02-17 20:39:55 +0900
  LV Status              available
  # open                 1
  LV Size                <30.20 GiB <===★
  Current LE             7730
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

XFSファイルシステムの拡張

最後に、論理ボリューム上のXFSファイルシステムのサイズを増やします。

[root@localhost ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=406016 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1624064, 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 1624064 to 7915520

最終確認

/dev/mapper/centos-rootのサイズが増えていることが確認できました!

[root@localhost ~]# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  908M     0  908M    0% /dev
tmpfs                     919M     0  919M    0% /dev/shm
tmpfs                     919M  8.6M  911M    1% /run
tmpfs                     919M     0  919M    0% /sys/fs/cgroup
/dev/mapper/centos-root    31G  1.3G   29G    5% /
/dev/sda1                1014M  150M  865M   15% /boot
tmpfs                     184M     0  184M    0% /run/user/0
[root@localhost ~]# lsblk -ip
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda                      8:0    0   32G  0 disk
|-/dev/sda1                   8:1    0    1G  0 part /boot
`-/dev/sda2                   8:2    0   31G  0 part
  |-/dev/mapper/centos-root 253:0    0 30.2G  0 lvm  /
  `-/dev/mapper/centos-swap 253:1    0  820M  0 lvm  [SWAP]
/dev/sr0                     11:0    1 1024M  0 rom

参考

Discussion