masalibの日記

システム開発、運用と猫の写真ブログです

VirtualBoxでNo space left on deviceが表示された場合に対応

f:id:masalib:20170720023415j:plain

vagrantで作ったローカルの開発サイト(VirtualBox)を
構築していると下記のようなエラーが発生した

rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: write failed on "/var/www/html/xxxsitexxxx/public/scenario/data/fgimage/170425_mediaseek10703.png": No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(301) [receiver=3.0.6]
rsync: connection unexpectedly closed (45419 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]

ディスクが足りない系のエラーなんだけど
VirtualBoxでのディスクの追加しないといけなかった
クラウドみたいに簡単に追加できると思っていたが超絶めんどくさい手順を踏まないといけなかった





VMをシャットダウンする

vagarnt halt

コマンドラインを開く
VirtualBoxのプログラムにパスが通っているのか下記のコマンドで確認する

path

f:id:masalib:20170719202559p:plain

自分の場合はとおっていない
VirtualBoxの場所を調べて追加する

set path=%path%;C:\Program Files\Oracle\VirtualBox;

もし1度、pathがとっているのか確認する

path

通っている事が確認できたら
VMのHDD一覧が取得する

VBoxManage list hdds

f:id:masalib:20170719202737p:plain

①ディスクのパスをメモする

②Storage formatを確認する
vmdk形式ではディスクの拡張ができません。
なので一旦拡張できるvdi形式のファイルに移して拡張後に再度vmdk形式に移す作業をします。


フォルダの場所に移動する
①で調べたパスに移動する

cd C:\Users\XXXXXX\VirtualBox VMs\centos672_default_1500365444800_52789\

vdi形式にクローンする

VBoxManage clonehd "centos-vm-disk1.vmdk" "centos-vm-disk1.vdi" --format vdi
 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
 Clone medium created in format 'vdi'. UUID: 5fee9782-d3f6-4334-9287-1fafe54e5b5c

vdi形式で作ったディスクを20Gに増やす

 VBoxManage modifyhd centos-vm-disk1.vdi --resize 20480

増やしたVMをもとのフォーマット形式に戻す

 VBoxManage clonehd "centos-vm-disk1.vdi" "centos-vm-disk_20G.vmdk" --format vmdk

vm名を確認する
ファイルの前のフォルダのディレクトリ名がVM名になる
f:id:masalib:20170719202734p:plain

③の部分
アタッチの設定をかえる

VBoxManage storageattach centos672_default_1500365444800_52789 --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium centos-vm-disk_20G.vmdk

開発サーバーを起動する

vagrant up

開発サーバーにログインする

vagrant ssh

rootになる

su -
Password:

fdiskコマンドでパーティションを設定する

fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. Its strongly recommended to
         switch off the mode (command "c") and change display units to
         sectors (command "u").
#★pと打つ

Command (m for help): p

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00051d1a

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1275     9726976   8e  Linux LVM

#★nと打つ

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)

#★pと打つ

p

#★1,2とあるので次の3を設定するために3と打つ

Partition number (1-4): 3

#★ディスクのシリンダーの設定 デフォルトでOK

First cylinder (1275-2610, default 1275): 1275
Last cylinder, +cylinders or +size{K,M,G} (1275-2610, default 2610): 2610

#★設定した内容を反映する

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.

fdiskコマンドが成功したら、SSHで再ログインするために1度、ログアウトする

exit #rootのログアウト
exit #vagrantのログアウト

開発サーバーにログインする

vagrant ssh

rootになる

su -
Password:

既存のVGファイルシステムを拡張する

$ pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda2  VolGroup lvm2 a--  9.27g    0

#このVGがグループになるのであとで使うのでメモする

$ pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

$ vgextend VolGroup /dev/sda3
  Volume group "VolGroup" successfully extended

$ pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  VolGroup lvm2 a--   9.27g     0
  /dev/sda3  VolGroup lvm2 a--  10.23g 10.23g

# vgdisplay を実行し実行結果の" --- Physical volumes ---" の部分を見ることで、新しいPVが追加されたことを確認

$ vgdisplay -v VolGroup
    Using volume group(s) on command line.
  --- Volume group ---
  VG Name               VolGroup
  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               19.50 GiB
  PE Size               4.00 MiB
  Total PE              4992
  Alloc PE / Size       2374 / 9.27 GiB
  Free  PE / Size       2618 / 10.23 GiB
  VG UUID               vSK8ek-anHw-vzIU-hLSC-YyUi-JJCK-43dkaR

  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_root     #★ ←ここが重要
  LV Name                lv_root
  VG Name                VolGroup
  LV UUID                BbyXpl-Lu8z-aDXc-hF5u-ib1j-ml0f-PRlYvR
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-11-02 23:49:55 +0900
  LV Status              available
  # open                 1
  LV Size                8.30 GiB
  Current LE             2124
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_swap
  LV Name                lv_swap
  VG Name                VolGroup
  LV UUID                yk1n3U-cHOX-jeC6-p8yJ-sMu5-YMLL-oOs2cH
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-11-02 23:49:56 +0900
  LV Status              available
  # open                 1
  LV Size                1000.00 MiB
  Current LE             250
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Physical volumes ---
  PV Name               /dev/sda2
  PV UUID               hTIxaE-XcZT-GoSQ-sIy7-jD2T-vHZE-MvgwTM
  PV Status             allocatable
  Total PE / Free PE    2374 / 0

  PV Name               /dev/sda3
  PV UUID               MEg0SN-JKw2-daD5-2wwN-XgFD-FqZC-6EuMiT
  PV Status             allocatable
  Total PE / Free PE    2618 / 2618

LVの拡張

# vgdisplayで取得したパスをとにサイズを拡張する
$ lvextend -l +100%FREE  /dev/VolGroup/lv_root
  Size of logical volume VolGroup/lv_root changed from 8.30 GiB (2124 extents) to 18.52 GiB (4742 extents).
  Logical volume lv_root successfully resized

ファイルシステムの拡張
LVを拡張してもファイルシステムは以前の大きさのままなので、最後にファイルシステムの拡張も行う必要がある。

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

処理完了後、dfコマンドでファイルシステムが拡張されたことを確認する。

$  df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       19G  5.3G   12G  31% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             477M   57M  396M  13% /boot
var_opt               465G  126G  340G  27% /var/opt
vagrant               465G  126G  340G  27% /vagrant


インフラをやっているのでどうしてもコマンドですべて解決したくなった
fdiskでサイズを変更する所はGUIのツールの方が早くできたと思う
その部分に無駄にはまった


参考URL
stackoverflow.com
qiita.com
qiita.com
www.sandalot.com