잘못된 볼륨에서 부팅하는 Amazon EC2 Linux 인스턴스 문제 해결

잘못된 볼륨에서 부팅하는 Amazon EC2 Linux 인스턴스 문제 해결 (Troubleshoot an Amazon EC2 Linux instance booting from wrong volume)

경우에 따라 /dev/xvda나 /dev/sda에 연결된 볼륨이 아닌 다른 볼륨이 Linux 인스턴스의 루트 볼륨이 될 수 있어요. 다른 인스턴스의 루트 볼륨을 연결하거나, 루트 볼륨의 스냅샷에서 만든 볼륨을 기존 루트 볼륨이 있는 인스턴스에 연결했을 때 발생할 수 있어요.

출처: 문서

본문

이것은 Linux의 초기 램디스크(initial ramdisk)가 동작하는 방식 때문이에요. /etc/fstab에서 /로 정의된 볼륨을 선택하는데, 일부 배포판에서는 볼륨 파티션에 연결된 라벨로 결정돼요. /etc/fstab이 다음과 같은 형태일 수 있어요.

LABEL=/ / ext4 defaults,noatime 1 1 
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

두 볼륨의 라벨을 확인하면 둘 다 / 라벨을 가진 것을 볼 수 있어요.

[ec2-user ~]$ sudo e2label /dev/xvda1 
/ 
[ec2-user ~]$ sudo e2label /dev/xvdf1 
/

이 예제에서 초기 램디스크가 실행된 후 의도한 /dev/xvda1 볼륨 대신 /dev/xvdf1이 인스턴스가 부팅하는 루트 볼륨이 될 수 있어요. 해결하려면 같은 e2label 명령으로 부팅하지 않으려는 연결 볼륨의 라벨을 변경해요.

일부 경우 /etc/fstab에 UUID를 지정하면 해결될 수 있어요. 다만 두 볼륨이 같은 스냅샷에서 왔거나, 보조 볼륨이 기본 볼륨의 스냅샷에서 만들어진 경우 UUID를 공유해요.

[ec2-user ~]$ sudo blkid 
/dev/xvda1: LABEL="/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334 
/dev/xvdf1: LABEL="old/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334

연결된 ext4 볼륨의 라벨 변경

e2label 명령으로 볼륨의 라벨을 /가 아닌 값으로 변경해요.

[ec2-user ~]$ sudo e2label /dev/xvdf1 old/ 

볼륨에 새 라벨이 있는지 확인해요.

[ec2-user ~]$ sudo e2label /dev/xvdf1 
old/

연결된 xfs 볼륨의 라벨 변경

xfs_admin 명령으로 볼륨의 라벨을 /가 아닌 값으로 변경해요.

[ec2-user ~]$ sudo xfs_admin -L old/ /dev/xvdf1
writing all SBs
new label = "old/"

라벨을 변경하면 인스턴스를 재부팅했을 때 초기 램디스크가 올바른 볼륨을 선택할 수 있어요.

중요: 새 라벨이 있는 볼륨을 분리해 다른 인스턴스에 루트 볼륨으로 반환하려면 위 절차를 다시 수행해 볼륨 라벨을 원래 값으로 변경해야 해요. 그렇지 않으면 램디스크가 / 라벨의 볼륨을 찾지 못해 다른 인스턴스가 부팅되지 않아요.

더 알아보기