Wie kann ich die Festplattengröße auf einer Vagrant-VM erhöhen?


62

Ich habe eine VM, die von Vagrant mithilfe von VirtualBox auf einem Ubuntu- Hostserver verwaltet wird . Meine Vagrant-Box verwendet die Puppetlabs Debian 6.0.7- Basisbox , die LVM als Root-Partition verwendet.

Standardmäßig ist die Festplatte 8 GB groß, was für meine Zwecke zu klein ist. Ich würde gerne:

  1. Erhöhen Sie die Größe der vorhandenen Festplatte und des Dateisystems, ohne meine VM zu zerstören und neu zu erstellen .
  2. Konfigurieren Sie Vagrant so, dass in Zukunft eine größere Festplatte für dieses Projekt erstellt wird.

Kann mir jemand erklären, wie das geht?

Antworten:


25

Ich persönlich denke , es wird einfacher sein , eine zusätzliche virtuelle Festplatte zu befestigen und es zu einem richtigen Einhängepunkt zu montieren, zum Beispiel /optund Ihre Sachen bewegen sich über Verwendung , rsyncum dieses Problem zu arbeiten, nachdem alle, Puppen Vagabund - Boxen sind für Testzwecke.

Grund warum : Funktioniert VBoxManage modifyhdnur mit nativem VDI-Image. Vagabundierende Basisboxen werden jedoch grundsätzlich im OVF / OVA- VMDKFormat exportiert .

Siehe VirtualBox-Dokumente

Mit der --resize xOption (wobei x der gewünschte neue Gesamtspeicherplatz in Megabyte ist) können Sie die Kapazität eines vorhandenen Bilds ändern. Dies passt die logische Größe eines virtuellen Laufwerks an, ohne die physische Größe wesentlich zu beeinflussen. [37] Dies funktioniert derzeit nur für VDI- und VHD-Formate und nur für die dynamisch zugewiesenen Varianten und kann nur zum Erweitern (nicht zum Verkleinern) der Kapazität verwendet werden.

So erhöhen Sie die Kapazität der Festplatte für die Vagrant Base Box

Schritte sind

  1. Um die Größe der Festplatte ändern zu können, müssen Sie sie zuerst in VDI konvertieren, z. B. VBoxManage clonehd in.vmdk out.vdi --format VDIund sie dann erneut anfügen (die Verwendung der GUI ist einfacher).

  2. Ändern Sie VBoxManage modifyhd box.vdi --resize 15360die Größe mit, wodurch die Kapazität auf 15 GB erhöht wird.

  3. Dies ändert jedoch nur die Laufwerkskapazität. Anschließend müssen Sie das Dateisystem für den Gast erweitern. Verwenden Sie beispielsweise resize2fs -p -F DEVICEfür ext {3,4}.


3
Beachten Sie, dass Sie nach der Größenänderung und vor dem erneuten Starten der Vagrant Box auch die VirtualBox-Speicherkonfiguration aktualisieren müssen, damit die neue VDI und nicht die ursprüngliche VMDK verwendet wird: Wählen Sie in VirtualBox> Speicher> Vorhandene Festplatte entfernen> Festplatte hinzufügen (vorhandene Festplatte auswählen) und auf das neue VDI-Image verweisen)
Steve Swinsburg

Für Debian-Benutzer schlage ich vor, auch diesen Beitrag zu lesen : blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Als ich zu Schritt 3 kam, war es nicht ganz so einfach wie Laufen resize2fs. Viel Glück!
phirschybar

1
Ich habe gerade einen konsolidierten Leitfaden dazu geschrieben: medium.com/@phirschybar/…
phirschybar

32

Ich habe diesen einfachsten Weg gefunden, um dieses Problem zu lösen:

  • Installiere dieses Plugin: vagrant plugin install vagrant-disksize

  • Bearbeiten Sie die Vagrantfile:

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

    • Hinweis: Dies funktioniert nicht mit vagrant reload

2
Lief wie am Schnürchen. Scheint die einfachste Lösung zu sein, auf die ich gestoßen bin. Danke mein Herr.
Rico

1
Für eine Debian9-Box erhöht dies die Größe der Raw-Festplatte, nicht jedoch die tatsächliche Partition, die von der Debian-Installation verwendet wird. Die erhöhte Festplattengröße ist nicht direkt verwendbar.
Tonin

@Tonin haben Sie es geschafft, eine Lösung zu finden?
Mellkor

1
Ich habe das sudo cfdisk /dev/sdaTool verwendet , um die Größe meiner /dev/sda1Partition an den gesamten neu verfügbaren Speicherplatz anzupassen . Dann sudo resize2fs -p -F /dev/sda1
forderte

14

Ich habe das Hinzufügen der Festplatte in mein Vagrantfile automatisiert:

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

Wo das add_new_disk.shShell-Skript so aussieht:

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

Dieses Skript ist für eine Centos 6.4- Box gedacht , kann aber leicht an Ubuntu angepasst werden.

Anstatt eine Festplatte hinzuzufügen, stehen folgende Optionen zur Verfügung:

  • mit einer box mit einer größeren festplatte wie opscode bento mit 40 gb festplatten
  • Bauen Sie Ihre eigene Box mit Packer . Sie können die opscode boxes-Packer-Definitionen als Ausgangspunkt verwenden

Hallo zusammen, ich würde gerne Deine Lösung ausprobieren. Können Sie bestätigen, wo in der Vagrant-Datei dieser Codeabschnitt hinzugefügt wurde? Mit freundlichen Grüßen
Rudi Strydom

@RudiStrydom Ich habe die Antwort aktualisiert - hoffe, es macht jetzt mehr Sinn.
Chris Snow

2
Dies sollte im config.vm.provider :virtualbox do |vb|Block hinzugefügt werden , um die Dinge klarer zu machen
BT

1
Wenn Sie die Fehlermeldung "Größe oder Umfang angeben" erhalten lvextend, versuchen Sie es lvextend -l +100%FREE /dev/VolGroup/lv_rootstattdessen
Andomar

1
In Ihrem Beispiel würde eine 5-TB-Festplatte erstellt (die --size-Einheit ist MB, siehe virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
Backflip am


0

Haftungsausschluss: Die Antwort ist höchstwahrscheinlich nur für Distributionen mit logischem Volume-Management wie Rhel anwendbar, für die der folgende Anwendungsfall gilt:

Ich habe mit der offiziellen Red Hat Enterpise 7.2 vagrant Box offiziell von rotem Hut bereitgestellt .

(Sie benötigen einen Rhel-Entwickler-Account, den Sie kostenlos erstellen können.)

Bei der Installation war ich beunruhigt darüber, dass nur 8 GB verfügbar waren:

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

Und wie Sie sehen, war der größte Teil des Platzes bereits von der Rhel-Installation belegt.

Ich stellte jedoch fest, dass die dem /dev/mapper/VolGroup00-rootDateisystem entsprechende Datenträgergruppe über zusätzlichen Speicherplatz verfügte (der meiner Meinung nach in Bezug auf die virtuelle Box dynamisch zugewiesen wurde).

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

Die einzigen Dinge, die noch zu tun waren, waren:

a ) Erhöhen Sie die Größe unseres logischen Volumens um beispielsweise 10 G

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

und

b ) Aktualisieren Sie Ihr Root-Dateisystem, damit es von dieser Änderung Kenntnis erhält

sudo xfs_growfs /dev/mapper/VolGroup00-root

(Bitte beachten Sie, dass zumindest für Rhel 7.2 resize2fsfür diesen Zweck nicht funktioniert).

Danach stand meinem Dateisystem zusätzlicher Speicherplatz zur Verfügung:

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

... kein Eingriff auf Virtualbox-Ebene

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.