Jak mogę zwiększyć rozmiar dysku na Vagrant VM?


62

Mam maszynę wirtualną zarządzaną przez Vagrant za pomocą VirtualBox na serwerze hosta Ubuntu. Moje pudełko Vagrant wykorzystuje podstawową wersję Puppetlabs Debian 6.0.7 , która używa LVM do partycji root.

Domyślnie dysk ma 8 GB, co jest za małe na moje potrzeby. Chciałabym:

  1. Zwiększ rozmiar istniejącego dysku i systemu plików na nim bez niszczenia i odtwarzania mojej maszyny wirtualnej.
  2. Skonfiguruj Vagrant, aby w przyszłości utworzył większy dysk dla tego projektu.

Czy ktoś może wyjaśnić, jak to zrobić?

Odpowiedzi:


25

Osobiście uważam, że łatwiej będzie dołączyć dodatkowy wirtualny dysk twardy i zamontować go w odpowiednim miejscu, na przykład, /opti przenieść swoje rzeczy, rsyncaby obejść ten problem, w końcu kukiełkowe włóczęgi są do celów testowych.

Powód dlaczego : VBoxManage modifyhddziała tylko z natywnym obrazem VDI. Jednak błędne skrzynki podstawowe są w zasadzie eksportowane OVF / OVA przy użyciu VMDKformatu.

Zobacz dokumenty VirtualBox

--resize xOpcja (gdzie x jest pożądana nową całkowitą przestrzeń w megabajtach) pozwala na zmianę potencjału istniejącego obrazu; dostosowuje to logiczny rozmiar dysku wirtualnego bez znacznego wpływu na rozmiar fizyczny. [37] Obecnie działa to tylko w przypadku formatów VDI i VHD i tylko w przypadku dynamicznie przydzielanych wariantów, i można go używać tylko do zwiększania (a nie zmniejszania) pojemności.

Aby zwiększyć pojemność dysku dla Vagrant Base Box

Kroki są

  1. Aby móc zmienić rozmiar dysku twardego, musisz najpierw przekonwertować go na VDI, np. VBoxManage clonehd in.vmdk out.vdi --format VDIA następnie ponownie podłączyć (korzystanie z GUI jest łatwiejsze).

  2. Zmień rozmiar, używając, VBoxManage modifyhd box.vdi --resize 15360co zwiększa pojemność do 15 GB.

  3. Zmienia to jednak tylko pojemność dysku, a następnie trzeba będzie rozszerzyć system plików dla gościa. Na przykład użyj resize2fs -p -F DEVICEdla ext {3,4}.


3
Zauważ, że po zmianie rozmiaru i przed ponownym uruchomieniem Vagrant box musisz również zaktualizować konfigurację magazynu VirtualBox, aby używała nowego VDI, a nie oryginalnego VMDK: W VirtualBox> Pamięć> Usuń istniejący dysk twardy> Dodaj dysk twardy (wybierz istniejący i wskaż nowy obraz VDI)
Steve Swinsburg,

Użytkownikom Debiana proponuję również zajrzeć do tego postu: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Kiedy dotarłem do kroku 3, nie było to tak proste jak bieganie resize2fs. Powodzenia!
phirschybar

1
Właśnie napisałem skonsolidowany przewodnik na ten temat: medium.com/@phirschybar/…
phirschybar

31

Znalazłem najprostszy sposób rozwiązania tego problemu:

  • Zainstaluj tę wtyczkę: vagrant plugin install vagrant-disksize

  • Edytuj Vagrantfile:

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

    • Uwaga: to nie zadziała vagrant reload

2
Działa jak urok. Wydaje się, że jest to najłatwiejsze rozwiązanie, z jakim się zetknąłem. Dziękuję Panu.
Rico

1
W przypadku pudełka Debian9 zwiększa to rozmiar dysku surowego, ale nie rzeczywistą partycję używaną przez instalację Debiana. Zwiększonego rozmiaru dysku nie można bezpośrednio wykorzystać.
Tonin

@Tonin udało ci się znaleźć rozwiązanie?
Mellkor

1
Użyłem sudo cfdisk /dev/sdanarzędzia, aby zmienić rozmiar /dev/sda1partycji na całą nowo dostępną przestrzeń. Potem powiedziałem mojemu sudo resize2fs -p -F /dev/sda1
systemowi

14

Zautomatyzowałem dodawanie dysku do mojego pliku 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

Gdzie add_new_disk.shskrypt powłoki wygląda następująco:

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

Ten skrypt jest przeznaczony dla pudełka centos 6.4 , ale można go łatwo dostosować do Ubuntu.

Zamiast dodawać dysk, inne opcje obejmują:

  • za pomocą pudełka z większym dyskiem, takiego jak opscode bento, które mają dyski 40 Gb
  • zbuduj własne pudełko za pomocą pakera . Jako punktu początkowego można użyć definicji pakietu opscode box packer

Cześć, chciałbym wypróbować twoje rozwiązanie. Czy możesz potwierdzić, gdzie w Vagrant File została dodana ta sekcja kodu? Z pozdrowieniami
Rudi Strydom

@RudiStrydom Zaktualizowałem odpowiedź - mam nadzieję, że teraz ma to więcej sensu.
Chris Snow

2
To powinno dodać do config.vm.provider :virtualbox do |vb|bloku, aby wszystko było bardziej jasne
BT

1
Jeśli pojawi się błąd „określ rozmiar lub zakres” lvextend, spróbuj lvextend -l +100%FREE /dev/VolGroup/lv_rootzamiast tego
Andomar,

1
Twój przykład utworzyłby dysk o pojemności 5 TB (jednostka --size to MB, patrz virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
backflip


0

zrzeczenie się odpowiedzialności: odpowiedz najprawdopodobniej dotyczy tylko dystrybucji za pomocą logicznego zarządzania woluminami, takich jak rhel, dla których ma zastosowanie następujący przypadek użycia:

Korzystam z oficjalnej skrzynki Vagrant 7.2 Red Hat Enterpise oficjalnie udostępnionej przez red hat .

(potrzebujesz konta programisty rhel, które możesz utworzyć za darmo)

Podczas instalacji niepokoiło mnie to, że dostępnych było tylko 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

Jak widać, większość miejsca została już zajęta przez instalację Rhel.

Odkryłem jednak, że grupa woluminów odpowiadająca /dev/mapper/VolGroup00-rootsystemowi plików ma dodatkową przestrzeń (która, jak sądzę, pod względem wirtualnego pudełka została przydzielona dynamicznie)

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

Jedyne, co pozostało do zrobienia, to:

a ) Zwiększ rozmiar naszego logicznego woluminu o powiedzmy 10G

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

i

b ) Zaktualizuj główny system plików, aby dowiedział się o tej zmianie

sudo xfs_growfs /dev/mapper/VolGroup00-root

(proszę zauważyć, że przynajmniej dla rhel 7.2 resize2fsnie zadziała w tym celu).

Następnie do mojego systemu plików była dostępna dodatkowa przestrzeń:

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

... brak interwencji na poziomie wirtualnej skrzynki

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.