2025. 2. 9. 10:45

[CentOS7.6] LVM 으로 설치된 OS 를 신규 HDD 일반파티션으로 복제하기

[배경]

LVM은 리눅스 설치시 기본 파티션구성을 아무생각없이 진행하면 선택되어 있는 파티션 구성 기본값입니다.

하지만 장점에도 불구하고 여러가지 신경써야 할 것들이 많아서 

유지보수등에는 그리 추천되지 않습니다.

 

누군가가 설치해 놓은 리눅스 LVM 구성을 

어쩔 수 없이 변경해야 할 경우

솔직히 변경은 어렵고

신규 HDD 를 마운트해서 기존 OS 를 복제하는 방법을 취해야 합니다.

 

그 방법에 대해서 설명드리고자 합니다.

 

우선 기존 HDD 와 동급 혹은 더 큰 용량의 신규 HDD 가 필요합니다.

 

여기에서는 VMware ESXi 에 설치된 VM 을 통해서 테스트를 진행했습니다.

 

1. 신규 HDD 40GB 를  VM 에 추가함

실제 물리서버나 PC 에 설치된 때에라면 전원 끄고 신규HDD 장착하고 다시 전원을 켜야 하겠죠.

저는 샘플 VM 에다가 미리 LVM 으로 ( CentOS 7.6 기본값 선택) 설치해서 40GB 기존 HDD 가 있는 상태에서 

다시 추가하였습니다.

 

기존 HDD 는 /dev/sda 

신규 HDD 는 /dev/sdb 로 인식되었습니다. 

 

2. 신규 HDD 를 fdisk 로 3개의 파티션으로 포맷

(1)  /dev/sdb1 을 /boot 파티션으로 1GB 

(2)  /dev/sdb2 을 swap 파티션으로 8GB

(3) /dev/sdb3 을 신규 "/" 파티션으로 나머지 전체 

 

(4) /dev/sdb1 을 LINUX 타입으로 지정

(5) /dev/sdb2 을 LINUX SWAP 타입으로 지정

(6) /dev/sdb3 을 LINUX 타입으로 지정 

 

 fdisk 는 HDD 의 파티션을 생성/삭제/추가하고 관리하는 tool 입니다.

현재 부팅된 OS 에 마운트 되어 있든  안되어 있든 

관리 가능합니다.

 

fdisk /dev/sdb 

를 실행하면 아래와 같이 나오는데 

m 을 누르면 도움말이 나옵니다. 

아래의 순서로 입력해서 첫번째 파티션 "/boot" 용도의 파티션을 생성합니다. 

n  :  신규파티션 

p :  primary 인지 extend 인지 지정 

1 :  첫번째 파티션이므로 1  을 입력 즉 /dev/sdb1 이 되는 것입니다. 

First sector 는 기본값이므로 그냥 엔터

Last sector 는 +1G 입력  

 

 

 

두번째 파티션  "swap" 파티션 용도로 생성합니다. 

n  :  신규파티션 

p :  primary 인지 extend 인지 지정 

2 :  두번째 파티션이므로 2  을 입력 즉 /dev/sdb2 가 되는 것입니다. 

First sector 는 기본값이므로 그냥 엔터

Last sector 는 +8G 입력  

 

 

 

세번째 파티션 "/" 을 생성

n  :  신규파티션 

p :  primary 인지 extend 인지 지정 

3 :  세번째 파티션이므로 3  을 입력 즉 /dev/sdb3 이 되는 것입니다. 

First sector 는 기본값이므로 그냥 엔터

Last sector 는 맨 끝까지 사용하므로 그냥 엔터 

p 를 누르면 현재 파티션 구성을 display 해줍니다. 

 

 

4.  중요한 것은 3개의 파티션 모두 Id 값이 83 으로 일반  LINUX 파티션 타입입니다.

/dev/sdb1 과 /dev/sdb3 는 괜찮지만 

"swap" 용도의 /dev/sdb2 는 맞지 않습니다.

이걸 변경해보죠

 

m 을 눌러서 도움말을 보면  "t" 라는 값이 보입니다.  chage a patition's system id 

여기서 swap 이 보이는 값이 82 입니다. 

 

t  :  파티션 id 값을 변경 

2  :  두번째 파티션 선택 

82  : Hex 코드값 82 입력하고 엔터 

 

변경된 파티션 테이블을 다시 출력해봅니다. 

두번째 /dev/sdb2 가 Linux swap 으로 보입니다. 

 

제일 중요한 마지막에 "w" 를 눌러서 저장하고 나와야 합니다.

이걸 안하면 다시 처음부터겠죠?

 

자 fdisk /dev/sdb 로 확인해보면 아래와 같네요

음 신규HDD 용량이 40GB 가 아니라 50GB 로 만들었었네요. 

헷갈리지 않으니 더 좋긴 하네요. 

 

 

5. 여기부터가 본게임입니다. 

첫번째 와 세번째 파티션을 xfs 파일시스템으로 포맷합니다.

 

mkfs.xfs /dev/sdb1 

mkfs.xfs /dev/sdb3 

뒤의 -f 는 강제로 수행한다는 의미입니다. 안될때에는 -f 를 붙이세요 

 

 

6.  임시로 마운트할 디렉토리를 생성합니다.

 

mkdir -p /mnt/newroot

mkdir -p /mnt/newroot/boot

 

7.  신규 HDD 를 마운트합니다.

 

mount /dev/sdb3 /mnt/newroot

mount /dev/sdb1 /mnt/newroot/boot

 

 

8. rsync 를 이용해서 기존HDD 의 내용을 그대로 신규HDD 로 복제합니다. 

 

rsync -avxHAX --progress / /mnt/newroot

*** 여기서 /boot 파티션복사가 안됨.
다시 한번 boot 에 대해서 실행 ( 아래 명령어에서 "/" 빠지지 않도록 유의할것 )
rsync -avxHAX --progress /boot/ /mnt/newroot/boot/

 

 

9. 복사가 잘 되었는지 한번 확인해보세요

중요한 /mnt/newroot/boot 아래에 내용들이 있어야 합니다. 

 

ls -l /mnt/newroot/boot

ls -l /mnt/newroot

 

 

10. 신규HDD 파티션의 UUID 값을 알아냅니다.

신규 HDD 의 /etc/fstab 에 내용을 수정해서 넣어야 하니깐요. 

그래야 나중이 신규HDD 로 부팅시 문제가 없겠죠?

 

blkid /dev/sdb1
blkid /dev/sdb3

 

11. 해당값을 신규 HDD 의   /mnt/newroot/etc/fstab 파일에 수정해줍니다.

UUID=<sdb1의 UUID>  /boot  xfs   defaults  0 1
UUID=<sdb2의 UUID>  /      xfs   defaults  0 1

 

swap 파티션에 대해서는 원래 적지 않는답니다. 

 

12.  chroot 환경으로 진입

mount -o bind /dev /mnt/newroot/dev
mount -o bind /proc /mnt/newroot/proc
mount -o bind /sys /mnt/newroot/sys
chroot /mnt/newroot

 

chroot 는 멀까요?  리눅스의 최상위 디렉토리는 "/" 라는 곳입니다.

이걸 chroot 다음에 오는 경로가 최상위가 되도록 바꾸는 것입니다. 

디스크 복구등을 할 때 유용한 명령어입니다.

현재 디스크 복제도 복구와 비슷한 작업이겠죠? 

 

13. GRUB 신규hdd 에 설치
grub2-install --target=i386-pc --recheck /dev/sdb
grub2-mkconfig -o /boot/grub2/grub.cfg

 

[root@localhost ~]# grub2-install --target=i386-pc --recheck /dev/sdb
Installing for i386-pc platform.

Installation finished. No error reported.
[root@localhost ~]# 
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-fb6bfeb23dc240c9a0e8c2d2445f53ce
Found initrd image: /boot/initramfs-0-rescue-fb6bfeb23dc240c9a0e8c2d2445f53ce.img
Found CentOS Linux release 7.6.1810 (Core)  on /dev/sdb3
done
[root@localhost ~]# 

 

신규 HDD 가 부팅이 가능하도록 만들어주는 단계입니다. 

 

14. 부팅UUID 를 아래 명령어로 갱신합니다.

시간이 걸려도 완료될 때까지 기다려주세요.

이걸 중간에 취소해서 다시 한번 더 작업했습니다. 

 

dracut -f 

 

15. chroot 환경 나와서 마운트 해제 
exit
umount -R /mnt/newroot

 

16. 해당 VM 전원을 끄고 파워오프 이후에 신규 HDD 만 장착해서 부팅을 해 봅니다. 

저는 잘 되는 걸 확인했네요 

 

그럼 성공하시길 ~