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 쪽의 용량 계산을 잘 못 한듯 하다.
다시 설정을 체크해봐야 겠다.%