流浪者:将额外的磁盘映像与虚拟机的其余部分一起放置



我遇到的情况是我的便当/ubuntu-14.04 图像对于某些集成测试来说太小了。 因此,我想增加它的大小,我已经找到了如何使用 https://stackoverflow.com/a/27878224/53897

config.vm.provider "virtualbox" do |v|
v.memory = 8192
v.cpus = 2 # or more for heavy load
# https://stackoverflow.com/a/27878224/53897
v.customize ["createhd",  "--filename", "m4_disk0", "--size", "1048576"] # 1 TB
v.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "m4_disk0.vdi"]
end

然后添加

# First add the extra disk and extend the root volume.
#
# Adapted from https://www.rootusers.com/how-to-increase-the-size-of-a-linux-lvm-by-adding-a-new-disk/
fdisk /dev/sdb << EOF
n
p
1

t
8e
w
EOF
pvcreate /dev/sdb1
vgextend vagrant-vg /dev/sdb1
lvextend -r /dev/vagrant-vg/root /dev/sdb1
# ---

这似乎工作得很好,并且在进行"流浪破坏"时可以正确清洁。 (我们不会重新启动 vagrant 实例,只需手动挂起它)。

现在我遇到了一个问题,即"m4_disk0.vdi"文件是在我的Vagrantfile旁边创建的,而不是与其他 VirtualBox 文件一起创建的,这相当不方便,因为我的源位于快速但较小的 SSD 上,而 VirtualBox 文件位于大但较慢的 HDD 上。

有没有一种可靠的方法可以询问VagrantVirtualBox将实例放在哪里,以便我可以使用它在那里创建一个合适的文件名?

我的主机运行 Ubuntu 17.04,它附带 Vagrant 1.9.1。

vagrant 在与 Vagrantfile 相同的文件夹中运行命令,因此该文件在那里创建,如果您想指示另一个目录,请更改它

v.customize ["createhd",  "--filename", "/path/to/file/m4_disk0.vdi", "--size", "1048576"] # 1 TB
v.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", "1", "--type", "hdd", "--medium", "/path/to/file/m4_disk0.vdi"]

这些是代表vagrant运行的virtualbox命令,因此有关文件位置的信息将保存在vbox文件中

获取当前配置的位置

vagrant 会将 VM ID 存储在.vagrant/machines/default/virtualbox/id下的文件中(如果在 Vagrant 中更改 VM 的名称,则默认文件夹可能会更改)

由于Vagrantfile是一个Ruby脚本,你可以运行你的Ruby命令,像这样

id = File.read(".vagrant/machines/default/virtualbox/id")
location = `vboxmanage showvminfo #{id} -machinereadable | grep CfgFile`.chomp().scan(/"(.*)"/).first().first()

位置将保存初始vbox文件的位置,因此您仍然需要去除此名称以获取文件夹位置,然后您将能够在创建新硬盘驱动器时指示此文件夹。

我不是红宝石大师,所以可能有更好的方法来编写所有这些(可能使用正则表达式查找所有元素直到最后/或其他东西,但主要的流浪者想法是这个)

最新更新