Как я могу увеличить размер диска на Vagrant VM?

62

У меня есть виртуальная машина, управляемая Vagrant с использованием VirtualBox на хост-сервере Ubuntu. Моя Vagrant коробка использует Puppetlabs Debian 6.0.7 basebox , который использует LVM для корневого раздела.

По умолчанию диск составляет 8 ГБ, что слишком мало для моих целей. Я бы хотел:

  1. Увеличьте размер существующего диска и файловой системы на нем, не разрушая и не воссоздавая мою виртуальную машину.
  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для ext {3,4}.

Терри Ван
источник
3
Обратите внимание, что после изменения размера и перед повторным запуском vagrant box вам также необходимо обновить конфигурацию хранилища VirtualBox, чтобы он использовал новый VDI, а не исходный VMDK: В VirtualBox> Хранилище> Удалить существующий жесткий диск> Добавить жесткий диск (выбрать существующий и укажите на новый образ VDI)
Стив Суинсбург
Для пользователей Debian я также предлагаю посмотреть этот пост: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Когда я добрался до шага 3, это было не так просто, как бег resize2fs. Удачи!
phirschybar
1
Я просто написал сводное руководство по этому: medium.com/@phirschybar/...
phirschybar
32

Я нашел этот самый простой способ решить эту проблему:

  • Установите этот плагин: 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
thucnguyen
источник
2
Работал как шарм. Кажется, это самое простое решение, с которым я столкнулся. Спасибо, сэр.
Рико
1
Для коробки Debian9 это увеличивает размер необработанного диска, но не фактический раздел, используемый установкой Debian. Увеличенный размер диска нельзя использовать напрямую.
Тонин
@ Тонин тебе удалось найти решение?
Меллкор
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

Этот скрипт предназначен для коробки Centos 6.4 , но его можно легко адаптировать к Ubuntu.

Вместо добавления диска, другие варианты включают в себя:

  • используя коробку с большим диском, таким как opscode bento с дисками 40 Гб
  • постройте свою собственную коробку, используя упаковщик . Вы можете использовать определения упаковщика блоков opscode в качестве отправной точки
Крис Сноу
источник
Привет, я хотел бы попробовать ваше решение. Можете ли вы подтвердить, где в Vagrant File был добавлен этот раздел кода? С наилучшими пожеланиями
Руди Стридом
@RudiStrydom Я обновил ответ - надеюсь, теперь это имеет больше смысла.
Крис Сноу
2
Это должно добавить в config.vm.provider :virtualbox do |vb|блоке, чтобы сделать вещи более ясными
BT
1
Если вы получаете сообщение об ошибке «указать размер или экстент» lvextend, попробуйте lvextend -l +100%FREE /dev/VolGroup/lv_rootвместо этого
Andomar
1
В вашем примере будет создан диск объемом 5 ТБ (размер --size - МБ, см. Virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
сальто
7

Вы можете использовать плагин, который позволит вам указать размер диска https://github.com/sprotheroe/vagrant-disksize

Шаши Ранджан
источник
Это изменило размер моего диска и расширило раздел только в одной строке конфигурации. Очень гладко!
user1026263
0

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

Я пользуюсь официальным бланком Red Hat Enterpise 7.2, официально предоставленным Red Hat .

(вам потребуется учетная запись разработчика 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

И, как вы можете видеть, большая часть пространства уже была занята установкой rhel.

Однако я обнаружил, что группа томов, соответствующая /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

а также

б ) Обновите корневую файловую систему, чтобы она узнала об этом изменении.

sudo xfs_growfs /dev/mapper/VolGroup00-root

(Пожалуйста, обратите внимание, что по крайней мере для 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

... без вмешательства на уровне виртуального ящика

pkaramol
источник