Como posso aumentar o tamanho do disco em uma VM Vagrant?

62

Eu tenho uma VM gerenciada pelo Vagrant usando o VirtualBox em um servidor host do Ubuntu. Minha caixa do Vagrant usa a caixa base Puppetlabs Debian 6.0.7 , que usa o LVM para sua partição raiz.

Por padrão, o disco tem 8 GB, que é muito pequeno para meus propósitos. Eu gostaria de:

  1. Aumente o tamanho do disco existente e do sistema de arquivos nele sem destruir e recriar minha VM.
  2. Configure o Vagrant para que, no futuro, crie um disco maior para este projeto.

Alguém pode explicar como fazer isso?

David Edwards
fonte

Respostas:

25

Pessoalmente, acho que será mais fácil conectar um disco rígido virtual extra e montá-lo em um ponto de montagem adequado, por exemplo, /opte mover suas coisas usando rsyncpara solucionar esse problema; afinal, caixas de fantoches vagrantes são para fins de teste.

Razão pela qual : VBoxManage modifyhdfunciona apenas com imagem VDI nativa. No entanto, as caixas básicas vagantes são basicamente exportadas OVF / OVA usando o VMDKformato.

Consulte Documentos do VirtualBox

A --resize xopção (em que x é o novo espaço total desejado em megabytes) permite alterar a capacidade de uma imagem existente; isso ajusta o tamanho lógico de um disco virtual sem afetar muito o tamanho físico. [37] Atualmente, ele funciona apenas para os formatos VDI e VHD, e apenas para as variantes alocadas dinamicamente, e só pode ser usado para expandir (não reduzir) a capacidade.

Para aumentar a capacidade do disco do Vagrant Base Box

Etapas são

  1. Para poder redimensionar o disco rígido, você precisará primeiro convertê-lo em VDI, por exemplo, VBoxManage clonehd in.vmdk out.vdi --format VDIe depois conectá-lo novamente (é mais fácil usar a GUI).

  2. Redimensione-o usando o VBoxManage modifyhd box.vdi --resize 15360que aumenta a capacidade para 15 GB.

  3. No entanto, isso apenas altera a capacidade da unidade, você precisará expandir o sistema de arquivos para o convidado posteriormente. Por exemplo, use resize2fs -p -F DEVICEpara ext {3,4}.

Terry Wang
fonte
3
Observe que, após redimensionar e antes de reiniciar a caixa do vagrant, você também precisa atualizar a configuração de armazenamento do VirtualBox para que ela use o novo VDI e não o VMDK original: Em VirtualBox> Armazenamento> Remover disco rígido existente> Adicionar disco rígido (selecione existente e aponte para a nova imagem VDI)
Steve Swinsburg
Para usuários do Debian, sugiro também olhar para este post: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Quando cheguei ao passo 3, não era tão simples como correr resize2fs. Boa sorte!
Phirschybar
11
Acabei de escrever um guia consolidado sobre isso: medium.com/@phirschybar/…
phirschybar
32

Eu encontrei esta maneira mais simples de resolver esse problema:

  • Instale este plugin: vagrant plugin install vagrant-disksize

  • Edite o Vagrantfile:

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

    • Nota: isso não funcionará com vagrant reload
thucnguyen
fonte
2
Funcionou como um encanto. Parece ser a solução mais fácil que encontrei. Obrigado senhor.
Rico
11
Para uma caixa Debian9, isso aumenta o tamanho do disco bruto, mas não a partição real usada pela instalação da Debian. O tamanho aumentado do disco não é diretamente utilizável.
Tonin 22/03
@Tonin você conseguiu encontrar uma solução?
Mellkor 17/06
11
Usei a sudo cfdisk /dev/sdaferramenta para redimensionar minha /dev/sda1partição para todo o espaço disponível recentemente. Então eu disse ao meu sistema de arquivos para usar esse espaço comsudo resize2fs -p -F /dev/sda1
tutuDajuju
14

Automatizei a adição do disco no meu arquivo Vagrant:

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

Onde o add_new_disk.shscript shell se parece com isso:

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 é para uma caixa do centos 6.4 , mas pode ser facilmente adaptado ao ubuntu.

Em vez de adicionar um disco, outras opções incluem:

  • usando uma caixa com um disco maior, como o opscode bento, que possui discos de 40 GB
  • construa sua própria caixa usando o empacotador . Você pode usar as definições do empacotador de caixas opscode como ponto de partida
Chris Snow
fonte
Olá. Gostaria de experimentar a sua solução. Você pode confirmar onde no arquivo Vagrant essa seção de código foi adicionada? Atenciosamente
Rudi Strydom
@RudiStrydom Atualizei a resposta - espero que faça mais sentido agora.
Chris Snow
2
Isso deve adicionar no config.vm.provider :virtualbox do |vb|bloco para tornar as coisas mais claras
BT
11
Se você receber um "especificar o tamanho ou extensões" de erro para lvextend, tente lvextend -l +100%FREE /dev/VolGroup/lv_rootem vez
Andomar
11
Seu exemplo criaria um disco de 5 TB (a unidade --size é MB, consulte virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
backflip 31/01
7

Você pode usar o plug-in, que permitirá especificar o tamanho do disco https://github.com/sprotheroe/vagrant-disksize

shashi ranjan
fonte
Isso redimensionou meu disco e expandiu a partição em apenas uma linha de configuração. Muito liso!
user1026263 3/03
0

isenção de responsabilidade: resposta provavelmente aplicável apenas a distros que usam gerenciamento de volume lógico como rhel, ao qual o seguinte caso de uso se aplica:

Eu tenho usado a caixa de vagabundo oficial do Red Hat Enterpise 7.2 oficialmente fornecida pela red hat .

(você precisará de uma conta de desenvolvedor rhel que você pode criar gratuitamente)

Após a instalação, fiquei preocupado com o fato de que apenas 8 GB também estavam disponíveis:

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

E como você pode ver, a maior parte do espaço já havia sido consumida pela instalação do rhel.

No entanto, descobri que o grupo de volumes correspondente ao sistema de /dev/mapper/VolGroup00-rootarquivos tinha espaço extra (o que suponho em termos de caixa virtual foi alocado dinamicamente)

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

Portanto, as únicas coisas a serem feitas foram:

a ) Aumente o tamanho do nosso volume lógico, digamos 10G

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

e

b ) Atualize seu sistema de arquivos raiz para que ele fique ciente dessa alteração

sudo xfs_growfs /dev/mapper/VolGroup00-root

(observe que pelo menos para o rhel 7.2 resize2fsnão funcionará para esse fim).

Depois disso, havia espaço adicional disponível no meu sistema de arquivos:

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

... nenhuma intervenção no nível de caixa virtual

pkaramol
fonte