Bir Vagrant VM'de disk boyutunu nasıl artırabilirim?


62

Bir Ubuntu sunucuda VirtualBox kullanarak Vagrant tarafından yönetilen bir VM'im var . Vagrant kutum , kök bölümü için LVM kullanan Puppetlabs Debian 6.0.7 temel kutusunu kullanıyor .

Varsayılan olarak disk 8GB'dir ve bu benim amaçlarım için çok küçük. İsterim:

  1. VM'mi yok etmeden ve yeniden oluşturmadan, mevcut diskin ve dosya sisteminin boyutunu artırın .
  2. Vagrant'ı, gelecekte bu proje için daha büyük bir disk oluşturacak şekilde yapılandırın.

Bunu nasıl yapacağınızı açıklayan var mı?

Yanıtlar:


25

Şahsen, fazladan bir sanal HDD takmanın ve uygun bir montaj noktasına monte etmenin daha kolay olacağını düşünüyorum, örneğin , kukla serseri kutuları test amaçlı olduğundan, bu sorunla uğraşmak /optiçin eşyalarını kullanmaya devam edin rsync.

Sebep neden : VBoxManage modifyhdyalnızca yerel VDI görüntüsü ile çalışır. Bununla birlikte, serseri taban kutuları temel olarak VMDKformat kullanılarak OVF / OVA olarak ihraç edilir .

VirtualBox Dokümanlarına Bakın

Bu --resize xseçenek (burada x megabayt cinsinden istenen yeni toplam alandır) mevcut bir görüntünün kapasitesini değiştirmenize olanak sağlar; bu, fiziksel diski çok fazla etkilemeden sanal diskin mantıksal boyutunu ayarlar. [37] Bu şu anda sadece VDI ve VHD formatları için ve sadece dinamik olarak tahsis edilmiş değişkenler için çalışmaktadır ve kapasiteyi arttırmak (küçültmek) için kullanılabilir.

Vagrant Base Box disk kapasitesini arttırmak

Adımlar

  1. HDD'yi yeniden boyutlandırabilmek için önce VDI'ye dönüştürmeniz gerekir; örneğin VBoxManage clonehd in.vmdk out.vdi --format VDI, sonra yeniden takmanız gerekir (GUI kullanımı kolaydır).

  2. VBoxManage modifyhd box.vdi --resize 15360Kapasiteyi 15GB'a yükselten kullanarak yeniden boyutlandırın .

  3. Ancak bu yalnızca sürücü kapasitesini değiştirir, daha sonra konuk için dosya sistemini genişletmeniz gerekir. Örneğin, resize2fs -p -F DEVICEext {3,4} için kullanın .


3
Yeniden boyutlandırdıktan sonra ve serseri kutusunu yeniden başlatmadan önce, aynı zamanda VirtualBox depolama yapılandırmasını da güncellemeniz gerektiğini, böylece yeni VDI kullandığını ve orijinal VMDK’yı kullanmayacağını unutmayın: VirtualBox> Storage> Mevcut sabit diski kaldır> Sabit disk ekle (mevcut olanı seçin) ve yeni VDI görüntüsüne
gelin

Debian kullanıcıları için bu yazıya da bakmanızı öneriyorum: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . 3. adıma geldiğimde koşmak kadar kolay değildi resize2fs. İyi şanslar!
phirschybar

1
Bu konuda birleştirilmiş bir rehber yazdım: medium.com/@phirschybar/…
phirschybar

32

Bu sorunu çözmek için bu en basit yolu buldum:

  • Bu eklentiyi yükle: vagrant plugin install vagrant-disksize

  • Düzenleyin Vagrantfile:

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

    • Not: Bu işe yaramayacak vagrant reload

2
Bir cazibe gibi çalıştı. Karşılaştığım en kolay çözüm gibi görünüyor. Teşekkürler bayım.
Rico,

1
Bir Debian9 kutusu için bu, ham disk boyutunu artırır, ancak Debian yüklemesi tarafından kullanılan gerçek bölümü değil. Artırılmış disk boyutu doğrudan kullanılamaz.
Tonin

@Tonin bir çözüm bulmayı başardınız mı?
Mellkor

1
Bu sudo cfdisk /dev/sdaaracı bölümümü /dev/sda1yeni kullanılabilir tüm alanlara yeniden boyutlandırmak için kullandım . Sonra dosya sudo resize2fs -p -F /dev/sda1
sistemime

14

Diskimi Vagrant dosyama ekleyerek otomatik hale getirdim:

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

Nerede add_new_disk.shkabuk komut dosyası aşağıdaki gibi görünür:

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

Bu senaryo bir 6.en centos kutusu içindir, ancak kolayca ubuntu'ya uyarlanabilir.

Bir disk eklemek yerine, diğer seçenekler şunlardır:

  • gibi daha büyük bir disk ile bir kutu kullanılarak opscode Bento 40Gb diskleri var
  • packer kullanarak kendi kutunuzu oluşturun . Opscode boxes paketleyici tanımlarını başlangıç ​​noktası olarak kullanabilirsiniz

Merhaba, çözümünüzü denemek istiyorum. Vagrant Dosyasında kodun bu bölümünün nereye eklendiğini onaylayabilir misin? Saygılarımızla
Rudi Strydom

@RudiStrydom Cevabı güncelledim - umarım şimdi daha mantıklı olur.
Chris Snow

2
Bu, config.vm.provider :virtualbox do |vb|olayları daha net hale getirmek için blok eklemelidir
BT

1
"Boyut veya uzantıyı belirtin" hatası alırsanız lvextend, lvextend -l +100%FREE /dev/VolGroup/lv_rootbunun yerine deneyin
Andomar

1
Örneğiniz bir 5TB disk oluşturur (--size birimi MB'dir, bkz. Virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
backflip


0

feragatname: büyük olasılıkla, sadece aşağıdaki kullanım durumunun geçerli olduğu rhel gibi mantıksal ses yönetimi kullanan dağıtımlar için geçerli olan cevap:

Resmi olarak kırmızı şapka tarafından sağlanan resmi Red Hat Enterpise 7.2 serseri kutusunu kullanıyorum .

(ücretsiz olarak yaratabileceğiniz bir geliştirici hesabına ihtiyacınız olacak)

Kurulumdan sonra, sadece 8GB'lık kapasitenin de mevcut olması beni rahatsız etti:

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

Gördüğünüz gibi, alanın büyük bir kısmı zaten rhel tesisatı tarafından tüketilmiş.

Ancak, /dev/mapper/VolGroup00-rootfileysteme karşılık gelen ses grubunun fazladan bir alana sahip olduğunu keşfettim (sanal kutu açısından dinamik olarak tahsis edilmiş olduğunu sanıyorum)

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

Böylece yapılacak tek şey şuydu:

a ) Mantıksal hacmin boyutunu 10G ile arttırma

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

ve

b ) Kök dosya sisteminizi, bu değişikliğin farkına varması için güncelleyin

sudo xfs_growfs /dev/mapper/VolGroup00-root

(pls en azından rhel 7.2 resize2fsiçin bu amaç için işe yaramayacağını unutmayın ).

Ondan sonra, dosya sistemime ilave alan verildi:

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

... sanal kutu düzeyinde müdahale yok

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.