ฉันจะเพิ่มขนาดดิสก์ใน Vagrant VM ได้อย่างไร


62

ฉันมี VM ที่จัดการโดยVagrantโดยใช้VirtualBoxบนเซิร์ฟเวอร์โฮสต์ของ Ubuntu My Vagrant box ใช้ Puppetlabs Debian 6.0.7 baseboxซึ่งใช้ LVM สำหรับการแบ่งพาร์ติชัน

โดยค่าเริ่มต้นดิสก์คือ 8GB ซึ่งเล็กเกินไปสำหรับวัตถุประสงค์ของฉัน ฉันอยากจะ:

  1. เพิ่มขนาดของดิสก์ที่มีอยู่และระบบไฟล์โดยไม่ทำลายและสร้าง VM ของฉันใหม่
  2. กำหนดค่า Vagrant เพื่อที่ในอนาคตจะสร้างดิสก์ขนาดใหญ่สำหรับโครงการนี้

ใครสามารถอธิบายวิธีการทำเช่นนี้?

คำตอบ:


25

โดยส่วนตัวฉันคิดว่ามันจะง่ายกว่าที่จะติดตั้ง HDD เสมือนเพิ่มเติมและติดตั้งเข้ากับจุดเชื่อมต่อที่เหมาะสมตัวอย่างเช่น/optและย้ายสิ่งของของคุณไปใช้rsyncเพื่อแก้ไขปัญหานี้หลังจากที่ทุกกล่องหุ่นคนจรจัดใช้สำหรับการทดสอบ

เหตุผลที่ : VBoxManage modifyhdทำงานได้เฉพาะกับภาพ VDI ดั้งเดิม อย่างไรก็ตามกล่องฐานคนจรจัดจะถูกส่งออกโดยทั่วไป OVF / OVA โดยใช้VMDKรูปแบบ

ดูเอกสาร VirtualBox

--resize xตัวเลือก (ที่ x เป็นที่ต้องการพื้นที่รวมใหม่เป็นเมกะไบต์) ช่วยให้คุณสามารถเปลี่ยนความจุของภาพที่มีอยู่นั้น นี่เป็นการปรับขนาดตรรกะของดิสก์เสมือนโดยไม่มีผลกระทบกับขนาดทางกายภาพมากนัก [37] ปัจจุบันนี้ใช้งานได้เฉพาะกับรูปแบบ VDI และ VHD และเฉพาะสำหรับรุ่นที่จัดสรรแบบไดนามิกและสามารถใช้เพื่อขยาย (ไม่หด) ความจุเท่านั้น

เพื่อเพิ่มความจุของดิสก์สำหรับ Vagrant Base Box

ขั้นตอนคือ

  1. เพื่อให้สามารถปรับขนาด HDD ได้คุณจะต้องแปลงเป็น VDI ก่อนเช่นVBoxManage clonehd in.vmdk out.vdi --format VDIจากนั้นจึงต่อพ่วงอีกครั้ง (การใช้ GUI นั้นง่ายกว่า)

  2. ปรับขนาดโดยใช้VBoxManage modifyhd box.vdi --resize 15360ซึ่งเพิ่มความจุเป็น 15GB

  3. อย่างไรก็ตามสิ่งนี้จะเปลี่ยนความจุของไดรฟ์เท่านั้นคุณจะต้องขยายระบบไฟล์สำหรับแขกในภายหลัง ตัวอย่างเช่นใช้resize2fs -p -F DEVICEสำหรับ ext {3,4}


3
โปรดทราบว่าหลังจากปรับขนาดและก่อนที่จะเริ่มใช้งานกล่อง vagrant อีกครั้งคุณต้องอัปเดตการกำหนดค่าการจัดเก็บข้อมูล VirtualBox เพื่อใช้ VDI ใหม่และไม่ใช่ VMDK ดั้งเดิม: ใน VirtualBox> ที่เก็บข้อมูล> ลบฮาร์ดดิสก์ที่มีอยู่> เพิ่มฮาร์ดดิสก์ และชี้ไปที่ภาพ VDI ใหม่)
Steve Swinsburg

สำหรับผู้ใช้ Debian ผมขอแนะนำให้ยังมองหาที่โพสต์นี้: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive เมื่อฉันได้ไปขั้นตอนที่ 3 resize2fsมันไม่ได้ค่อนข้างง่ายเหมือนการทำงาน โชคดี!
phirschybar

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
ทำงานเหมือนจับใจ ดูเหมือนจะเป็นทางออกที่ง่ายที่สุดที่ฉันเคยเจอ ขอบคุณครับ
Rico

1
สำหรับกล่อง Debian9 จะเป็นการเพิ่มขนาดของดิสก์ดิบ แต่ไม่ใช่พาร์ติชันจริงที่ใช้โดยการติดตั้ง Debian ขนาดดิสก์ที่เพิ่มขึ้นไม่สามารถใช้งานได้โดยตรง
Tonin

@Tinin คุณจัดการเพื่อหาทางออกหรือไม่?
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 centosแต่สามารถปรับให้เข้ากับ Ubuntu ได้อย่างง่ายดาย

แทนที่จะเพิ่มดิสก์ตัวเลือกอื่น ๆ รวมถึง:

  • ใช้กล่องที่มีดิสก์ขนาดใหญ่เช่นopscode bentoซึ่งมีดิสก์40Gb
  • สร้างกล่องของคุณเองโดยใช้บรรจุหีบห่อ คุณสามารถใช้นิยามตัวแบ่งบรรจุกล่อง opscode เป็นจุดเริ่มต้น

สวัสดีฉันอยากลองวิธีแก้ปัญหาของคุณ คุณสามารถยืนยันได้ที่ไหนในไฟล์ Vagrant ส่วนของรหัสนี้เพิ่มเข้ามา? ขอแสดงความนับถือ
Rudi Strydom

@RudiStrydom ฉันได้อัปเดตคำตอบแล้ว - หวังว่าจะเหมาะสมกว่านี้แล้ว
Chris Snow

2
สิ่งนี้ควรเพิ่มในconfig.vm.provider :virtualbox do |vb|บล็อกเพื่อทำให้สิ่งต่าง ๆ ชัดเจนยิ่งขึ้น
BT

1
หากคุณได้รับข้อผิดพลาด "ระบุขนาดหรือขอบเขต" lvextendลองlvextend -l +100%FREE /dev/VolGroup/lv_rootแทน
Andomar

1
ตัวอย่างของคุณจะสร้างดิสก์ 5TB (- ขนาดหน่วยเป็น MB ดูvirtualbox.org/manual/ch08.html#vboxmanage-createvdi )
backflip

7

คุณสามารถใช้ปลั๊กอินซึ่งจะช่วยให้คุณสามารถระบุขนาดของดิสก์ https://github.com/sprotheroe/vagrant-disksize


สิ่งนี้ปรับขนาดดิสก์ของฉันและขยายพาร์ติชันในการกำหนดค่าเพียงหนึ่งบรรทัด เนียนมาก!
user1026263

0

ปฏิเสธความรับผิดชอบ: ตอบเป็นไปได้มากที่สุดสำหรับ distros โดยใช้การจัดการปริมาณตรรกะเช่น Rhel ซึ่งกรณีการใช้งานดังต่อไปนี้:

ฉันได้ใช้อย่างเป็นทางการ Red Hat Enterpise กล่อง 7.2 คนจรจัดอย่างเป็นทางการจัดเตรียมโดยหมวกสีแดง

(คุณจะต้องมีบัญชีผู้พัฒนา rhel ซึ่งคุณสามารถสร้างได้ฟรี)

เมื่อทำการติดตั้งฉันมีปัญหากับความจริงที่ว่ามีเพียง 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

และอย่างที่คุณเห็นพื้นที่ส่วนใหญ่ถูกใช้ไปแล้วโดยการติดตั้ง 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

ดังนั้นสิ่งเดียวที่เหลืออยู่ที่ต้องทำคือ:

a ) เพิ่มขนาดของโลจิคัลวอลุ่มของเราโดยพูด 10G

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

และ

b ) อัปเดตระบบไฟล์รูทของคุณเพื่อให้ตระหนักถึงการเปลี่ยนแปลงนี้

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

... ไม่มีการแทรกแซงในระดับกล่องเสมือน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.