Vagrant VMでディスクサイズを増やすにはどうすればよいですか?


62

UbuntuホストサーバーでVirtualBoxを使用してVagrantで管理されているVMがあります。私のVagrantボックスは、ルートパーティションにLVMを使用するPuppetlabs Debian 6.0.7 baseboxを使用します。

デフォルトでは、ディスクは8GBですが、これは私の目的には小さすぎます。私はしたいと思います:

  1. VMを破壊および再作成せずに、既存のディスクとその上のファイルシステムのサイズを増やします。
  2. Vagrantを構成して、将来このプロジェクト用に大きなディスクを作成するようにします。

誰でもこれを行う方法を説明できますか?

回答:


25

個人的には、余分な仮想HDDを取り付けて適切なマウントポイントにマウントする方が簡単だと思います。たとえば/optrsyncこの問題を回避するために使用するものを移動します。

理由VBoxManage modifyhdネイティブVDIイメージでのみ機能します。ただし、Vagrantベースボックスは、基本的にVMDK形式を使用してOVF / OVAにエクスポートされます。

VirtualBox Docsをご覧ください

--resize x(xは、MB単位で新しい合計スペースを希望する)オプションでは、既存のイメージの容量を変更することができます。これにより、物理サイズに大きな影響を与えることなく、仮想ディスクの論理サイズが調整されます。[37] これは現在、VDIおよびVHD形式、および動的に割り当てられたバリアントに対してのみ機能し、容量を拡張する(縮小するのではなく)ためにのみ使用できます。

Vagrant Base Boxのディスク容量を増やすには

手順は

  1. HDDのサイズを変更するには、まずVDIに変換する必要があります。たとえばVBoxManage clonehd in.vmdk out.vdi --format VDI、それを再接続します(GUIを使用する方が簡単です)。

  2. これを使用しVBoxManage modifyhd box.vdi --resize 15360てサイズを変更すると、容量が15GBに増えます。

  3. ただし、これはドライブの容量を変更するだけなので、後でゲストのファイルシステムを拡張する必要があります。たとえばresize2fs -p -F DEVICE、ext {3,4}に使用します。


3
サイズ変更後、vagrantボックスを再度起動する前に、元のVMDKではなく新しいVDIを使用するようにVirtualBoxストレージ構成も更新する必要があることに注意してください:VirtualBox> Storage> Remove existing hard disk> Add hard disk新しいVDIイメージを指す)
スティーブスウィンズバーグ14

Debianユーザのために、私はまた、この記事を見てお勧め:blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive。ステップ3に到達したとき、実行するほど簡単ではありませんでしたresize2fs。幸運を!
-phirschybar

1
:私はちょうどこの上連結ガイドに書いたmedium.com/@phirschybar/...
phirschybar

32

この問題を解決するこの最も簡単な方法を見つけました。

  • このプラグインをインストールします。 vagrant plugin install vagrant-disksize

  • 編集Vagrantfile

    Vagrant.configure('2') do |config|
      ...
      config.vm.box = 'ubuntu/xenial64'
      config.disksize.size = '50GB'
      ...
    end
    
  • vagrant halt && vagrant up

    • 注:これは動作しません vagrant reload

2
魅力のように働いた。私が出会った中で最も簡単な解決策のようです。ありがとうございます。
リコ

1
Debian9ボックスの場合、これによりrawディスクサイズが増加しますが、Debianインストールで使用される実際のパーティションは増加しません。増加したディスクサイズは直接使用できません。
トニン

@Toninは解決策を見つけることができましたか?
メルコール

1
sudo cfdisk /dev/sdaツールを使用/dev/sda1して、新しく使用可能なすべてのスペースにパーティションのサイズを変更しました。次に、ファイルシステムにそのスペースを使用するように指示しましたsudo resize2fs -p -F /dev/sda1
tutuDajuju

14

Vagrantfileにディスクを自動追加しました:

Vagrant.configure("2") do |config|
    ...
    file_to_disk = File.realpath( "." ).to_s + "/disk.vdi"

    if ARGV[0] == "up" && ! File.exist?(file_to_disk) 
       puts "Creating 5GB disk #{file_to_disk}."
       vb.customize [
            'createhd', 
            '--filename', file_to_disk, 
            '--format', 'VDI', 
            '--size', 5000 * 1024 # 5 GB
            ] 
       vb.customize [
            'storageattach', :id, 
            '--storagectl', 'SATA Controller', 
            '--port', 1, '--device', 0, 
            '--type', 'hdd', '--medium', 
            file_to_disk
            ]
   ...
   config.vm.provision "shell", path: "scripts/add_new_disk.sh"
   ...
end

どこでadd_new_disk.shシェルスクリプトは次のようになります。

set -e
set -x

if [ -f /etc/disk_added_date ]
then
   echo "disk already added so exiting."
   exit 0
fi


sudo fdisk -u /dev/sdb <<EOF
n
p
1


t
8e
w
EOF

pvcreate /dev/sdb1
vgextend VolGroup /dev/sdb1
lvextend /dev/VolGroup/lv_root
resize2fs /dev/VolGroup/lv_root

date > /etc/disk_added_date

このスクリプトは、centos 6.4ボックス用ですが、ubuntuに簡単に適合させることができます。

ディスクを追加する代わりに、他のオプションには次のものがあります。

  • 以下のような大きなディスクとボックスを使用してopscode弁当な40Gbディスクを持っています
  • packerを使用して独自のボックスを構築します。開始点としてopscodeボックスのパッカー定義を使用できます

こんにちは、あなたの解決策を試してみたいと思います。Vagrant Fileのこのセクションのコードが追加された場所を確認できますか?敬具
ルディストライダム14

@RudiStrydom私は答えを更新しました-それが今より理にかなっていることを願っています。
クリススノー14

2
これは、中に追加する必要がconfig.vm.provider :virtualbox do |vb|物事をより明確にするブロック
BT

1
あなたは、「いずれかの大きさや範囲を指定し、」エラーが発生した場合lvextend、試すlvextend -l +100%FREE /dev/VolGroup/lv_root代わりに
Andomar

1
あなたの例では、(--size単位はMBで、参照5TBのディスクを作成しますvirtualbox.org/manual/ch08.html#vboxmanage-createvdi)。
バックフリップ


0

免責事項:次のユースケースが適用されるrhelのような論理ボリューム管理を使用するディストリビューションにのみ適用される可能性が最も高い回答:

私は、Red Hat によって公式にプロビジョニングされた公式のRed Hat Enterpise 7.2浮浪者ボックスを使用しています。

(無料で作成できるrhel開発者アカウントが必要です)

インストール時に、8GBしか使用できないという事実に悩まされました。

sudo df -h
[vagrant@rhel-cdk ~]$ sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   8G  2,5G   6,5G  28% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

ご覧のとおり、ほとんどのスペースはrhelインストールによってすでに消費されていました。

しかし、/dev/mapper/VolGroup00-rootfileystemに対応するボリュームグループに余分なスペースがあることを発見しました(仮想ボックスに関しては動的に割り当てられたと思われます)

sudo vgdisplay VolGroup00
  --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               39,70 GiB
  PE Size               4,00 MiB
  Total PE              10164
  Alloc PE / Size       7872 / 30,75 GiB
  Free  PE / Size       2292 / 8,95 GiB
  VG UUID               JBVwpl-13KX-HbQw-FqUa-CA9w-swpF-dF6glm

したがって、やるべきことは次のとおりです。

a)論理ボリュームのサイズを10Gずつ増やします

sudo lvextend -L+10G /dev/VolGroup00/root

そして

b)ルートファイルシステムを更新して、この変更を認識できるようにします

sudo xfs_growfs /dev/mapper/VolGroup00-root

(少なくともrhel 7.2 resize2fsでは、この目的では機能しないことに注意してください)。

その後、ファイルシステムに追加のスペースが利用可能になりました。

sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   18G  2,5G   16G  14% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

... virtualboxレベルでの介入なし

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.