목적
VMware에서 1TB 를 thick provisioning 하였지만 실제는 8TB만 사용하는 경우, VM을 다른 호스트로 마이그레이션 하는데 많은 시간이 소요되어 VM의 크기를 줄이고자 함
대상 머신
# cat /etc/centos-release CentOS release 6.4 (Final)
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1T 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 1023.5G 0 part ├─vg_foodle-lv_root (dm-0) 253:0 0 50G 0 lvm / ├─vg_foodle-lv_swap (dm-1) 253:1 0 7.9G 0 lvm [SWAP] └─vg_foodle-lv_home (dm-2) 253:2 0 965.7G 0 lvm /home # fdisk -l /dev/sda Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux /dev/sda2 64 133675 1073228800 8e Linux LVM # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 485M 37M 423M 9% /boot /dev/mapper/vg_foodle-lv_root 50G 3.0G 44G 7% / /dev/mapper/vg_foodle-lv_home 951G 6.1G 897G 1% /home # mount | grep dev | grep -vE 'pts|shm' /dev/sda1 on /boot type ext4 (rw) /dev/mapper/vg_foodle-lv_root on / type ext4 (rw) /dev/mapper/vg_foodle-lv_home on /home type ext4 (rw) # cat /etc/fstab /dev/mapper/vg_foodle-lv_root / ext4 defaults 1 1 UUID=71c5b202-b388-4410-82e0-9d8d99428616 /boot ext4 defaults 1 2 /dev/mapper/vg_foodle-lv_home /home ext4 defaults 1 2 /dev/mapper/vg_foodle-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
VM 축소
개요
도구 설치
덤프용 디스크(sdb), 복원용 디스크(sdc) 2개 생성 (thin provisioning 으로 생성)
sda → sdc MBR 및 부트파티션 백업
sda → sdb 로 덤프, sdb → sdc 로 복원
새로운 디스크로 부팅 및 정상동작 확인
기존의 디스크 삭제
도구 설치
# yum --disablerepo=* --enablerepo=base-vault,update-vault,extras-vault install dump
추가한 디스크 확인
# lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 32G 0 disk # lsblk /dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdc 8:16 0 32G 0 disk
덤프용 디스크 준비
# mkfs.ext4 /dev/sdb # mkdir -p /mnt/bak # mount /dev/sdb /mnt/bak/
MBR 및 부트 파티션 백업
# 기존 디스크 부트 파티션 용량 확인 # sda1 부트파티션은 8225280바이트가 64블럭 만큼 있음을 확인 # fdisk -l /dev/sda Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux /dev/sda2 64 133675 1073228800 8e Linux LVM # sda에서 8225280바이트씩 0번부터 64번째 블럭까지를 읽어서 sdc에 기록 # dd if=/dev/sda of=/dev/sdc bs=8225280 count=64 64+0 records in 64+0 records out 526417920 bytes (526 MB) copied, 6.22175 s, 84.6 MB/s # sdc의 파티션 확인 # sdc2의 경우 디스크 크기가 1TB(1073228800블럭) 가까이 나옴 > 삭제 후 파티션 다시 생성해야 함 # fdisk -l /dev/sdc Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 * 1 64 512000 83 Linux /dev/sdc2 64 133675 1073228800 8e Linux LVM
복원용 디스크 준비
# fdisk /dev/sdc >> sdc2 파티션 삭제 Command (m for help): d Partition number (1-4): 2 >> sdc2 파티션 생성 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (64-4177, default 64): Using default value 64 Last cylinder, +cylinders or +size{K,M,G} (64-4177, default 4177): Using default value 4177 >> 파티션 확인 Command (m for help): p Device Boot Start End Blocks Id System /dev/sdc1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sdc2 64 4177 33038728+ 83 Linux >> 변경사항 기록 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
복원 준비
# mkfs.ext4 /dev/sdc2 # mkdir -p /mnt/{boot,root} # mount /dev/sdc1 /mnt/boot/ # mount /dev/sdc2 /mnt/root/
루트 파티션 덤프 및 홈 디렉터리 백업
# cd /mnt/bak # dump -0uf dm-0-root.dump /dev/dm-0 DUMP: Date of this level 0 dump: Thu Sep 8 12:17:47 2022 DUMP: Dumping /dev/dm-0 (an unlisted file system) to dm-0-root.dump ... DUMP: Closing dm-0-root.dump DUMP: Volume 1 completed at: Thu Sep 8 12:18:58 2022 DUMP: Volume 1 3134390 blocks (3060.93MB) ... DUMP: finished in 70 seconds, throughput 44777 kBytes/sec DUMP: DUMP IS DONE # tar zcf home.tgz /home
파티션 복원 및 홈 디렉터리 복원
# cd /mnt/root/ # rm -rf * # restore -rf /mnt/bak/dm-0-root.dump # cd /mnt/root/home # tar zxf /home/msjang/bak/home.tgz -C . --strip 1
fstab 수정
UUID 로 표시된 디스크를 /dev/sda.. 으로 수정하고, 사용하지 않는 swap과 홈파티션은 제거함
/mnt/root/etc/fstab
/dev/sda1 /boot ext4 defaults 0 0 /dev/sda2 / ext4 defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
부트로더 수정
UUID 로 표시된 루트 디스크를 /dev/sda2 로 수정하고, LVM은 사용하지 않으므로 제거하고, 부팅 로그를 보기 위해 rhgb quite 옵션을 삭제하고, 부팅로그의 loglevel 을 올림
/mnt/boot/grub/grub.conf
default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-358.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM loglevel=7 initrd /initramfs-2.6.32-358.el6.x86_64.img
디스크 변경
서버 전원을 off 하고, VMware에서 모든 디스크를 제거한 후, 3번째 디스크를 0번째 슬롯에 연결
부팅 및 정상동작 확인
부팅 후 정상동작 확인