본문 바로가기
[AWS 기타]

[AWS] Amazon Linux 3 부팅 디스크 용량 감소하는 방법

by SAMSUNG Metaverse-Cloud 2024. 11. 14.
728x90

 

AWS 를 사용하다보면 Root 볼륨을 너무 높게 잡아버리는 경우가 존재한다.

AWS EBS 특성상 용량을 증가시키는 것은 잘 나와있으며 방법 또한 간단하다. 

그러나 용량 수정기능에서 용량을 줄이는 것은 불가능하다.

 

스냅샷을 찍어서 복구를 한다고 하더라도 아래와 같이 볼륨 크기는 확대만 가능하며 축소할 수 없다고 한다. 

 

 

그렇다면 내가 루트 볼륨을 잘못 잡아버리면 어떻게 볼륨 크기를 변경해야 하는 걸까?

 

필요 전제 조건 

1. 원본 디스크 스냅샷 ( 데이터 마이그레이션 용도 OLD_DATA 라고 칭하겠음)

2. Amazon Linux 2023 서버 생성 후 디스크만 제외하고 서버 삭제 ( 남은 디스크를 NEW_DATA라고 칭하겠음)

3. 마이그레이션 작업을 진행 할 임시 EC2 필요 ( Temp EC2라고 칭함)

 

작업 순서

1. Temp EC2에 OLD_DATA, NEW_DATA  볼륨 Attach 및 Data 마이그레이션

2. UUID, fstab, grub.cfg 수정

3. 디스크 변경 작업

 

 

1. Disk Attach 및 Data 마이그레이션

Disk Attach는 AWS 콘솔 화면에서 쉽게 할 수 있으므로 생략하겠습니다.

 

Temp EC2에 OLD_DATA, NEW_DATA를 Attach한 후 Temp EC2에 접속하여 lsblk 명령어를 입력해 봐라

lsblk는 블럭 장치 목록을 마운트 되지 않은 블럭 장치 포함해서 보여주는 명령어 이다. 

 

nvme0n1        259:0    0   8G  0 disk
├─nvme0n1p1   259:1    0   8G  0 part /
├─nvme0n1p127 259:2    0   1M  0 part
└─nvme0n1p128 259:3    0  10M  0 part /boot/efi
nvme1n1        259:4    0  20G  0 disk
├─nvme1n1p1   259:5    0  20G  0 part
├─nvme1n1p127 259:6    0   1M  0 part
└─nvme1n1p128 259:7    0  10M  0 part
nvme2n1        259:8    0  10G  0 disk
├─nvme2n1p1   259:9    0  10G  0 part
├─nvme2n1p127 259:10   0   1M  0 part
└─nvme2n1p128 259:11   0  10M  0 part

 

그럼 위와같은 화면이 나온다. nvme0n1은 내 root 볼륨이고

nvme1n1은 OLD DATA,   nvme2n1은 NEW DATA라고 생각하면 된다. 

 

그 후 blkid 명령어를 통해서 각 파티션의 UUID를 확인해 준다.

우리는 nvme2n1의 UUID를 nvme1n1의 UUID로 맞춰줄 것이다. 

또한 우리가 작업 해 줄 것은 각각의 xfs 형식을 가진 Data Disk이다.

OLD DATA의 경우는 nvme1n1p1이 될 것이고 NEW DATA 의 경우는 nvme2n1p1이다. 

다른 파티션은 그냥 놔두는게 좋다. 

특히 128은 부팅에 관련된 파티션으로 잘못건드리면 부팅이 안된다. 

 

 

mkdir /mnt/new_data

mkdir /mnt/old_data

데이터 마이그레이션을 위해서 각각의 디스크를 마운트 해 줄 디렉토리를 생성해야 한다. 

 

mount /dev/nvme1n1p1 /mnt/old_data/

mount /dev/nvme2n1p1 /mnt/new_data/

그 후 마운트를 해준다. 

 

mount: /mnt/new_data: wrong fs type, bad option, bad superblock on /dev/nvme2n1p1, missing codepage or helper program, or other error.

그런데 마운트를 하려고 하는데 이런 명령어가 뜰 수 있다.

여러 이유가 있을 수 있지만 우리가 하는 작업의 경우 UUID가 겹쳐서 해당 증상이 나오는 것이다. 

Amazon Linux 2023으로 EC2를 시작하고 루트 볼륨을 만들면 UUID가 겹치는 경우가 생긴다.

그럴 경우 mount 명령어에 -o nouuid 라는 옵션을 주면 된다. 

이 옵션은 일시적으로 해당 작업에 UUID를 중복체크 하지 않는다 라는 것이다. 

 

 

xfsdump -l0 -J - /mnt/old_data | xfsrestore -J - /mnt/new_data

해당 명령어는 xfs 형식을 가진 파일 시스템을 다른 장치나 디렉토리로 백업하고 복원하는 기능을 가지고 있다. 

level을 0으로 지정해 전체 데이터를 백업해 준 후 new_data 쪽으로 복원하는 것이다. 

 

그 후 부팅 디스크쪽 작업을 할 것이다.

mount /dev/nvme2n1p128 /mnt/new_data/boot/efi/

cd /mnt/new_data/boot/efi/EFI/amzn/

vi grub.cfg

이 grub.cfg 파일이 부팅시 읽어오는 파일이라고 생각해주면 된다. 

 

search.fs_uuid (내 EC2 UUID) root
set no_modules=y
set prefix=($root)'/boot/grub2'
configfile $prefix/grub.cfg

이 파일을 열어보면 위처럼 나오는데 Ec2 UUID를 OLD _DATA의 UUID로 변경하면 된다.

그렇게 되면 부팅 시 해당 UUID를 확인해서 루트 볼륨으로 올라올 것이다. 

 

그 후엔 fstab을 변경해야 한다. 

vi /mnt/new_data/etc/fstab

UUID=(UUID)     /           xfs    defaults,noatime  1   1
UUID=(UUID)       /boot/efi       vfat    defaults,noatime,uid=0,gid=0,umask=0077,shortname=winnt,x-systemd.automount 0 2

왜냐면 우리는 모든 데이터를 OLD DATA로 덮어 씌웠기 때문에 모든 UUID가 그 전 DATA 기준으로 잡혀있다.

그러므로 /boot/efi가 마운트 돼서 올라오기 위해서는 /boot/efi의 UUID를 변경해야 한다. 

 

그 이후 두 New Disk의 마운트를 풀어준다. 

umount /mnt/new_data/boot/efi
umount /mnt/new_data

 

그리고 마지막으로 실제 디스크의 UUID를 변경해주면 된다.  

xfs_admin -U (OLD_data UUID) /dev/nvme2n1p1

 

이제 resizing 한 디스크를 root 볼륨에 붙여서 부팅이 되는지 확인해보면 된다. 

728x90

'[AWS 기타]' 카테고리의 다른 글

[AWS] VPC간 보안그룹 공유 기능  (0) 2024.11.11
Amazon Linux 2023 시스템 로그 확인법  (0) 2024.10.30
[AWS] AWS 환경에서 사용 불가능 IP  (1) 2024.10.25
AWS-Vault  (0) 2024.07.28
VPN이란 무엇인가?  (0) 2023.02.08