Làm cách nào để tăng kích thước đĩa trên máy ảo Vagrant?


62

Tôi có một VM được quản lý bởi Vagrant bằng VirtualBox trên máy chủ lưu trữ Ubuntu. Hộp Vagrant của tôi sử dụng basebox Puppetlabs Debian 6.0.7 , sử dụng LVM cho phân vùng gốc của nó.

Theo mặc định, đĩa là 8GB, quá nhỏ so với mục đích của tôi. Tôi muốn:

  1. Tăng kích thước của đĩa hiện có và hệ thống tệp trên đó mà không phá hủy và tạo lại VM của tôi.
  2. Cấu hình Vagrant để trong tương lai nó sẽ tạo ra một đĩa lớn hơn cho dự án này.

Bất cứ ai có thể giải thích làm thế nào để làm điều này?

Câu trả lời:


25

Cá nhân tôi nghĩ rằng sẽ dễ dàng hơn để gắn thêm một ổ cứng ảo và gắn nó vào một điểm gắn kết thích hợp, ví dụ /optvà chuyển công cụ của bạn qua sử dụng rsyncđể khắc phục sự cố này, sau tất cả, các hộp mơ hồ dành cho mục đích thử nghiệm.

Lý do tại sao : VBoxManage modifyhdchỉ hoạt động với hình ảnh VDI bản địa. Tuy nhiên, các hộp cơ sở mơ hồ về cơ bản được xuất OVF / OVA bằng VMDKđịnh dạng.

Xem tài liệu VirtualBox

Các --resize xtùy chọn (trong đó x là mong muốn tổng không gian mới bằng megabyte) cho phép bạn thay đổi năng lực của một hình ảnh hiện có; cái này điều chỉnh kích thước logic của đĩa ảo mà không ảnh hưởng nhiều đến kích thước vật lý. [37] Điều này hiện chỉ hoạt động cho các định dạng VDI và VHD và chỉ cho các biến thể được phân bổ động và chỉ có thể được sử dụng để mở rộng (không thu hẹp) dung lượng.

Để tăng dung lượng đĩa cho Vagrant Base Box

Các bước là

  1. Để có thể thay đổi kích thước ổ cứng, trước tiên bạn phải chuyển đổi nó thành VDI, ví dụ như VBoxManage clonehd in.vmdk out.vdi --format VDIsau đó gắn lại (sử dụng GUI dễ dàng hơn).

  2. Thay đổi kích thước nó bằng cách sử dụng VBoxManage modifyhd box.vdi --resize 15360tăng dung lượng lên 15GB.

  3. Tuy nhiên, điều này chỉ thay đổi dung lượng ổ đĩa, bạn sẽ phải mở rộng hệ thống tệp cho khách sau đó. Ví dụ: sử dụng resize2fs -p -F DEVICEcho ext {3,4}.


3
Lưu ý rằng sau khi thay đổi kích thước và trước khi khởi động lại hộp vagrant, bạn cũng cần cập nhật cấu hình lưu trữ VirtualBox để nó sử dụng VDI mới chứ không phải VMDK ban đầu: Trong VirtualBox> Storage> Xóa đĩa cứng hiện có> Thêm đĩa cứng (chọn hiện có và chỉ vào hình ảnh VDI mới)
Steve Swinsburg

Đối với người dùng Debian, tôi cũng khuyên bạn nên xem bài đăng này: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Khi tôi đến bước 3, nó không đơn giản như chạy resize2fs. Chúc may mắn!
phirschybar

1
Tôi vừa viết một hướng dẫn tổng hợp về điều này: Medium.com/@phirschybar/ từ
phirschybar

32

Tôi tìm thấy cách đơn giản nhất để giải quyết vấn đề này:

  • Cài đặt plugin này: vagrant plugin install vagrant-disksize

  • Chỉnh sửa Vagrantfile:

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

    • Lưu ý: điều này sẽ không hoạt động với vagrant reload

2
Làm việc như người ở. Có vẻ là giải pháp dễ dàng nhất mà tôi đi qua. Cảm ơn ngài.
Rico

1
Đối với hộp Debian9, điều này làm tăng kích thước đĩa thô, nhưng không phải là phân vùng thực tế được cài đặt Debian sử dụng. Kích thước đĩa tăng không thể sử dụng trực tiếp.
Tonin

@Tonin bạn có tìm được giải pháp không?
Mellkor

1
Tôi đã sử dụng sudo cfdisk /dev/sdacông cụ để thay đổi kích thước /dev/sda1phân vùng của mình thành tất cả không gian mới có sẵn. Sau đó, tôi đã nói với hệ thống tập tin của mình sử dụng không gian đó vớisudo resize2fs -p -F /dev/sda1
tutuDajuju

14

Tôi đã tự động thêm đĩa vào Vagrantfile của mình:

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

Trường hợp add_new_disk.shkịch bản shell trông như thế này:

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

Kịch bản này dành cho hộp 6,4 centos , nhưng có thể dễ dàng thích nghi với Ubuntu.

Thay vì thêm một đĩa, các tùy chọn khác bao gồm:

  • sử dụng hộp có đĩa lớn hơn như bento opscode có đĩa 40Gb
  • xây dựng hộp của riêng bạn bằng cách sử dụng packer . Bạn có thể sử dụng các định nghĩa trình đóng gói hộp opscode làm điểm bắt đầu

Xin chào, tôi muốn thử giải pháp của bạn. Bạn có thể xác nhận vị trí trong Tệp Vagrant phần mã này đã được thêm vào không? Trân trọng
Rudi Strydom

@RudiStrydom Tôi đã cập nhật câu trả lời - hy vọng nó có ý nghĩa hơn bây giờ.
Chris Snow

2
Điều này sẽ thêm vào config.vm.provider :virtualbox do |vb|khối để làm cho mọi thứ rõ ràng hơn
BT

1
Nếu bạn gặp lỗi "chỉ định kích thước hoặc phạm vi" cho lvextend, hãy thử lvextend -l +100%FREE /dev/VolGroup/lv_rootthay vào đó
Andomar

1
Ví dụ của bạn sẽ tạo một đĩa 5TB (đơn vị - kích thước là MB, xem virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
backflip


0

từ chối trách nhiệm: trả lời rất có thể chỉ áp dụng cho các bản phân phối sử dụng quản lý âm lượng hợp lý như rrc áp dụng trường hợp sử dụng sau:

Tôi đã và đang sử dụng hộp chính thức Red Hat Enterpise 7.2 chính thức được cung cấp bởi mũ đỏ .

(bạn sẽ cần một tài khoản nhà phát triển rrc mà bạn có thể tạo miễn phí)

Sau khi cài đặt, tôi đã gặp rắc rối bởi thực tế là chỉ có 8GB.

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

Và như bạn có thể thấy hầu hết không gian đã được sử dụng bởi cài đặt rrc.

Tuy nhiên, tôi phát hiện ra rằng nhóm âm lượng tương ứng với /dev/mapper/VolGroup00-roothệ thống tệp đã có thêm không gian (mà tôi cho rằng về mặt hộp ảo là phân bổ động)

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

Vì vậy, điều duy nhất còn lại phải làm là:

a ) Tăng kích thước khối lượng logic của chúng tôi bằng cách nói 10G

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

b ) Cập nhật hệ thống tập tin gốc của bạn để nó nhận ra sự thay đổi này

sudo xfs_growfs /dev/mapper/VolGroup00-root

(xin lưu ý rằng ít nhất là cho rc 7.2 resize2fssẽ không hoạt động cho mục đích này).

Sau đó, không gian bổ sung có sẵn cho hệ thống tập tin của tôi:

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

... không can thiệp vào cấp độ hộp ảo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.