Bagaimana saya bisa menambah ukuran disk pada VM Vagrant?

62

Saya memiliki VM yang dikelola oleh Vagrant menggunakan VirtualBox pada server host Ubuntu. Kotak gelandangan saya menggunakan Puppetlabs Debian 6.0.7 basebox , yang menggunakan LVM untuk partisi root.

Secara default disk adalah 8GB yang terlalu kecil untuk keperluan saya. Aku ingin:

  1. Tingkatkan ukuran disk yang ada dan sistem file di dalamnya tanpa merusak dan membuat ulang VM saya.
  2. Konfigurasikan Vagrant sehingga di masa depan itu akan membuat disk yang lebih besar untuk proyek ini.

Adakah yang bisa menjelaskan cara melakukan ini?

David Edwards
sumber

Jawaban:

25

Secara pribadi saya pikir akan lebih mudah untuk memasang HDD virtual tambahan dan memasangnya ke titik pemasangan yang tepat, misalnya /optdan memindahkan barang-barang Anda menggunakan rsyncuntuk mengatasi masalah ini, setelah semua, kotak gelandangan boneka adalah untuk tujuan pengujian.

Alasan mengapa : VBoxManage modifyhdhanya bekerja dengan gambar VDI asli. Namun, kotak dasar gelandangan pada dasarnya diekspor OVF / OVA menggunakan VMDKformat.

Lihat VirtualBox Documents

The --resize xpilihan (di mana x adalah yang diinginkan total ruang baru dalam megabyte) memungkinkan Anda untuk mengubah kapasitas gambar yang ada; ini menyesuaikan ukuran logis dari disk virtual tanpa mempengaruhi ukuran fisiknya. [37] Saat ini hanya berfungsi untuk format VDI dan VHD, dan hanya untuk varian yang dialokasikan secara dinamis, dan hanya dapat digunakan untuk memperluas (tidak menyusutkan) kapasitas.

Untuk meningkatkan kapasitas disk untuk Vagrant Base Box

Langkah-langkahnya adalah

  1. Untuk dapat mengubah ukuran HDD, Anda harus mengonversinya menjadi VDI terlebih dahulu, misalnya VBoxManage clonehd in.vmdk out.vdi --format VDIdan kemudian memasangnya kembali (menggunakan GUI lebih mudah).

  2. Ubah ukuran menggunakan VBoxManage modifyhd box.vdi --resize 15360yang meningkatkan kapasitas hingga 15GB.

  3. Namun ini hanya mengubah kapasitas drive, Anda harus memperluas sistem file untuk tamu setelahnya. Misalnya, gunakan resize2fs -p -F DEVICEuntuk ext {3,4}.

Terry Wang
sumber
3
Perhatikan bahwa setelah mengubah ukuran dan sebelum memulai kotak gelandangan lagi, Anda juga perlu memperbarui konfigurasi penyimpanan VirtualBox sehingga menggunakan VDI baru dan bukan VMDK asli: Di ​​VirtualBox> Penyimpanan> Hapus hard disk yang ada> Tambahkan hard disk (pilih yang ada dan arahkan ke gambar VDI baru)
Steve Swinsburg
Untuk pengguna Debian, saya sarankan juga melihat posting ini: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Ketika saya sampai ke langkah 3 itu tidak sesederhana menjalankan resize2fs. Semoga berhasil!
phirschybar
1
Saya baru saja menulis panduan konsolidasi tentang ini: medium.com/@phirschybar/…
phirschybar
32

Saya menemukan cara paling sederhana untuk menyelesaikan masalah ini:

  • Pasang plugin ini: vagrant plugin install vagrant-disksize

  • Edit Vagrantfile:

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

    • Catatan: ini tidak akan bekerja dengan vagrant reload
thucnguyen
sumber
2
Bekerja seperti pesona. Tampaknya menjadi solusi termudah yang pernah saya jumpai. Terima kasih Pak.
Rico
1
Untuk kotak Debian9 ini meningkatkan ukuran disk mentah, tetapi bukan partisi sebenarnya yang digunakan oleh instalasi Debian. Ukuran disk yang meningkat tidak langsung dapat digunakan.
Tonin
@Tonin apakah Anda berhasil menemukan solusi?
Mellkor
1
Saya menggunakan sudo cfdisk /dev/sdaalat untuk mengubah ukuran /dev/sda1partisi saya ke semua ruang yang baru tersedia. Lalu saya bilang filesystem saya untuk menggunakan ruang itu dengansudo resize2fs -p -F /dev/sda1
tutuDajuju
14

Saya sudah otomatis menambahkan disk di Vagrantfile saya:

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

Di mana add_new_disk.shskrip shell terlihat seperti ini:

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

Skrip ini untuk kotak Centos 6.4 , tetapi dapat dengan mudah disesuaikan dengan ubuntu.

Alih-alih menambahkan disk, opsi lain termasuk:

  • menggunakan kotak dengan disk yang lebih besar seperti opscode bento yang memiliki disk 40Gb
  • membangun kotak Anda sendiri menggunakan pengepak . Anda dapat menggunakan definisi pengepak kotak opscode sebagai titik awal
Chris Snow
sumber
Halo, Saya ingin mencoba solusi Anda. Bisakah Anda mengonfirmasi di mana dalam File Vagrant bagian kode ini ditambahkan? Salam Hormat
Rudi Strydom
@RudiStrydom Saya sudah memperbarui jawabannya - semoga lebih masuk akal sekarang.
Chris Snow
2
Ini harus menambahkan dalam config.vm.provider :virtualbox do |vb|blok untuk membuat semuanya lebih jelas
BT
1
Jika Anda mendapatkan "menentukan baik ukuran atau luasan" kesalahan untuk lvextend, cobalah lvextend -l +100%FREE /dev/VolGroup/lv_rootsebaliknya
Andomar
1
Contoh Anda akan membuat disk 5TB (unit --size adalah MB, lihat virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
backflip
7

Anda dapat menggunakan plugin, yang memungkinkan Anda menentukan ukuran disk https://github.com/sprotheroe/vagrant-disksize

shashi ranjan
sumber
Ini mengubah ukuran disk saya dan memperluas partisi hanya dalam satu baris konfigurasi. Sangat licin!
user1026263
0

disclaimer: jawaban yang kemungkinan besar hanya berlaku untuk distro yang menggunakan manajemen volume logis seperti rhel yang berlaku untuk use case berikut:

Saya telah menggunakan kotak gelandangan resmi Red Hat Enterpise 7.2 yang secara resmi disediakan oleh topi merah .

(Anda memerlukan akun pengembang rhel yang dapat Anda buat secara gratis)

Setelah instalasi saya merasa terganggu oleh fakta bahwa hanya 8GB juga tersedia:

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

Dan seperti yang Anda lihat, sebagian besar ruang sudah digunakan oleh instalasi rhel.

Namun saya menemukan bahwa grup volume yang sesuai dengan sistem file /dev/mapper/VolGroup00-rootmemang memiliki ruang tambahan (yang saya kira dalam hal kotak virtual dialokasikan secara dinamis)

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

Jadi satu-satunya hal yang harus dilakukan adalah:

a ) Tambah ukuran volume logis kita dengan mengatakan 10G

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

dan

b ) Perbarui sistem file root Anda sehingga menyadari perubahan ini

sudo xfs_growfs /dev/mapper/VolGroup00-root

(harap dicatat bahwa setidaknya untuk rhel 7.2 resize2fstidak akan berfungsi untuk tujuan ini).

Setelah itu, ruang tambahan tersedia untuk sistem file saya:

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

... tidak ada intervensi pada level virtualbox

pkaramol
sumber