Як я можу збільшити розмір диска на Vgrant VM?


62

У мене VM управляється Vagrant за допомогою VirtualBox на хост-сервері Ubuntu. У вікні My Vagrant використовується базове поле Puppetlabs Debian 6.0.7 , яке використовує LVM для кореневого розділу.

За замовчуванням диск становить 8 Гб, що занадто мало для моїх цілей. Я хотів би:

  1. Збільшити розмір наявного диска та файлової системи на ньому, не руйнуючи та відтворюючи мій VM.
  2. Налаштуйте Vagrant так, щоб у майбутньому він створив більший диск для цього проекту.

Хтось може пояснити, як це зробити?

Відповіді:


25

Особисто я думаю, що буде легше приєднати додатковий віртуальний жорсткий диск і встановити його на належну точку монтажу, наприклад, /optперемістити свої речі, використовуючи, rsyncщоб вирішити цю проблему, зрештою, лялькові бродячі ящики призначені для тестування.

Причина : VBoxManage modifyhdпрацює лише з нативним VDI-зображенням. Тим не менш, бродячі базові поля в основному експортуються OVF / OVA у VMDKформаті.

Див. Документи VirtualBox

--resize xВаріант (де х бажаний нове спільний простір в мегабайтах) дозволяє змінювати ємність існуючого образу; це коригує логічний розмір віртуального диска, не впливаючи на фізичний розмір сильно. [37] Наразі це працює лише для форматів VDI та VHD, і лише для динамічно виділених варіантів, і їх можна використовувати лише для розширення (не зменшення) ємності.

Збільшити ємність диска для Vagrant Base Box

Кроки є

  1. Щоб мати змогу змінити розмір жорсткого диска, вам доведеться спершу перетворити його на VDI, наприклад, VBoxManage clonehd in.vmdk out.vdi --format VDIа потім знову приєднати його (використовувати графічний інтерфейс простіше).

  2. Змініть розмір, використовуючи VBoxManage modifyhd box.vdi --resize 15360який збільшує ємність до 15 Гб.

  3. Однак це лише змінює ємність накопичувача, після цього вам доведеться розширити файлову систему для гостя. Наприклад, можна використовувати resize2fs -p -F DEVICEдля доб {3,4}.


3
Зауважте, що після зміни розміру та перед тим, як знову запустити поле бродяги, вам також потрібно оновити конфігурацію пам’яті VirtualBox, щоб вона використовувала нову VDI, а не оригінальну VMDK: У VirtualBox> Зберігання> Видаліть існуючий жорсткий диск> Додати жорсткий диск (виберіть існуючий і вкажіть на новий образ VDI)
Стів Свінсбург

Для користувачів Debian я пропоную також переглянути цей пост: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Коли я дійшов до кроку 3, це було не так просто, як біг resize2fs. Удачі!
фіршибар

1
Я щойно написав зведений довідник про це: medium.com/@phirschybar/…
phirschybar

31

Я знайшов найпростіший спосіб вирішити цю проблему:

  • Встановіть цей плагін: vagrant plugin install vagrant-disksize

  • Редагуйте Vagrantfile:

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

    • Примітка: це не допоможе vagrant reload

2
Працював як шарм. Здається, це найпростіше рішення, на яке я потрапив. Дякую вам сер.
Ріко

1
Для вікна Debian9 це збільшує розмір необробленого диска, але не фактичний розділ, який використовується установкою Debian. Збільшений розмір диска не може бути використаний безпосередньо.
Тонін

@Tonin вам вдалося знайти рішення?
Mellkor

1
Я використовував sudo cfdisk /dev/sdaінструмент, щоб змінити розмір свого /dev/sda1розділу на весь наявний простір. Тоді я сказав своїй файловій системі використовувати цей простір зsudo resize2fs -p -F /dev/sda1
tutuDajuju

14

Я автоматично додав диск у свій 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

Де add_new_disk.shсценарій оболонки виглядає так:

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

Цей сценарій призначений для вікна центро 6,4 , але його можна легко адаптувати до ubuntu.

Замість того, щоб додати диск, інші параметри включають:

  • використовуючи коробку з більшим диском, таким як opscode bento, який має 40Gb диски
  • створити власну коробку за допомогою пакера . Ви можете використовувати визначення пакувальників opscode в якості вихідної точки

Привіт, я хотів би спробувати ваше рішення. Чи можете ви підтвердити, куди у файлі Vagrant був доданий цей розділ коду? З повагою
Rudi Strydom

@RudiStrydom Я оновив відповідь - сподіваюся, це має більше сенсу зараз.
Кріс Сноу

2
Це слід додати в config.vm.provider :virtualbox do |vb|блоці, щоб зробити речі більш зрозумілими
BT

1
Якщо ви отримаєте помилку "вказати або розмір, або розширення" для lvextend, спробуйте lvextend -l +100%FREE /dev/VolGroup/lv_rootзамість цього
Andomar

1
Ваш приклад створив би диск на 5 ТБ (одиниця розміру - MB, див. Virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
зворотний


0

відмова від відповідальності: відповідь, швидше за все, застосовується лише для дистрибутивів, використовуючи логічне керування гучністю, наприклад, rhel, для якого застосовується наступний випадок використання:

Я використовував офіційну коробочку Red Hat Enterpise 7.2, яка офіційно надана червоною шапочкою .

(вам знадобиться обліковий запис розробника Rhel, який ви можете створити безкоштовно)

Після встановлення мене непокоїло те, що було доступно лише 8 ГБ:

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

І як ви бачите, більша частина місця вже була зайнята інженерною установкою.

Однак я виявив, що група томів, що відповідає /dev/mapper/VolGroup00-rootфайловій системі, мала додатковий простір (який, я думаю, з точки зору віртуального поля був розподілений динамічно)

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

Тож залишилось лише зробити:

а ) Збільшити розмір нашого логічного обсягу, сказавши 10G

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

і

b ) Оновіть свою кореневу файлову систему, щоб вона стала відома про ці зміни

sudo xfs_growfs /dev/mapper/VolGroup00-root

(pls зауважте, що принаймні для rhel 7.2 resize2fsдля цієї мети не вийде).

Після цього в моїй файловій системі з'явився додатковий простір:

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

... ніяких втручань на рівні virtualbox

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.