如何增加 Vagrant VM 上的磁盘大小?

如何增加 Vagrant VM 上的磁盘大小?

我有一个由流浪汉使用虚拟盒在 Ubuntu 主机服务器上。我的 Vagrant 盒子使用 Puppetlabs Debian 6.0.7基座,其根分区使用 LVM。

默认情况下,磁盘为 8GB,对于我来说太小了。我想要:

  1. 增加现有磁盘的大小以及其上的文件系统无需破坏并重新创建我的虚拟机。
  2. 配置 Vagrant,以便将来为该项目创建更大的磁盘。

有人能解释一下如何做到这一点吗?

答案1

我找到了解决这个问题的最简单方法:

  • 安装此插件: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

我个人认为,连接一个额外的虚拟硬盘并将其安装到适当的安装点会更容易,例如/opt,将您的内容移过来rsync以解决这个问题,毕竟,puppet vagrant boxes 是为了测试目的。

原因VBoxManage modifyhd仅适用于原生 VDI 映像。但是,vagrant 基础框基本上使用 OVF/OVAVMDK格式导出。

VirtualBox 文档

--resize x选项(其中 x 是所需的新总空间,以兆字节为单位)允许您更改现有映像的容量;这会调整虚拟磁盘的逻辑大小,而不会对物理大小产生太大影响。[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 DEVICEext{3,4}。

答案3

我已经自动将磁盘添加到我的 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.shshell 脚本如下所示:

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 磁盘
  • 使用构建自己的盒子打包机. 您可以使用 opscode 框包装器定义作为起点

答案4

您可以使用插件,它可以让您指定磁盘大小 https://github.com/sprotheroe/vagrant-disksize

相关内容