Come posso aumentare le dimensioni del disco su una VM Vagrant?


62

Ho una VM gestita da Vagrant usando VirtualBox su un server host Ubuntu. La mia casella Vagrant utilizza il Puppetlabs Debian 6.0.7 basebox , che utilizza LVM per la sua partizione di root.

Di default il disco è di 8 GB che è troppo piccolo per i miei scopi. Mi piacerebbe:

  1. Aumenta le dimensioni del disco esistente e del file system su di esso senza distruggere e ricreare la mia macchina virtuale.
  2. Configura Vagrant in modo che in futuro creerà un disco più grande per questo progetto.

Qualcuno può spiegare come farlo?

Risposte:


25

Personalmente penso che sarà più facile collegare un HDD virtuale aggiuntivo e montarlo su un punto di montaggio adeguato, ad esempio /opte spostare le tue cose usando rsyncper aggirare questo problema, dopo tutto, le scatole di burattini sono a scopo di test.

Motivo per cui : VBoxManage modifyhdfunziona solo con l'immagine VDI nativa. Tuttavia, le scatole di base vagabonde vengono essenzialmente esportate OVF / OVA utilizzando il VMDKformato.

Vedi i documenti di VirtualBox

L' --resize xopzione (dove x è il nuovo spazio totale desiderato in megabyte) consente di modificare la capacità di un'immagine esistente; questo regola la dimensione logica di un disco virtuale senza influire molto sulla dimensione fisica. [37] Questo attualmente funziona solo per i formati VDI e VHD e solo per le varianti allocate dinamicamente e può essere utilizzato solo per espandere (non ridurre) la capacità.

Per aumentare la capacità del disco per Vagrant Base Box

I passaggi sono

  1. Per poter ridimensionare l'HDD, devi prima convertirlo in VDI, ad es. VBoxManage clonehd in.vmdk out.vdi --format VDIE quindi ricollegarlo (usare la GUI è più semplice).

  2. Ridimensionalo utilizzando il VBoxManage modifyhd box.vdi --resize 15360quale aumenta la capacità a 15 GB.

  3. Tuttavia, ciò modifica solo la capacità dell'unità, in seguito sarà necessario espandere il file system per il guest. Ad esempio, utilizzare resize2fs -p -F DEVICEext {3,4}.


3
Nota che dopo il ridimensionamento e prima di riavviare la casella vagabondo, devi anche aggiornare la configurazione di archiviazione di VirtualBox in modo che utilizzi il nuovo VDI e non il VMDK originale: In VirtualBox> Archiviazione> Rimuovi disco rigido esistente> Aggiungi disco rigido (seleziona esistente e indica la nuova immagine VDI)
Steve Swinsburg,

Per gli utenti Debian, suggerisco anche di guardare questo post: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Quando sono arrivato al passaggio 3 non è stato così semplice come correre resize2fs. In bocca al lupo!
phirschybar,

1
Ho appena scritto una guida consolidata su questo: medium.com/@phirschybar/…
phirschybar

32

Ho trovato questo modo più semplice per risolvere questo problema:

  • Installa questo plugin: vagrant plugin install vagrant-disksize

  • Modifica il Vagrantfile:

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

    • Nota: questo non funzionerà con vagrant reload

2
Ha funzionato come un fascino. Sembra essere la soluzione più semplice che abbia mai incontrato. Grazie Signore.
Rico

1
Per un box Debian9 questo aumenta la dimensione del disco grezzo, ma non la partizione effettiva usata dall'installazione di Debian. La dimensione del disco aumentata non è direttamente utilizzabile.
Tonin

@Tonin sei riuscito a trovare una soluzione?
Mellkor,

1
Ho usato lo sudo cfdisk /dev/sdastrumento per ridimensionare la mia /dev/sda1partizione su tutto lo spazio disponibile di recente. Poi ho detto al mio filesystem di usare quello spazio consudo resize2fs -p -F /dev/sda1
tutuDajuju il

14

Ho automatizzato l'aggiunta del disco nel mio 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

Dove lo add_new_disk.shscript della shell si presenta così:

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

Questo script è per una scatola di centos 6.4 , ma potrebbe essere facilmente adattato a Ubuntu.

Invece di aggiungere un disco, altre opzioni includono:

  • usando una scatola con un disco più grande come opscode bento che ha dischi da 40 GB
  • costruisci la tua scatola usando packer . È possibile utilizzare le definizioni del packer delle caselle opscode come punto di partenza

Ciao, vorrei provare la tua soluzione. Puoi confermare dove nel Vagrant File è stata aggiunta questa sezione di codice? Cordiali saluti
Rudi Strydom,

@RudiStrydom Ho aggiornato la risposta - spero che abbia più senso ora.
Chris Snow,

2
Questo dovrebbe aggiungere il config.vm.provider :virtualbox do |vb|blocco per rendere le cose più chiare
BT,

1
Se ricevi un errore "specifica dimensione o estensione" per lvextend, prova lvextend -l +100%FREE /dev/VolGroup/lv_rootinvece
Andomar

1
Il tuo esempio creerebbe un disco da 5 TB (l'unità --size è MB, vedi virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
backflip


0

dichiarazione di non responsabilità: risposta molto probabilmente applicabile solo per le distribuzioni che utilizzano la gestione del volume logico come rhel per cui si applica il seguente caso d'uso:

Ho usato la scatola del vagabondo Red Hat Enterpise 7.2 ufficiale fornita ufficialmente da Red Hat .

(avrai bisogno di un account sviluppatore rhel che puoi creare gratuitamente)

Al momento dell'installazione, ero turbato dal fatto che erano disponibili anche solo 8 GB:

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 come puoi vedere, la maggior parte dello spazio era già stato consumato dall'installazione di rhel.

Tuttavia ho scoperto che il gruppo di volumi corrispondente al file /dev/mapper/VolGroup00-rootsystem aveva spazio extra (che suppongo in termini di virtual box fosse allocato 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

Quindi le uniche cose che rimanevano da fare erano:

a ) Aumenta la dimensione del nostro volume logico di 10G

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

e

b ) Aggiorna il tuo filesystem di root in modo che venga a conoscenza di questa modifica

sudo xfs_growfs /dev/mapper/VolGroup00-root

(per favore nota che almeno per rhel 7.2 resize2fsnon funzionerà per questo scopo).

Successivamente, è stato disponibile spazio aggiuntivo per il mio filesystem:

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

... nessun intervento a livello di virtualbox

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.