vagrant 의 용량이 모자라요. 디스크를 추가해서 늘려보자.

상황 - vagrant 의 가상머신내 용량이 모자란다. 공유폴더로 하려니 권한, owner 설정등의 문제가 있다.

해결방법 : 200G 가상디스크를 생성하고, guest 의 / root 에 LVM logical 디스크를 추가한다.

조건 : 디스크 /dev/sda 로 설정되어 있고, LVM 으로 /dev/mapper/VolGroup-lv_root 가 root 에 마운트되어 있다. LVM 을 이용해 디스크용량을 확장하려는 것이다.


1. Vagrantfile 에 디스크를 생성하는 명령을 넣는다.

  config.vm.provider "virtualbox" do |vb|
    file_to_disk = File.realpath( "." ).to_s + "/disk.vdi"

    if ARGV[0] == "up" && ! File.exist?(file_to_disk)
       puts "Creating 200GB disk #{file_to_disk}."
       vb.customize [
            'createhd',
            '--filename', file_to_disk,
            '--format', 'VDI',
            '--size', 200 * 1024   # 200 GB
            ]
       vb.customize [
            'storageattach', :id,
            '--storagectl', 'SATA',
            '--port', 1, '--device', 0,
            '--type', 'hdd', '--medium',
            file_to_disk
            ]
    end

  end

  config.vm.provision "shell", path: "scripts/add_new_disk.sh"


2. provision 실행명령을 작성한다.

 스크립트 내용 : 추가된 디스크를 fdisk 로 등록하고, LVM logical 디스크로 추가한후 용량을 확장한다.

# cat scripts/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 -L +200G /dev/VolGroup/lv_root
resize2fs /dev/VolGroup/lv_root

date > /etc/disk_added_date



3. provision 명령으로 스크립트를 실행한다.

# vagrant provision
==> default: Running provisioner: shell...
    default: Running: /tmp/vagrant-shell20140730-16554-1duycg4.sh
==> default: ++ '[' -f /etc/disk_added_date ']'
==> default: ++ sudo fdisk -u /dev/sdb
==> default: Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
==> default: Building a new DOS disklabel with disk identifier 0x95391d02.
==> default: Changes will remain in memory only, until you decide to write them.
==> default: After that, of course, the previous content won't be recoverable.
==> default: Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
==> default:
==> default: WARNING: The size of this disk is 219.9 TB (219902325555200 bytes).
==> default: DOS partition table format can not be used on drives for volumes
==> default: larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
==> default: partition table format (GPT).
==> default:
==> default: WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
==> default:          switch off the mode (command 'c')
==> default: .
==> default:
==> default: Command (m for help):
==> default: Command action
==> default:    e   extended
==> default:    p   primary partition (1-4)
==> default: Partition number (1-4):
==> default: First sector (63-4294967295, default 63):
==> default: Using default value 63
==> default: Last sector, +sectors or +size{K,M,G} (63-4294967294, default 4294967294):
==> default: Using default value 4294967294
==> default:
==> default: Command (m for help):
==> default: Selected partition 1
==> default: Hex code (type L to list codes):
==> default: Changed system type of partition 1 to 8e (Linux LVM)
==> default:
==> default: Command (m for help):
==> default: The partition table has been altered!
==> default:
==> default: Calling ioctl() to re-read partition table.
==> default: Syncing disks.
==> default: ++ pvcreate /dev/sdb1
==> default:  
==> default: dev_is_mpath: failed to get device for 8:17
==> default:   Physical volume "/dev/sdb1" successfully created
==> default: ++ vgextend VolGroup /dev/sdb1
==> default:   Volume group "VolGroup" successfully extended
==> default: ++ lvextend -L +200G /dev/VolGroup/lv_root
==> default:   Extending logical volume lv_root to 218.51 GiB
==> default:   Logical volume lv_root successfully resized
==> default: ++ resize2fs /dev/VolGroup/lv_root
==> default: resize2fs 1.41.12 (17-May-2010)
==> default: Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
==> default: old desc_blocks = 2, new_desc_blocks = 14
==> default: Performing an on-line resize of /dev/VolGroup/lv_root to 57280512 (4k) blocks.
==> default: The filesystem on /dev/VolGroup/lv_root is now 57280512 blocks long.
==> default: ++ date

vagrant ssh 를 해보면 정상적으로 용량이 늘어난 것을 볼 수 있다.

% 로그를 보니 200G 가 아닌 200T 로 세팅된 듯 하다. Vagrantfile 쪽의 용량 계산을 잘 못 한듯 하다.
다시 설정을 체크해봐야 겠다.%



댓글을 달아 주세요