我有一个由Vagrant管理的VM,它在Ubuntu主机服务器上使用VirtualBox。My Vagrant框使用Puppetlabs Debian 6.0.7 basebox,它使用LVM作为其根分区。
默认情况下,该磁盘为8GB,对于我的目的来说太小了。我想要:
- 在不破坏和重新创建我的VM的情况下,增加现有磁盘和文件系统的大小。
- 配置Vagrant,以便将来为该项目创建更大的磁盘。
谁能解释如何做到这一点?
我有一个由Vagrant管理的VM,它在Ubuntu主机服务器上使用VirtualBox。My Vagrant框使用Puppetlabs Debian 6.0.7 basebox,它使用LVM作为其根分区。
默认情况下,该磁盘为8GB,对于我的目的来说太小了。我想要:
谁能解释如何做到这一点?
Answers:
我个人认为附加一个额外的虚拟HDD并将其安装到适当的安装点会比较容易,例如/opt
,将您的东西移到rsync
用来解决此问题的地方,毕竟,木偶无聊的盒子只是出于测试目的。
原因:VBoxManage modifyhd
仅适用于本机VDI映像。但是,无业游民的基本框基本上是使用VMDK
格式导出的OVF / OVA 。
请参阅VirtualBox文档
该
--resize x
选项(其中x是所需的新总空间(以兆字节为单位))使您可以更改现有图像的容量;这可以调整虚拟磁盘的逻辑大小,而不会对物理大小产生太大影响。[37] 当前,该功能仅适用于VDI和VHD格式,并且仅适用于动态分配的变体,并且只能用于扩展(而不是缩小)容量。
步骤是
为了能够调整HDD的大小,您必须先将其转换为VDI,例如VBoxManage clonehd in.vmdk out.vdi --format VDI
,然后将其重新连接(使用GUI更容易)。
使用VBoxManage modifyhd box.vdi --resize 15360
它调整大小,将容量增加到15GB。
但是,这只会更改驱动器容量,此后,您将必须扩展来宾的文件系统。例如,resize2fs -p -F DEVICE
用于ext {3,4}。
resize2fs
。祝好运!
我找到了解决此问题的最简单方法:
安装此插件: 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
sudo cfdisk /dev/sda
工具将/dev/sda1
分区的大小调整为所有新可用空间。然后,我告诉我的文件系统要使用这个空间,即sudo resize2fs -p -F /dev/sda1
我已将磁盘自动添加到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
shell脚本如下:
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。
除了添加磁盘以外,其他选项还包括:
config.vm.provider :virtualbox do |vb|
块使事情变得更加清晰
lvextend
,试图lvextend -l +100%FREE /dev/VolGroup/lv_root
代替
您可以使用该插件,该插件使您可以指定磁盘大小 https://github.com/sprotheroe/vagrant-disksize
免责声明:答案很可能仅适用于使用逻辑卷管理(例如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-root
fileystem 的卷组确实有额外的空间(我想就虚拟盒而言是动态分配的)
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级别进行干预