¿Cómo puedo aumentar el tamaño del disco en una máquina virtual Vagrant?

62

Tengo una VM administrada por Vagrant usando VirtualBox en un servidor host de Ubuntu. Mi caja Vagrant usa la caja base Debpet 6.0.7 de Puppetlabs , que usa LVM para su partición raíz.

Por defecto, el disco es de 8 GB, que es demasiado pequeño para mis propósitos. Me gustaría:

  1. Aumente el tamaño del disco existente y el sistema de archivos en él sin destruir y recrear mi VM.
  2. Configure Vagrant para que en el futuro cree un disco más grande para este proyecto.

¿Alguien puede explicar cómo hacer esto?

David Edwards
fuente

Respuestas:

25

Personalmente, creo que será más fácil conectar un HDD virtual adicional y montarlo en un punto de montaje adecuado, por ejemplo, /opty mover sus cosas rsyncpara evitar este problema, después de todo, las cajas de títeres vagabundos son para fines de prueba.

Motivo por el que : VBoxManage modifyhdsolo funciona con imagen VDI nativa. Sin embargo, los cuadros base vagabundos se exportan básicamente OVF / OVA utilizando el VMDKformato.

Ver documentos de VirtualBox

La --resize xopción (donde x es el nuevo espacio total deseado en megabytes) le permite cambiar la capacidad de una imagen existente; esto ajusta el tamaño lógico de un disco virtual sin afectar mucho el tamaño físico. [37] Actualmente, esto solo funciona para los formatos VDI y VHD, y solo para las variantes asignadas dinámicamente, y solo se puede usar para expandir (no reducir) la capacidad.

Para aumentar la capacidad del disco para Vagrant Base Box

Los pasos son

  1. Para poder cambiar el tamaño del HDD, primero deberá convertirlo a VDI, por ejemplo, VBoxManage clonehd in.vmdk out.vdi --format VDIy luego volver a conectarlo (usar la GUI es más fácil).

  2. Cambie el tamaño con el VBoxManage modifyhd box.vdi --resize 15360que aumenta la capacidad a 15 GB.

  3. Sin embargo, esto solo cambia la capacidad de la unidad, luego tendrá que expandir el sistema de archivos para el invitado. Por ejemplo, use resize2fs -p -F DEVICEpara ext {3,4}.

Terry Wang
fuente
3
Tenga en cuenta que después de cambiar el tamaño y antes de volver a iniciar el cuadro vagabundo, también debe actualizar la configuración de almacenamiento de VirtualBox para que use el nuevo VDI y no el VMDK original: En VirtualBox> Almacenamiento> Eliminar disco duro existente> Agregar disco duro (seleccione existente y señale la nueva imagen VDI)
Steve Swinsburg
Para los usuarios de Debian, sugiero también mirar esta publicación: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Cuando llegué al paso 3, no fue tan simple como correr resize2fs. ¡Buena suerte!
phirschybar 01 de
1
Acabo de escribir una guía consolidada sobre esto: medium.com/@phirschybar/…
phirschybar
32

Encontré esta forma más simple de resolver este problema:

  • Instala este complemento: vagrant plugin install vagrant-disksize

  • Edite el Vagrantfile:

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

    • Nota: esto no funcionará con vagrant reload
Thucnguyen
fuente
2
Trabajado como un encanto. Parece ser la solución más fácil que he encontrado. Gracias Señor.
Rico
1
Para un cuadro Debian9, esto aumenta el tamaño del disco sin formato, pero no la partición real utilizada por la instalación de Debian. El aumento del tamaño del disco no se puede utilizar directamente.
Tonin
@Tonin, ¿lograste encontrar una solución?
Mellkor
1
Utilicé la sudo cfdisk /dev/sdaherramienta para cambiar el tamaño de mi /dev/sda1partición a todo el espacio recientemente disponible. Luego le dije a mi sistema de archivos que usara ese espacio consudo resize2fs -p -F /dev/sda1
tutuDajuju
14

He automatizado agregando el disco en mi 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

Donde el add_new_disk.shscript de shell se ve así:

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

Este script es para un cuadro de centos 6.4 , pero podría adaptarse fácilmente a ubuntu.

En lugar de agregar un disco, otras opciones incluyen:

  • usando una caja con un disco más grande como opscode bento que tiene discos de 40 Gb
  • construye tu propia caja usando empaquetador . Puede utilizar las definiciones de empaquetador de cajas opscode como punto de partida
Chris Snow
fuente
Hola, me gustaría probar tu solución. ¿Puede confirmar en qué parte del archivo vagabundo se agregó esta sección de código? Saludos cordiales
Rudi Strydom
@RudiStrydom He actualizado la respuesta, espero que tenga más sentido ahora.
Chris Snow
2
Esto debería agregar el config.vm.provider :virtualbox do |vb|bloque para aclarar las cosas
BT
1
Si obtiene un error de "especificar tamaño o extensión" lvextend, intente en su lvextend -l +100%FREE /dev/VolGroup/lv_rootlugar
Andomar
1
Su ejemplo crearía un disco de 5TB (la unidad --size es MB, consulte virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
backflip
7

Puede usar el complemento, que le permitirá especificar el tamaño del disco https://github.com/sprotheroe/vagrant-disksize

shashi ranjan
fuente
Esto redimensionó mi disco y expandió la partición en una sola línea de configuración. Muy hábil!
user1026263
0

descargo de responsabilidad: la respuesta probablemente sea aplicable solo para las distribuciones que usan administración de volumen lógica como rhel para las cuales se aplica el siguiente caso de uso:

He estado usando la caja vagabunda oficial Red Hat Enterpise 7.2 aprovisionada oficialmente por Red Hat .

(necesitará una cuenta de desarrollador de rhel que puede crear de forma gratuita)

Tras la instalación, me molestó el hecho de que solo 8GB también estaban disponibles:

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

Y como puede ver, la instalación de rhel ya había consumido la mayor parte del espacio.

Sin embargo, descubrí que el grupo de volúmenes correspondiente al sistema de /dev/mapper/VolGroup00-rootarchivos tenía espacio adicional (que supongo que en términos de caja virtual se asignó dinámicamente)

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

Entonces, lo único que quedaba por hacer era:

a ) Aumentar el tamaño de nuestro volumen lógico por decir 10G

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

y

b ) Actualice su sistema de archivos raíz para que tenga conocimiento de este cambio

sudo xfs_growfs /dev/mapper/VolGroup00-root

(tenga en cuenta que al menos para rhel 7.2 resize2fsno funcionará para este propósito).

Después de eso, había espacio adicional disponible para mi sistema de archivos:

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

... sin intervención en el nivel de virtualbox

pkaramol
fuente