목적

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 로 복원

새로운 디스크로 부팅 및 정상동작 확인

기존의 디스크 삭제


도구 설치

/etc/yum.repos.d/CentOS-Base-Vault.repo
[base-vault]
name=CentOS-$releasever - Base
baseurl=http://ftp.iij.ad.jp/pub/linux/centos-vault/centos/$releasever/os/$basearch/
gpgcheck=0
priority=1
protect=1

[update-vault]
name=CentOS-$releasever - Updates
baseurl=http://ftp.iij.ad.jp/pub/linux/centos-vault/centos/$releasever/updates/$basearch/
gpgcheck=0
priority=1
protect=1

[extras-vault]
name=CentOS-$releasever - Extras
baseurl=http://ftp.iij.ad.jp/pub/linux/centos-vault/centos/$releasever/extras/$basearch/
gpgcheck=0
priority=1
protect=1
# 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번째 슬롯에 연결


부팅 및 정상동작 확인

부팅 후 정상동작 확인


  • No labels