なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

Linux on VirualBoxな環境でルートボリュームが足りなくなったときの対処方法

後で「やっぱ足りない」ってなるのが、ゲストマシンのストレージ割り当て

なれてないと、躓くところが2点ありますね。<自分

VirtualBoxの仮想ストレージ自体を増やす
・ゲストマシンのOSから、増やしたストレージを認識させる

たまにしかやらないので、すぐ忘れる。


新しい仮想ストレージを追加して、それをマウントして、ってやってもいいんですけど、マウントポイントの調整とかめんどくさいので、今の構成のママ広げたい、ってケースの手順を書き残しておきます。

ググると、VirutalBoxのコマンドラインベースの手順が結構ヒットするんですけど、それGUIでできるよ、って話で。

最近だと、EBSボリュームの差し替えネタがヒットしまくるのですが、やりたいのはソレじゃないんだよ、ってのもあるので、とりあえずサックリできる方法を残しておきたかったです。


なお、VirtualBoxのバージョンは5.2.24です。
6系がリリースされてますが、まだバージョンアップするの避けてます。

LinuxはRedHat6系(ルートボリュームのファイルシステムext4)です。まだまだ6系バリバリ使ってます。
Redhat7系(xfs)で確認したら、また書くかも。



仮想ストレージ拡張

既存の仮想ストレージが「.vdi」の場合

もともと拡張可能なタイプなので、サクッと引き上げましょう。

  1. メニューから「ファイル」>「仮想メディアマネージャー」を選択
  2. 「ハードディスク」タブから、該当のものを選択
  3. 「プロパティ」ボタンで、プロパティ表示
  4. 「属性」タブの「サイズ」で、サイズ変更して「適用」
既存の仮想ストレージが「.vmdk」の場合

「.vmdk」はサイズ固定タイプで、そのままでは拡張できません。
よって、「vdiに複製、差し替え」という手順で対処します。

ストレージの空きが十分にあることを確認してから作業してください。

  1. メニューから「ファイル」>「仮想メディアマネージャー」を選択
  2. 「ハードディスク」タブから、該当のものを選択
  3. 「コピー」ボタンで複製画面表示
  4. 「ディスクイメージ=VDI(VirtualBox Disk Image)」「物理ハードディスクにあるストレージ=可変サイズ」を選択し、適当な名前をつけて「コピー」実施。
  5. 仮想メディアマネージャーを閉じる
  6. ゲストマシンを選択し、「設定」>「ストレージ」
  7. 現在のストレージ(.vmdk)を選択して、画面右側の「属性:ハードディスク」のところから、複製したハードディスク(.vdi)を選択し、差し替えをして、「OK」
  8. ゲストマシンを起動し、以前と変わりなく起動することを確認したら、その仮想マシンは一度シャットダウンする。
  9. メニューから「ファイル」>「仮想メディアマネージャー」を選択
  10. 「ハードディスク」タブから、該当のものを選択
  11. 「プロパティ」ボタンで、プロパティ表示
  12. 「属性」タブの「サイズ」で、サイズ変更して「適用」

拡張したストレージをLinux OSに認識させる

もうViartualBox関係ない世界の話ですね。

vdiに差し替え、サイズ拡張まで済んだら、ゲストマシンを起動して、以下の手順を実行します。

(キャプチャ用に新しいOS立てたので、ディスク使用率が低い状態ですが、あしからず)


「.vdi」拡張前
# df -T
Filesystem           Type  1K-blocks   Used Available Use% Mounted on
/dev/mapper/vg_cent610-lv_root
                     ext4   15874468 956936  14104476   7% /
tmpfs                tmpfs   1961200      0   1961200   0% /dev/shm
/dev/sda1            ext4     487652  53086    408966  12% /boot
# ls -l /dev/sd*
brw-rw----. 1 root disk 8, 0 Jan 16 20:37 /dev/sda
brw-rw----. 1 root disk 8, 1 Jan 16 20:37 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 16 20:37 /dev/sda2
「.vdi」拡張後から、拡張分をパーティションとして認識させるまで。

fdiskで拡張した領域を「/dev/sda3」として認識させるのですが、rootボリュームが乗っているディスクなので、再起動後に認識します。
が、まだrootボリュームの一部としては認識されません。

# df -T
Filesystem           Type  1K-blocks   Used Available Use% Mounted on
/dev/mapper/vg_cent610-lv_root
                     ext4   15874468 851436  14209976   6% /
tmpfs                tmpfs   1961132      0   1961132   0% /dev/shm
/dev/sda1            ext4     487652  53086    408966  12% /boot
# ls -l /dev/sd*
brw-rw----. 1 root disk 8, 0 Jan 16 20:44 /dev/sda
brw-rw----. 1 root disk 8, 1 Jan 16 20:44 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 16 20:44 /dev/sda2
# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (2611-5221, default 2611):
Using default value 2611
Last cylinder, +cylinders or +size{K,M,G} (2611-5221, default 5221):
Using default value 5221

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

# reboot
再起動後、追加したパーティションをルートボリュームに組み込むまで。

vgdisplayコマンドで「VG Name」を確認しておき、「vgextend 」で指定すると、Volume groupに組み込まれます。
その後、resize2fsで、/dev/mapper/vg_cent610-lv_rootに組み込まれて「/」にマウントされている1つのボリュームとして認識されるようになります。

# df -T
Filesystem           Type  1K-blocks   Used Available Use% Mounted on
/dev/mapper/vg_cent610-lv_root
                     ext4   15874468 851488  14209924   6% /
tmpfs                tmpfs   1961132      0   1961132   0% /dev/shm
/dev/sda1            ext4     487652  53086    408966  12% /boot

# ls -l /dev/sd*
brw-rw----. 1 root disk 8, 0 Jan 16 20:49 /dev/sda
brw-rw----. 1 root disk 8, 1 Jan 16 20:49 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 16 20:49 /dev/sda2
brw-rw----. 1 root disk 8, 3 Jan 16 20:49 /dev/sda3

# vgdisplay
  --- Volume group ---
  VG Name               vg_cent610
  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.51 GiB
  PE Size               4.00 MiB
  Total PE              4994
  Alloc PE / Size       4994 / 19.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               K1PV0L-ZWUX-ZYw7-Iuap-MIgy-BCv9-SehlS0

# vgextend vg_cent610 /dev/sda3
  Physical volume "/dev/sda3" successfully created
  Volume group "vg_cent610" successfully extended

# vgdisplay
  --- Volume group ---
  VG Name               vg_cent610
  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               39.50 GiB
  PE Size               4.00 MiB
  Total PE              10112
  Alloc PE / Size       4994 / 19.51 GiB
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               K1PV0L-ZWUX-ZYw7-Iuap-MIgy-BCv9-SehlS0

# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_cent610/lv_root
  LV Name                lv_root
  VG Name                vg_cent610
  LV UUID                pP70Tl-e6tL-VBdv-7uGJ-a1yn-3PCF-dO9h7j
  LV Write Access        read/write
  LV Creation host, time cent610, 2019-01-16 20:33:47 -0500
  LV Status              available
  # open                 1
  LV Size                15.51 GiB
  Current LE             3970
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg_cent610/lv_swap
  LV Name                lv_swap
  VG Name                vg_cent610
  LV UUID                QCUWCL-EFa0-23cq-DeuK-Y3Vh-VmCX-rG64kC
  LV Write Access        read/write
  LV Creation host, time cent610, 2019-01-16 20:33:53 -0500
  LV Status              available
  # open                 1
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

# lvextend -l +100%FREE /dev/vg_cent610/lv_root
  Size of logical volume vg_cent610/lv_root changed from 15.51 GiB (3970 extents) to 35.50 GiB (9088 extents).
  Logical volume lv_root successfully resized.


# resize2fs /dev/vg_cent610/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_cent610/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 3
Performing an on-line resize of /dev/vg_cent610/lv_root to 9306112 (4k) blocks.
The filesystem on /dev/vg_cent610/lv_root is now 9306112 blocks long.

# df -T
Filesystem           Type  1K-blocks   Used Available Use% Mounted on
/dev/mapper/vg_cent610-lv_root
                     ext4   36512688 861592  33796272   3% /
tmpfs                tmpfs   1961216      0   1961216   0% /dev/shm
/dev/sda1            ext4     487652  53086    408966  12% /boot

こんな感じで、「/」が20GB - (「/boot」+ 「/swap」) から40GB - (「/boot」+ 「/swap」) に引き上げられました。

問題なければ、古い「.vmdk」は削除しましょう。
VirtualBoxの「仮想メディアマネージャー」から「除去」で削除します。
(ファイルの実体だけを直接削除すると、ViartulBox側で持っているメタデータと不一致になり、仮想メディアマネージャ上に残って「参照不可」のマークが付きます。)

VirtualBox本って無いよね

それって、本で解説するほど難しくないって理解でいいのかな。実際、これといって不自由なく使えてるし。

Vagrant本は結構あるので、なんとなくコレを貼っておきます。
Linuxコマンド側の理解を深めたいときは、Linux本をあたりましょう。

Vagrant入門ガイド

Vagrant入門ガイド