[배경]
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 만 장착해서 부팅을 해 봅니다.
저는 잘 되는 걸 확인했네요
그럼 성공하시길 ~
'리눅스이야기' 카테고리의 다른 글
네트워크 패킷 캡쳐 방법 비교 (0) | 2012.07.18 |
---|---|
portsentry를 사용해서 포트스캔 탐지 및 tcp-wrapper 에 자동 기록 (0) | 2007.02.23 |
리눅스 보안 IP 접속 차단 (1) | 2007.02.23 |
아파치 서버시에 특정아이피 대역만 허용 (0) | 2007.02.23 |
mysql 백업 스크립트 (0) | 2007.02.23 |
리눅스 백업 방법 3 (0) | 2007.02.23 |
리눅스 백업 방법 2 (0) | 2007.02.23 |
리눅스 서버의 백업 (0) | 2007.02.23 |